You keep it clean before you get into this. I just got to say how grateful I am for all of y'all Didn't just really just grateful in life in general. I'm grateful for our family grateful for friends Grateful for having peace just being at a point in life where we have peace Because that's that's super important man. That's really really important I'm grateful for you all how active you are on the channel How engaged you are with everything and how big of a part you all are with everything that goes on here So I appreciate that a lot. Just wanted to give you a little reminder, man Anyway, I do really like Really like what i'm seeing from these ravens so far I hope it's not a smokescreen, but because I know like ravens a it's it's smokescreen season now, man It's smokescreen season now, but I do like this start because i'm hoping I really hope That this can be the turning of a new page I don't even you know what not even just a turn of a new page and not even just a new chapter in the book because I want the old book to sort of uh Be gone Or you know, I want them to get a newer version of the book that they have right now Just a newer version of it. I just upgraded version of it But it seems like they are off to a good start and what I mean when I say that is the people That they've been uh, they're interested in interviewing like here goes one of them Ravens have requested permission to interview vikings pass game coordinator uh, brian and and jelly I'm gonna mess up his name. So i'm just letting you all know in advance brian and jelly chill For their offensive coordinator position per sources veteran nfl coach help minnesota to a top five passing offense in 2022 So I like that. I like that you see success And you look you say oh man curc cousins curc cousins and a lot of people get on curc cousins They they chime they say he's this he's that curc cousins ball this year. He did He balled this year. Yeah, they came up short again But curc cousins ball this year man straight up There's a lot of games where it looked like the vikings were out of it. Um, and they came back They had some historic comebacks, uh, but they he did this thing and he has been doing this thing for a while now I know we all we make jokes about curc cousins. You like that, but curc cousins been doing this thing for a little minute, man um, so shout out to curc, but Raven see that they say hey, man, it's got curc cousins balling and now you do got to look at the situation too now You got a Justin Jefferson. It's like, oh, okay.  I'm hearing are firmly on ravens radar firmly. So that means hey We really want to talk to these guys. We got to we got to make it happen All right for offensive coordinator former coach head coach frank right and I've heard a lot of ravens fans be like Hey, yeah, that that's the one that's that's one right there that I would love A lot of ravens fans been talking about frank right for a minute, man A lot of them ever since he got fired and I know so many people say, oh, yeah, that that's a john hopper I hear right there. Well, that's a good one right there So we'll see. Um Now this this is my favorite one right here. This this is my favorite one right here chief's offensive coordinator eric b enemy That yeah, that's that's the one right there. That's the one right there Because that and I mean we've been talking about that for a little minute now um How would that work because eric b enemy like He like Because he's been borderline like a head coach. We've been thinking and wondering like man. What what's going on?  Uh, oh But yeah, now we see that they they still bald They still bald so shout out to eric b enemy shout out to that whole staff because they Yeah, they they get it They get it the way that they Do their offense they just It's like They have such a good core, but then they they get creative. They don't get too Pretty with it though. They don't get too fancy with it, but they still remain creative They still always always coming up with new stuff. That's one thing that I really like my guy, um in I forgot how to pronounce his name it gets in or size seven my apologies my friend I'd be butchering people's names as you saw with the vikings pass game coordinator But anyway, my guy made a really good point about ravens next offensive coordinator Um, because he talked about how it will be nice for them to get an offensive coordinator that came from a successful Offense like I know a shanahan offense. He's been talking about that Uh eagles offense. I know people been looking at their offensive coordinator the passing game The qb coach or whatnot, but um, he said yeah if they come from a Good offense already. That's great, but at the same time you still need somebody that's going to still be able to come Out with some new stuff as well So if they they do do doing that thing right now is amazing. That's Phenomenal job But you still need somebody that's going to continue to improve continue to evolve See greg roman, he came through Did his thing Was amazing It was a knight like I always say about greg roman not a bad offensive coordinator, but just really a great introductory offensive coordinator it hits a limit it hits a peak really fast The greg roman offense And once it hits that peak that's it and it's like everything goes out the window And I mean the situation of play calling that that was Kind of there from the beginning, but it just that's something that progressed to a worse level over time But it just it hit his peak super early But so that's why you need somebody that's going to continue to evolve this thing continue to help it grow So yeah, eric being to me. That was nice seeing his name on there and then Last but not least as far as outside guys Bucks offensive coordinator byron lefwich Now, uh, I know people look at the bucks offense from this past year Like oh byron lefwich, man. He's dude just got fired from the bucks What does he know? What's he gonna do for the reasons? Well, um They did win the division. I mean the division was garbage, but you look at he was offensive coordinator the past couple years Superbowl, um Brady leading the league and touchdown passes. Was it passing yards too? No, no probably patching my homes were passing yards, but leading the league and touchdown passes Um, so they had something over there. They had something over there. They did not have a run game They certainly didn't but you really think you think it's gonna be a Ravens team without the run game Yeah, no, uh, uh, like I remember in 2013 when their run game was struggling I'm like, man, who are these Ravens? It was struggling struggling. It's like yuck. What is this? Uh, then they end up Bringing in gary kubiak the following year and that run game took off and we like that was the best the Ravens had ever had An offense that was the best Ravens offense ever back then 2014 And then fast forward five years. Wow. That was only five years later man That seemed like like from kubiak gary kubiak to greg roman That seemed like it was just so much longer. Don't it like to me at least it seemed like it was like at least Like a 10-year gap, but that was only five years Five years. Wow. That's crazy Anyway, um, so yeah, Byron left, which is another uh candidate For them to interview to possibly be the new offensive coordinator. So let's see now That those were outhouse guys Those were guys that are not part of the Ravens right now Uh, Jeremy Fowler, uh, who who both of these reports are from gotta give him his credit shout out to Jeremy Fowler But he also mentioned in-house candidates for the baltimore ravens too He talked about t martin and I know t martin That's somebody who a lot of us talked about really from jump from jump even before greg roman was Before he stepped down So to speak and again shout out to the ravens for when it comes to coaches For keeping it very very classy Because they again, they don't want your resume to look bad. They want your resume to look squeaky clean and look good and whatnot So instead of ravens big old ravens fired. We decided to let go this guy No, hey, he decided to step away. We mutually decided to part ways That's okay. We see always appreciate that uh, but anyway, um when Before greg roman even did that Uh, it was looking like t martin was they might have told t martin something like a long time ago I remember when we did the video talking about t martin get the getting the interview with the bills The offensive coordinators for that position Um, and then we were like, oh man, I don't know if he turned it down I don't know if uh, just they decided to go with what who ken dorsi, right? Oh, it's a ken dorsi I think it's ken dorsi Uh, whoever it was, but they decided to go in another direction Yeah, yeah, I think uh, I think it is ken dorsi because uh, shout out to my army hurricanes, by the way But that was um, because yeah, I'm getting him mixed up with kelin more because kelin more is a cowboy's offensive coordinator He used to be a quarterback in the league Uh in ken dorsi is bill's offensive coordinator. He used to be a quarterback in the league too Um, but anyway, and did y'all see that like the last play in the cowboys 49ers game I was watching that last night. I'm like, all right. I was like, this is it 10 seconds left. All right That press guy got to show that arm now And they did that i'm like what like you might as well.  I didn't anyway, um So, yeah, uh, so t martin, um, I was thinking like back then that t martin If he turned it down or if he just didn't get it, but it seemed like Maybe the ravens were Maybe that maybe they told him they they gave him the air to cast a talk like hey you next up You you next up We brought you in. Yeah, there's uh, the the the wire receiver coach Um pass game coordinator. I get it mixed up which one what t martin does and what keith william does I think t martin is the wire receiver coach, and I think keith williams a passing game coordinator No, no t martin is a passing game coordinator and keith martin is a wire receiver coach I gotta mix up my apologies y'all. It's still early in the morning for me But anyway, um, I feel like they could have told him like a t you next up You up next after after greg roman is going you up next But another candidate that jeremy fallow also mentioned He said in-house candidates t martin and james urban could get a look too So that's something that uh, we've talked about too with james urban um I just really wonder about how his and lamar's relationship is Uh for lamar, uh, james urban is a quarterbacks coach, but for lamar to still go out and get his own Cupid coach. I don't know. I don't know if that really means anything. I just I don't I wonder how their relationship is I don't so I don't know man um, but if it was an in-house hire Which the ravens they like to do um If it was an in-house hire, I would be a little more worried than I already am. Um Just based on philosophy because if you just promote somebody and promotions from within are great in companies It's an amazing thing Because it allows you to work your way up work your way up in the system and whatnot And that can a lot of times just show how hard you've been working And that you deserve it and whatnot But for the ravens, what would just worry me a bit um would be if they did do an in-house hire that that would um allow them to Stay true to their current philosophy that much more that would allow the the chance of them staying true to their current philosophy To be that much higher since the person would be already from within now Obviously if they bring in somebody from the outside, which I would prefer But if they bring in somebody from the outside Then their chances of keeping that same philosophy could still be very high because I mean eric the cost of john How about I'll tell them. Hey, we want to run the ball Uh play good defense. You ain't gotta worry about defense might be down on handle that But we want to run the ball. That's our first priority is running the ball. That's our identity. That's our philosophy That's what we want to do It passed game cool, but we want to focus on running the ball So they could tell an outside hire that same thing But I just feel like with an outside hire the chances of things changing or improving Are significantly higher than if they go with somebody from the inside But again, everything just boils down to what that outside or even inside person is allowed to do So we'll see man With james urban We know he uh, I think he was on the eagle staff before and he worked with uh with michael vic So he worked with a quarterback that could throw Throw that thing down the field and could really get it down the field But a quarterback that also could take off as well Um, and then with t martin He's been the wide receiver coach. I believe again, I'm forgetting it's too early in the morning But um, he was an offensive coordinator on the collegiate level I believe and and he played quarterback as well So for to me, I think that helped so much and I remember when t martin first got hired We talked about that. I feel like that could help so much because yeah, he's a wide receiver coach because he can And he talked about it too in his introductory press of how as a former quarterback He he allows like he's sort of a uh a middleman He's sort of a liaison between the quarterback and the wide receivers because he's experienced it He's been through it So with that he's experienced life as a quarterback So he can he knows what the quarterbacks are looking for He knows what the quarterbacks are seeing what they're reading and whatnot But then as a wide receiver coach you get to understand what they're seeing too You get to understand their assignments and how they can help that quarterback as well So it goes hand in hand So, yeah Anyway, good job Ravens. I hope it's a thorough search, but it is a search that um They got to get down to it man like Yeah, they they look they like really got to move man. They got to move because Whatever happens with Lamar Jackson Um, like time is ticking time is ticking For whatever the next step is going to be but in order for Lamar Jackson because we we don't know what's good. What's going on? Like I said in the previous video from yesterday. We don't know what's going on with him Um, and the Ravens between the Ravens, we don't know what the talks are what the deals are with the office We don't we don't know none of that stuff. Um, nobody really does except obviously those the parties involved um But this is like the first domino In whatever it's going to be Whoever the quarterback is going to be hopefully it will be Lamar but this The offensive coordinator is the first domino in this whole thing and then you still got some guys that um They haven't what we haven't even heard about them requesting interviews for I know there's been a lot of talk about uh, I think um the 49ers They're passing game coordinator or qb coach and then the eagles passing game coordinator I'm like man. Hey like yeah eagles passing game coordinator cool. Yeah, but I mean Don't just stop there ask about the offensive coordinator to ask for both Do the same thing with the 49ers to ask for both like hey Reach out there. I mean he asked for Eric B. Enemy and he's an offensive coordinator right now Like so hey ask for another offensive coordinator to like don't stop Don't stop, but anyway Ravens they they they seem to be off to a good start Uh, so we'll see how this thing goes. I love y'all team. Keep it clean. Like I said earlier I really appreciate y'all and we out


Every employee is asking the question, let me know when it gets to the part about me. Yes. And sometimes your employer is an executive or managers, they hear that and they go, well those entitled little shining stars in my life, right? Let me know when it gets to the part about me. If I hear that one more time, I'm gonna hurl. But I don't think it's so much about entitlement as it is about good business. I see this mentality of they look at them like a fireplace. It's like, give me heat, then I'll give you wood. Give me the results, give me the productivity. Do your job, then we'll talk about your lifestyle. Then we'll talk about your stresses at home. And I think if we flip that script and we keep making like you mentioned, you know, we stay true to the values, we create the deposits of trust, we create that track record where people go, you know, I like myself best because I'm here. We have to think as employers, how do people experience you? And how do they experience themselves when they're with you?


This is an introductory talk on the NPTEL web course on topology here and on topology under this topic we have included five chapters we aim to give that is plan to give two or three lectures for each chapter. Let us see the motivation to start with what we mean by topology then we will give basic concept in topology and then we will introduce other notions we are all familiar with what we mean by real line and the Euclidean plane. And also we know if we take a subset say A a non-empty subset of R then we know that what do we mean by the set A is an open set that is recall A is said to be A is said to be on open set in R open set if for each x in A if for each element x here it is each x in A. So there exist a positive real number say we say there exist R greater than 0 such that the open interval x minus R x plus R is completely contained in A that is this open interval is a subset of A. So we have x is in the set A then we should able to find at least one R here that R is the radius this is the open interval we say that the center is x and radius R and this open interval is contained in A and if this happens for each x though we do not write R depends on x. So for each x the R may vary then such a case we say that A is on open subset of R for example if we take the open interval any open interval say A, B they are real numbers we will have A is strictly less than B now take any x in this is our set A here we take A is the open interval open interval A, B and we have taken take x in x belongs to the set A then sum x see the length of the interval open A to x and open x to B then find the minimum suppose this length is that is x minus A say R1 and B minus x say R2 both are greater than 0 because x is not equal to A x not equal to B. So this is greater than 0 now take R half of minimum of R1, R2 so if we take the half of this center is x radius is anything less than R. So then the open interval center at x radius R x minus R this is x plus R this open interval is completely contained in the set A then open interval x minus R x plus R is completely contained in A this is true for every x in the set A in our case our set A is open interval A, B suppose if x is even closer to B still we have this is our x still x B minus x is positive then half of the distance if this is our radius then this open interval will be so contained in open A, B. So I mean what we want is this R depends upon x so hence by our definitions the open interval A, B is an open set. So then it is easy to see that see for example open interval 1 comma A2 then say open interval 3 comma 4 then you take any x in either now take A equal to open interval 1 comma 2 union open interval 3 comma 4. If we take an x in A either x is in the in x is in open interval 1 comma 2 in this case they are disjoint so R x is in open interval 3 comma 4 so in any case we can find an R so is that this is our distance between x and this point is our R then the open interval x minus R this is x plus R is contained in open interval 1 comma 2 which is subset of A similarly if we take any x here we can find a suitable R sender at x and this interval will be completely contained in open interval 3 comma 4 which in terms subset of A. So this in set A is an open set so it is easy to see we will just give the statement so if we have a collection let us say capital A suffix alpha j is we say it is an index set meaning is alpha belongs to j, j is just any set so to start with we will assume that j is a non-empty set that means what for each alpha belongs to j we associate a set we have for each alpha we have a subset A suffix alpha of capital R further suppose each such alpha is an open set further suppose suppose each A alpha is open in R then the union then union of this set that is then union A suffix alpha belongs to j is also an open set in R just right the open in R again take x belongs to union A alpha alpha belongs to j then x will be in at least one A alpha that A alpha is open hence there exist an R greater than 0 such that the open interval x minus R x minus R x plus R will be a subset of that particular A alpha say that particular alpha say alpha naught then because A alpha naught is open then this is a subset of the union A alpha belongs to j so hence for each x in union that means x will be in at least one A alpha naught that A alpha naught is an open set that implies there exist on R greater than 0 such that open interval x minus R x plus R is contained in the union A alpha belongs to j hence this union is an open set. So we say that in such case A alpha is a collection of open sets then the arbitrary union because why we say arbitrary union mean A alpha is any arbitrary collection of open sets then the union is also open set this is true even when j is empty set when j is empty the union A alpha belongs to empty is the empty set and will see that empty set is also a open set under our definition what we mean by a set is open mean in R if it is a conditional statement A is open mean that is what if you assume that A non-empty then x belongs to A implies there exist R such that open interval x minus R comma x plus R is contained in A. So this statement is conditional so this when there is x the first statement is not true x is here first statement is x is in A that implies there exist some R such that x minus R x plus R is contained in A here when this statement is not true that is what imply P implies Q when the first statement is false whatever may be this second statement whether it is true or false this I mean P implies Q is true mean later we will see how this empty set so or we say that empty set sometime I say that take it as a we want that empty set should be open so that is same thing as telling that arbitrary union of open set is open including when the index set is empty similarly we can see that the intersection A alpha belongs to J when J is empty this will be the whole space. So the motivation is for example if you have A1, A2, A3 say in this case here countable collection countable means for each natural number we have a set A n then we take A1 first case union A2 A1 union A2 union A3 and so on here A1 the index set here it is 1 singled and 1 here index set is 1, 2 here index set is 1, 2, 3 and so on. So when the index set is smaller then the union here say call it J1, J2, J3 then J1 subset of J2 will imply A1 here subset of A1 union A2 this what we write union of A alpha alpha belongs to J2. So when the index it is smaller that is what empty set is subset of every index set so I mean that is the motivation to have the union is union A alpha alpha belongs to empty set is empty and when the intersection is the reverse A1 if we take the intersection A1, A1 intersection A2, A1 intersection A2 intersection A3 now the index set smaller here J1 then this is larger so similarly this when the hence when the index set is empty say it is like we have a collection of sets if you bring all together you will get a larger set if you do not bring together you would not get anything empty or we have the whole thing if you do not make it into pieces the whole space will remind you are not cutting into pieces. So that is the motivation to have this arbitrary union is empty when the index set is empty and the intersection A alpha alpha is empty equal to the whole space this idea is very important when we now define the topology. So in R we have seen that including empty set it is easy to see that the whole R is open reveal arbitrary union of open set is open also it is easy to see that A1, A2 open in R implies A1 intersection A2 is also open in R. So what we have is empty set is open in R the whole R is open in R arbitrary, arbitrary union of open sets in R is also open in R and the third is see here when we say arbitrary including the I mean index set empty but that we do not bother because of empty set in R we have already included and second is intersection finite intersection of open set is open for that enough to include A1, A2 or open sets in R implies A1 intersection A2 is also open in R this gives that J finite A alpha open for each alpha belongs to J that will imply intersection A alpha, alpha belongs to J is also open when alpha is empty sorry alpha belongs to J, J the index set is empty then the intersection will be the whole R which is already open so only we have to see when J is finite and non-empty so then use index N so if it is any finite set mean it is of that type A1, A2, An. So now A1 open assume that the result is true for N-1 so then we have A1 intersection A2 intersection An-1 is open An is open then we have proved that A1 intersection A2 is open this is exercise we can easily prove that A1, A2 are open in R implies A1 intersection A2 is open hence using that we can prove the intersection A1 intersection A2 up to intersection An is open that is now we call that as a collection tau the collection of all subsets of all subsets of R collection of all open subsets of R if we call that tau the collection of all open subsets in R then that collection is closed under arbitrary union and finite intersection this is the basic properties of R this can be I mean it is well known that if we introduce a notion called metric then the same concept we can extend to a metric space that will discuss when we introduce the other concept namely what is a basis so now let us introduce what is known as a topology so what is the idea in introducing the topology is first to start with R is study the concept of say open set then using open set we have the convergence what we call compact every if you can cover a set by a collection of open set from that we can extract finitely many members that will be sufficient the smaller collection will also cover that set A then that is called compact similarly we introduce what is called not connected mean there is a subset A such that A is non-empty not equal to the whole space so that A and A complement both are open such concept in a general metric space we call it connected all this notions depends only on open sets so instead of having a particular type of space like r power n later we will see even function spaces like c of 0 1 here we have a distance function notion see all this thing will come as a particular case of the space which we are going to define known as topology so what we mean by a topology is we will have this open set if A is a non-empty open set if we take x in A then we say that this A is a neighbor root of the point x so essentially what we have is we have a collection of neighbor roots that neighbor root has some these properties namely closed under arbitrary union and finite intersection see there are excellent books are available for this for topology so that is what this course is not a replacement of that available textbook that is not our aim under this NPTEL web course we have included notes meant for a one semester course say either for 40 hours or maximum 50 hours so this notes will be sufficient for one semester course then once you understand the basic concept that is why for each chapter first if a student wants to learn the subject with understanding the basic concept first listen for it to be for reading each chapter just listen this course one this whatever lectures given for that particular chapter then if you start if that student starts reading then you will have a maturity to understand the concept that is the aim of giving these lectures to three lectures for each chapter so the reference books are topology by mongers general topology by Kelly this is an excellent mongers is a students friendly I mean it is concepts are explained for in a students friendly way easy to understand whereas general topology by Kelly is a classical book it require maturity to understand other book are all equally they are all very good introduction to topology by K. D. Josie general topology by Willard topology by Duhunji so there are many other excellent books are available at least you have mentioned here some of the books now we will see what is the concept called topology we are going to replace the set are by on arbitrary set in fact x is any set in fact we do not even assume that it is non empty so x is any set any set so here then we know what is called power set of x the collection the collection of the collection of all subsets subsets of capital X all subsets that mean including empty set so now then from this collection we will have a sub collection that sub collection will have the properties namely that sub collection is closed under arbitrary union and finite intersection then that sub collection is called a topology on x so we have the power set p of x a sub collection tau so that notation is we read as tau take tau a sub collection I mean it is just a set it tau a subset of power set of x because here each element in tau mean it belongs to power set of x which is a subset of x hence we call tau a collection of subsets of x then this collection this collection tau this collection tau is said to be a topology on capital X if it satisfies if this collection satisfy if it satisfies the following we will just write it if it satisfies the following properties namely first that collection should contain the null set or we say empty set and the whole set x that mean this should belongs to tau this is the minimum requirement any tau empty set and the whole space x belongs to tau second it is closed under arbitrary union meaning is you take take j non-empty index set I mean meaning is j is just any set which is non-empty for each for each alpha belongs to j a alpha belongs to tau it is given that for each alpha belongs to j a alpha is a subset of x and that subset belongs to tau if it is so then this would imply closed under union union a alpha should also again this will be a subset this again belongs to tau and third if a1 this is symbol third a1 a2 belongs to tau implies a1 intersection a2 also belongs to tau if our tau a subset of power set of x has these three properties namely empty set x belongs to tau a alpha belongs to tau for each alpha implies union is in tau and a1 a2 is in tau implies a1 intersection a2 is in tau then this collection tau is called a topology on x so on why we call it a topology mean on the same x we can define more than one topology so now we will see some symbol example unlike in other metric spaces or other vector space and other notions here it is just we are starting with any set so it is easy to give construct example see to start with x is take on any set we can always construct x is any set okay just for we will avoid reveal tau contain only empty set so we avoid that we will assume that x is non-empty then now we example first call it say tau1 so we call it tau1 or say tau suffix t for reveal okay just we will write it here tau1 what is our minimum condition is empty set and x should be there so we cannot avoid that so empty set and x can we stop only this a smaller collection now whether as first condition is satisfied second says if a alpha belongs to tau where alpha is some a collection otherwise what this says that we have a sub collection of tau so but sub collection of here the tau is tau1 this has only two sets then sub collection will contain either empty set or singleton x or empty set and x whatever may be the union will be either empty or x it is to be it is close under arbitrary union again intersection same see what are the possible sets that is what empty set and x sing one set otherwise empty set and x so whatever may be the this only one set intersection this here intersection x with x empty set and empty set intersection x so this is reveal this is a topology this I will write in short topology on x the other extreme collect a this tau so either we call it tau suffix d for discrete or we say in this case just here tau suffix to the whole the other extreme which we call that is power set of x it contains the collection of all subsets then every empty set see what is empty set is also a subset empty set belongs to a subset it is in power set of x that is our tau2 and x is in subset of x it is in tau2 and if you take the union a alpha where each alpha belongs to tau2 mean it is a subset then union is also a subset so that will also belongs to tau2 similarly a1 is in tau2 a2 is in tau2 imply a1 intersection a2 is in tau2 seconds this is also a topology this is called known as discrete topology discrete topology we will call each a if it is belongs to tau tau is our topology then that a is called every member of tau is called open set that is our definition of open set so here every subset is an open set whereas here the only even x may be the set of real numbers but that case here empty set and x are the only open set here r is every set is a open set now we will see this is trivial example again take see if you want you can give any symbol example you can start with any set x say some finite set 1 2 3 take say call it tau3 we need empty set we need capital X say singleton 1 see that itself we see this set tau3 contain empty set x and singleton 1 it is closed under arbitrary union if you take any union either capital X or singleton 1 so both and intersection either it is empty or x or this is also a mean topology on x so it we can give any number of example say if we suppose empty set and the x 1 say 1, 2 now suppose we stop this whether whether is tau4 a topology on x so the obviously it is not closed under arbitrary union because if we take a1 singleton 1 belongs to our collection tau4 a2 singleton 2 belongs to tau4 but the union is not in tau4 so that mean it is not closed under arbitrary union for here what is our index set is j equal to 1, 2 then that is not closed mean it is not a topology topology on x so now again we will go back to any arbitrary x in this case we will assume that our x is a infinite set we will see why x any infinite set infinite that mean not a finite set infinite set and here we call it tau f f4 I mean finite this we see that this is called known as co finite topology go mean compliment should be finite here when you say that a subset a subset of x that mean a is in tau when we say is if and only if this I am writing for compliment of a is x difference a this is finite so note that already x is an infinite set so we want that first empty set belongs to here so when empty set suppose empty set if we take a equal to empty when suppose if we stop only here then compliment of empty set is the whole space which is infinite then empty set will not be here so it will not be a topology so the so but we need so to take care of that if a compliment is finite or the compliment is the whole space not finite mean a compliment should be the whole space then empty set now will come inside now we can see that this is here then this tau suffix here is a topology on x known as co finite known as co finite or finite compliment or finite compliment topology on x this will be we will come across many time for giving nice examples so now we will not see all the things see suppose I will give the quickly the how to prove that empty send x is empty set x belongs to tau f second suppose suppose a alpha belongs to some index at j we can assume that non-empty is a collection of a collection of members of tau f then what we have to prove is to prove or climb union a alpha belongs to j belongs to tau f but what is when some a will be here mean take the compliment two cases compliment either enough to prove it is finite if not finite it should be the whole space so take the our a here is take a equal to union of a alpha belongs to j then use the de Morgan law a compliment equal to compliment of this then by de Morgan law it is intersection a alpha compliment alpha belongs to j so now what is the if what can happen is we know already each a alpha compliment is either finite or the whole space suppose the worst thing can happen is a alpha compliment the whole space x for each alpha belongs to j then reveal each a alpha compliment is x then what will happen to a compliment the whole space so we are through otherwise a compliment for at least otherwise for at least one alpha not belongs to j a alpha not compliment is not equal to x that mean it should be a finite set this is finite then in this case then intersection will be a subset of that particular a alpha not compliment this is finite subset of a finite set is finite hence a alpha compliment is finite that implies our union is also in tau and intersection is almost reveal a one compliment finite e two compliment finite or the whole space then intersection of finite set is finite both are the whole space means the intersection is finite so similarly a one a two belongs to tau f imply a one intersection a two belongs to tau f hence tau f is a topology on x this topology is called co-finite topology in the next class we will see how to from your smaller collection which we call it basis from that how to construct a topology and other related concept thank you.


Tom here from Warren systems and true NAS core release candidate one I would say is ready for deployment now This is long as you're an enthusiast like I am and well I've been doing it since beta but maybe if you're not quite the beta enthusiast but a release candidate enthusiast It's a pretty solid product. We've been using it for a while and not had any problems Of course the release can is only a couple days old So I say a while I loaded it today it came out But we were testing the betas and I can't really say I suffered through them They were actually very stable their whole release has been great Then true NAS core is representation of the merger of free NAS and true NAS I've talked about this before they're moving to a single code base, but don't worry. It's still free It's still open source to bite despite what someone's gonna really argue with me about in the comments trying to explain How it doesn't feel open source or something else the source code is available. It has a license. It's open source That person in the comments. Hi, so we're gonna dive into it We're gonna talk about a couple of new things out there and talk about what's working now That wasn't working before there's at least a couple things on a dimension if you can click the like button and first If you'd like to learn more about me or my company head over to Lawrence systems calm If you'd like to hire short project, there's a hires button right at the top If you'd like to help keep this channel sponsor-free and thank you to everyone who already has there is a join button here for YouTube and a patreon page your support is greatly appreciated if you're looking for deals or discounts on products and services We offer on this channel check out the affiliate links down below They're in the description of all of our videos including a link to our shirt store We have a wide variety of shirts that we sell and new designs come out. Well randomly So check back frequently and finally our forums forums. Lawrence systems comm is where you can have a more in-depth discussion about this video And other tech topics you've seen on this channel now back to our content So here's the official blog post from IX systems to NAS core RC one originally yesterday And it's true NAS cores ready for deployment it's the merger of free NAS and true NAS the unified storage system now begins for mainstream use And I feel really comfortable especially with home users and whatnot if you're enthusiast Really running the release candidate. I don't think it's a big deal for our production environment. Yeah, we're gonna wait for our clients I should say to Get all the way to the full version before we decide to deploy it We're not having any problems with the other one But hey, we're talking about clients you want to keep them happy and unless you have a need for some of the cutting-edge performance features Which I are pretty outstanding. I'll leave a link to this here It's better to go slow, you know, I will admit that but overall my testing since the beta has gone really well And one of the things they've introduced here that I really like that you may or may not know But Z standard compression is really fast and a great add-on And it also comes from Facebook That's the part that not everybody's aware of is actually as much as you may dislike Facebook And I'll probably agree with you I will also tell you that they actually at the core of their business when they're not sucking up all your data They do some open-source contributions back and one of them that they gave back is their Z standard compression when you have a company the scale of Facebook you have Interesting problems to solve and compression being one of them to store all that data They slurp up about us, but they open-source a lot of the things and give back So that's actually kind of a cool thing that that's in there if you're not familiar with Z standard You can check it out. It's pretty cool enclosure management for the minis I have a free NAS mini X plus provided by IX systems review sitting next to me and the enclosures are now working and We'll talk about that. So if we go here and go to the system enclosures And we can see that they're all online and we're gonna go here and just Let's take this drive out and go over to the enclosures now the page doesn't auto refresh You have to refresh the page. So we're gonna go ahead and refresh it here And we do see one of the drives is empty now I don't have this thing set up to set an alerts directly to me Right now it's just tells us in demo mode, but this was not working when I did the review So for those of you wondering if that's working now now that's a release candidate This is one of the bugs that was Fixed and I guess it did work for some people didn't work for everyone I had a conversation with the engineers exact contacting about that and so that problem has definitively been solved and just pop the drive back in I can refresh the page again Well, now it's give me alert that the drive was for degraded. Yeah. Yeah. Yeah, we know it's degraded and now It's going to rebuild Refresh the page again. Matter of fact, it's it'll probably be out of degraded state already So as we go over to the pools because the drive wasn't there's not much data being written to it right now Yep back online. It'll correct any errors from the random missing drive that Tom pulled out So going further down true man true command cloud connections I have not dove into the true command But this is another enhanced service that they're offering and it's going to be a software as a service that they are Selling to give you large-scale management of many NASA's at many locations I like this feature it's going to have wire guard VPN integrated into it. So it's pretty cool that they've got this whole system so if you're especially like an IT company like us and you're monitoring servers for other companies you look For a central way to do it. This is a way to do it we even work with and have done some consulting and Talk to companies they have data centers and in the plural like they got different locations So this is a welcome to where they're storing massive amounts on these stacks and being able to have true command Look at all of them. They're really looking at its interesting product. So that's definitely Something I will be diving into soon, but no, I don't have a video on that yet Now the nightly beta beta 2 release and update stages are free nas have gone through There's a true nas subform in the community forums for the unification process and community feedback This is something I really like about access. I'm they really have Done a great job of listening to their audience and listening to people on building all of this And this is something that they've been able to do even better since The merger of the two code bases So with true nas and free nas becoming one because they used to have two products that share pretty much all the same source code and All the same documentation that means they always had to push Documentation over to two sides and push source code to two different sides to compile two different platforms now That they're doing it all in one It's just a lot easier which also seems to enhance their ability to engage the community because now they have a dev team working on a Single thing you don't have you know the team kind of jumping back and forth Maintaining two things going I know copy the code over here paste it over here copy this over here Well, there's a slight difference when we implemented it here So copy it but modify these things you can see that can be some TDM now that it's one It's getting you know one solid cobase is much easier to do So I am looking forward to probably switching everything that we have here to the RC one for any further testing So I make sure I very promote it. I will be RC one is feature stable enough I should say that I will be doing some updated getting started videos and it's kind of fun They produce a new opportunity for me because now I have to say true nas a whole lot of times in a video and talk about Getting started with true nas now we've tested this on not just this free nas mini X here Which of course by X systems you're expecting it to run, right? I also have my super micro system It's an older one. I don't remember the model off top my head, but it's just a Older Xeon e5 2620 with a couple LSI cards in there and this has been going through the betas This is now going through the release candidate now or as you can see right here and Platform generic is just a generic super micro board and this has survived all the updates by the way This started as a free nas so it has seen all the updates and iterations in between and brought the pool along for the ride So I didn't dump all the data and rebuild this and the replication tasks I'll mention for those of you that may have mixed environments like I do where you have more than one of them You go over here and let's look at the replication tasks You can see that they're working. Where are they going to this machine over here? So This is the machine they're going to running free nas by the way, and this isn't even older machine But still has plenty of storage in it. It's still a few terabytes of storage so it's good enough for backing up the stuff that we have here at the office and Same answer you go here to tasks look at replication tasks and It's crossed over so I have some replication pushing one way from this to that So now I have free nas here playing with my true nas system and replicating data back and forth between them And that has gone really well. That's actually a nice thing is even though this is running an older version It's still cross compatible. So if you have a couple devices that you're backing up to For cross you know this which is a great strategy by the way take one free nas replicated to another Free nas or true nas you can test the beta without breaking that in case anyone's wondering But I'm gonna probably go ahead and update even that free nas there up to the release candidate and go from there So my overall impressions. I've been really happy with it. It's been solid. It's been reliable But you know free nas is always been that way true nas is just an extension of that And I like the play on words it'll leave you with that I seen in the forum post there It is still the best free nas system that they have out there. So it is still hundred percent free That's not changing. It's still open source to fight what someone will say in the comments and thanks And thank you for making it to the end of the video If you liked this video, please give it a thumbs up If you'd like to see more content from the channel hit the subscribe button and hit the bell icon If you like YouTube to notify you when new videos come out If you'd like to hire us head over to Lawrence systems calm fill out our contact page And let us know what we can help you with and what projects you'd like us to work together on If you want to carry on the discussion head over to forums not Lawrence systems calm Or we can carry on the discussion about this video other videos or other tech topics in general even suggestions for new videos They're accepted right there on our forums, which are free Also, if you like to help the channel in other ways head over to our affiliate page We have a lot of great tech offers for you and once again Thanks for watching and see you next time


An F-18 fighter jet crashed on May 20 during flight demonstration training at an Air Force base in Zaragoza, Spain. The pilot from Spain's 15th wing managed to eject seconds before the aircraft crashed inside the military base's premises. The soldier, who has not been named, was taken to a local hospital where he is recovering from injuries sustained in the accident, the country's Air Force said on their social media platforms. The crash did not cause any collateral damage. Investigations are underway to identify the cause of the accident.


Now, the Lagos State Police Command has called for cooperation and support from members of the public in the fight against crime. Commissioner of Police Abildo Alabi Mithas Appeal at the Quarterly State Holders Forum on Police Accountability, an award organised by the Rule of Law and Accountability Advocacy Centre, RULAC. Justine Akadoyi tells us more. Over the years, Jihaz has been a disconnect and mistrust between the police and members of the public stemming from lack of accountability to harassment among others. However, the Lagos Police Boss Abildo Alabi is here to speak on community engagement upon this year for effective police performance. He encourages information sharing from the public as it would build trust and confidence. There's a need for police partnership with members of the community for proper police and effective policing. It says that crime prevention cannot be holistic. Without input from members of the community, there's no way we can actually prevent crime without having input, without working in synergy with members of the community, as critical stakeholders. The CEP identifies fear and reluctance on the part of the public as challenges. It is quick to advise residents to reach out to senior officers in their localities, assuring that their anonymity would be protected. As this cuts most towards effective policing, RULAC welcomes disciplinary measures taken against airing offices but underscores the need to address the root causes of police misconduct and reward for outstanding and exemplary performance. I congratulate you all who are receiving this award. And please, when you get back to your workplace, whatever you have done to deserve this award, please use it in a multiplier effect to touch your colleagues. Poor pay and grossly inadequate working and living conditions are identified as causal factors for corruption and violence in the Nigeria police force, while government is tasked to ensure better funding, outstanding officers are rewarded for exemplary performances. Justin Akadone, Plus TV News Lagos. Please do subscribe to our YouTube channel and don't forget to hit the notification button so you get notified about fresh news updates.


Welcome to the session. We're going to talk about obligatory programming. The title is Sounds Worse Than I Actually Meet It.  I'm Mark Sonobom. I'm a performance engineer at Acquiat. You might wonder why a performance engineer is so interested in this type of stuff and it comes back to the idea that you can't. It's really difficult to make something more performant that no one understands. And so the understandability and the simplicity of a system is very important when you're actually trying to make it perform. And I just like things that make sense. So, just a quick overview of where we are. Like Drupal 7, we had some classes. The APIs were pretty much procedural. We all know it was not very unitestable. And we all know it was pretty tightly coupled. And it's also very complex. I think everybody could agree on that. There's been better things written about the complexity of Drupal. In Drupal 8, we adopted some symphony components. We have many more classes. We're actually still not unitestable. We're still tightly coupled. And we're actually somehow more complex. And this type of stuff sort of scares me because we have existing contributors who shouldn't be as scared of D8 as they appear to be. So in general, when people talk about object-oriented programming, it talks as a tool to manage complexity. But we somehow took that and made it more complex. And that's what we're talking about here. Though I really like this quote from Martin Fowler. The key to controlling complexity is a good domain model. That's not really a word we say that often here. And every time I say model, somebody says this. But just because you may not have the M in the C doesn't mean you don't have the M. Everyone has the M. If you're doing anything with objects, you need a domain model. A domain model, it isn't a literal thing. There are lots of criticisms of object-oriented programming because it doesn't always map to real-world things. An object doesn't have to map to a real-world thing. It has to map to some abstraction that makes sense in your domain. We have nouns that we use for these things all the time. Those are essentially what our domain objects end up being. So they're usually nouns. I won't go too much into ubiquitous language, but if you read the book Domain Driven Design, I highly recommend it. He goes into it much more. But the basic idea is the words we use when we're speaking to each other and the words we use when we're in code should be... There's an overlap there, and that's our ubiquitous language. When we talk about blocks, blocks are a very clear domain model. Yet when we're in our C, we talk about block entities and block plugins, and no one can understand each other. That's why that's part of it's sort of important. Here's the most obvious, triple models. We usually think of these as entities. We just got in a patch to where all the main Drupal entities have interfaces now, which is great, but that's roles interface. This suggests to me that a role has no business logic, but I don't think that's exactly true. If you start looking around, you start seeing things like this. I would say that changing permissions is well within the domain of a role. That's something that maybe it should be responsible for. That's a really simple refactoring. You just stick that on the role object. There's that one method, but then I'm implying two more with grant permissions and revoke, that however it needs to do that job doesn't really matter. Those methods should just exist on that object. Comments look similar. Here's just a shortened list of its properties.  The names are really ambiguous. What is mail on a comment? That doesn't really make a lot of sense, but the comments tell you what it is. In most cases, if you look through Drupal code and see a comment, think about if that could be a better method name or something that describes that thing better. Don't be afraid of using multiple words. Long variable names and long method names are totally fine. If they say exactly what they do. That's always better than a comment. The first thing I would do to refact this is I would add descriptive accessor methods. It would end up looking something like that. But now there's another code smell. Whenever you're working with one object, if another noun starts appearing in a bunch of methods, that's a good indication that you probably need another object. People who understand the entity API are probably freaking out now because they're like, you can't do this. That may be true, although I don't know if I actually believe that, because still these are the internal properties to comment, and comment can instantiate its values however it wants to. I don't see a reason why we couldn't say, make a comment author object. This isn't exactly a user. This isn't our normal user object. This is a comment author. It may inherit from user and may not. It doesn't seem like it has the same responsibilities, right? But just having something that says a comment author is a thing that we have and the thing we refer to in this domain tells you a lot about what's going on. So here's another instance of hidden business logic and procedural functions. This function prepares the author property we were talking about before. There's not really a reason that needs to exist outside. But it also suggests something else. So if you look at that actually, it's saying entity create with a UID of zero. We all know that UID zero means anonymous. But that's really just an implementation detail. There's no reason we need to just code that all over the place with that assumption and have all of our code know that zero means anonymous. I don't see why we wouldn't just have an anonymous comment author. It can inherit from comment and just hard code its UID to zero. And then that code I think reads much better. So this is from the actions module. This one is pretty rough. And this should stay there, right? So it's the actions module. It's this action that's not going to go anywhere. But it knows how to find the subject within the comment, which would be one thing if it was just subject, but it's actually subject value, which is a little strange. It also knows how to get to status and knows the constant to compare it to. Now you could say there's an argument that like that's sort of okay because these are within the same package of comment module. And I would believe you. But there's really no reason it needs to do that. So when you look at the code around an object, you should always remember it doesn't have to know how this object is going to do something. It just needs to say what it wants. It just needs to tell it to do something. So this is what this code I think should look like.  It doesn't matter where that comes from.  And then it's up to comment module or comment class to do that. And so here's another instance of like knowing those constants. And in this case, it's actually looking if it's published or not. And when I see that code, I say, okay, there's a business case for having an isPublishMethod. And then we just add that. And you probably recognize that publishing is actually not unique to comments at all. And when we see things like that, those are basically roles that those objects are playing. And I would say that's like a publishable roles. And when you see those, we need to extract those out into interfaces. So we could have a publishable interface with those three methods. And then comment and node can just implement those. And then the methods that actually handle publishing, they could potentially just type in publishable if that's all they do. And then that tells you a lot about that code. That code says, I need an object that I can call these three methods on. It's a very clear contract. I get told this once in a while. And so for those who haven't heard, the single responsibility principle is about not ever making a class with more than one responsibility. The problem with that is it's a really difficult thing to reason about. I really like this quote from Eric Evans again, domain-driven design. Basically suggest there's complexity in doing that. And the more you do that, the more you get away from the actual fundamental concept of object-oriented programming, which is you have, you couple the data to the behavior that acts on that data. I'm not saying that single responsibility principle is wrong. It is absolutely not wrong. But don't go nuts with it. You can really take it too far. And like reasoning about what a responsibility is is actually much more difficult than you'd think. The more you think about it trying to narrow down what a class is doing, the more I think it's sort of a subjective thing sometimes. I think it's easier to think about it in terms of a reason a class would change. If you have two methods that sort of look like they're maybe doing something that doesn't belong in the same class, but they would always change together, I don't think that's a big of a deal. But if a change somewhere else would cause one of those methods to change, maybe that's a sign that it should get moved out into its own class. So there's a balance I think between single responsibility principle and a rich domain model. And we just need to find that. And one indicator we don't use enough is pain. The way I like to code is I like to start with the simplest possible thing. I don't worry about what rules I'm breaking. I just do it how it makes sense to me. And then the first time I encounter pain, every factor. And we sort of default to pain. We cause ourselves pain because we over abstract, and we may never actually use that abstraction. And then we end up with more complicated code that's painful to use all the time. So sometimes, and I understand we can't always wait because we're getting something into a product that's going to ship, but we have pretty long release cycles. So it's not really that bad to get something in that's less abstract, let three years go by, see if something else needs it, and then if something else needs it, you extract it then. So there's a bunch more cases of hidden business logic in procedural functions. It's a really, really easy thing to fix. You just have to go find it and then stick it on the appropriate class. If it makes sense that you need a new class, just make a new class. Not every class in Drupal needs to be what's called a framework object, right? It doesn't need to be a config entity or an entity. We can just have classes that don't inherit from anything, that just play a single role, and that's totally fine. So just really quickly, I want to talk about types of domain objects. I think this comes from the domain-driven design book. I think it's pretty helpful way to think about things. So entities, in the sense of outside of Drupal, defined as having an identity. So generally anything with a UUID is an entity. They're treated as mutable, and they have state. They're usually nouns. Drupal entities and config entities are a good example of actual entities. And this is the important thing. This is how you spot it. All of the attributes can change on an entity, but it's identity remains. It's still that entity. On the other side, you have value objects. They have no identity. They're immutability. I know that's not something we really deal with that much, but you can still treat an object as immutable. It has state, usually nouns. The fields, I think, are a good example of value objects. And the important thing about them is the only way you can identify is by its attributes. If you change its attributes, it's a different object. And ideally you shouldn't change its attributes. You should just instantiate a new object with those attributes. So you have those two things, then you have services. Services should be stateless. They're usually verb-ish. I ask that you try to make entities and value objects before you make services. I thought we were actually a lot worse about this than we were. The more I look through the services we have, most of them are actual services. And I think that's because most of our business logic is actually still in procedural code. But as we move that stuff over, it would be very easy. I mean, we talk about services all the time. We love services. It would be very easy to start taking functions and say, like, okay, or the comment prepare author. And somebody makes the comment prepare author service. That doesn't make a lot of sense. That's actually just putting behavior into a service that should be on the object that it actually acts on. And I like these quotes about it. You should just use them sparingly. Don't let them take over behavior from the objects that should have them. And the second one really hits home because you realize the more you do that, you're slipping towards procedural programming.  And if you don't read this, the Martin Fowler article, the anemic domain model, I highly recommend it. I think that describes essentially where we are right now. And basically, when you don't do this, you're robbing yourself of the benefits of object-oriented programming, which I think is one of the reasons that things are so complex right now and no one can understand this new code and there's people rejecting the idea of object-oriented programming. It's because when you leave out the domain model, you don't get the benefits of it. And so then you just have a more complex version of what we had before. The naming. Anybody who knows me knows I like to talk about naming. It's really, really important. Everyone likes to talk about cash validation and naming and how it's so hard. Naming is not hard. Naming classes and methods with poorly defined roles and responsibilities is hard. So if you find yourself having a hard time naming a class, think about what that class is doing. It might be doing too much. Or what it's doing may not make sense. If you distill down and basically you describe, okay, look at the comment on top of a class.  But the class itself doesn't suggest that in any way. So here's one example I found in Core. I apologize to Kat Bailey for this. But I think a lot of this is actually just like legacy, like coming from the original procedural design that this was just like the first iteration. This is actually totally fine. Like we take the procedural code, we move it into classes. We do it however it works. But we don't stop there. We have to then refactor and figure out how it makes more sense. So let's take a quick look at these method names. There's some strange stuff going on. The first thing that I notice is that those three terms are used to describe the same thing, right? Paths that are not aliases we don't have a good name for. What's the difference between get path alias and look up path alias? I don't know. If you look at this, you see the only thing this function is doing is it's getting the default language and then it just delegates to look up path source. I would refactor that to take out that language behavior into its own method. All of a sudden that's only one line. And then just copy the rest of that function into this original one. And then you don't have these two methods that basically say they do the same thing, right? But that didn't tell the story because there's something else happening. So it is better but the vocabulary is still a little inconsistent. This is the way I would name them. I like using find because I think that's actually what's happening here. And I think path is actually totally fine. If you just say path, that means path. If we say alias, that's a path alias. We could argue about path that's totally fine as long as we settle on one, right? And so I think it makes sense to say find path by alias or find alias by path. Because that's all those methods are doing. We still have some of these other methods here. Get path lookups and preload path lookups. They're actually only called by this decorator. And so I would say if they're only called by that one decorator, they should actually just go into those and just refactor them out into that class. But we saw this cache clear method which is a little odd because if there's a cache decorator, why does any cache anything happen in this class? I would say that probably shouldn't happen and we should refactor that into that cache decorator. And then those are gone. Then there's path alias whitelist rebuild. That's also only called by cache clear. And if we remove that, we can remove this. Now there's also this class. This is essentially what it looks like with the code taken out. So the path class manages crud for path aliases. There's a responsibility overlap with alias manager because it's the thing managing aliases. Even though a manager actually means nothing and it's more of a repository. I would say just stick this stuff in alias manager. If one class says I can find this by a given criteria, why shouldn't that class... That class already has a database connection. It already knows about these objects, knows how to find them. Why shouldn't it also just save them and load them? I also changed these method names because before they were load and delete and then they took conditions. So I think that's probably better reflected in the method signature. And so I named it findware and deleteware. I don't remember where I got that. It may have been from backbone model. But if you look at backbone model or active record or... What's the PHP one? Doctrine, they have all kinds of these find by attributes, findware type classes and it's always good inspiration for these things because that's what the rest of the world uses. So another problem we have is emphasizing systems over the domain. What I mean by that is this. So if you were to find our user model, it's buried in here under plugin core entity user. So if I want to understand the user model, I also have to understand entities and plugin. This is actually what it could be now because Tim Plunkett is awesome and we got in this custom entity type annotation so that now the annotation on them is no longer plugin, which enables this so we can just have entity type. That makes a whole lot more sense. If it was possible, I'd actually just prefer to get rid of that and just have user and somebody saying, oh, but how do you find the things? I'd prefer that we always do the best design. And without regard to performance or anything else, do what makes the most sense. Let's decide that's the way we should do it. There are tons of smart people in this community that will solve the technical problems with it. So we shouldn't design with how it's going to work or how it's going to perform in mind all the time. There are cases where that's an exception. But in this one, I don't think there is because we came up with this idea of finding plugins based on namespaces and then getting that from the container, which if you've ever looked at the container and how it does that is really crazy.  And so we're already on the right track to fixing this, but there's just one example. We like to talk about everything in terms of plugins and entities and we talk about the system it uses before we talk about it. It's really sort of an ancillary thing. It doesn't matter that block uses entities or plugins. It just matters that block is block. So here's a slightly less bad example, but I'm still not crazy about it. So custom block controller calls entity manager. Custom block controller knows about custom blocks. Why should it know anything about entity? I think it could just be that. And this is sort of more like the active record approach, which I'm sure somebody will argue out of, which is fine. If you need to be fancy, you can have it injected and just have a custom block repository. And that could inherit from the entity manager, which I think is more of an entity repository. It could share all of that functionality, but I think it is important to just subclass that and have that object live in its own domain. The more your classes talk to itself, well first the best thing is talking to yourself, calling methods on self. The next thing is calling methods on objects that you own. Custom block controller is in the same package as custom blocks. It's always safe to call methods on those. You won't end up with refactoring issues because they're in the same package. Just a way of protecting yourself against what goes on outside. The controllers. Sort of a new thing for us. Although really they're just page callbacks in terms of how we're using them. Here's one example in the aggregator where it's actually calling a database and it's getting a list of aggregator items. That's not really, or that's actually business logic in itself. That doesn't belong in a controller. When we find stuff like that, that means it needs to be moved to some domain object. Just as a random example, I know Larry is cringing at my new. But let's just call it there's an aggregator feeds class, right? That's essentially what it's doing. That's what it's getting back. Yeah, I said aggregator items before, it's feeds. I always like to create simple accessors for domain objects within sort of like glue code objects like controllers. And so it actually do this. It's like what I said before, it's always best to call methods on self, right? And so you're not actually dealing with that class or even an injected thing. Admin overview only calls this feeds method. It knows it gets an object back that it could call find all on. And then this feeds method actually handles the instantiation of that. And so it only does this new hard coded class if it isn't set previously. Larry's also going to hate this, but this is actually a reasonable way to manage dependencies in some cases. If you do this, I can still unit test that class. Because one, I can inject that feeds variable, so the hard coded one will never get instantiated. But even if I wasn't doing that, I can actually subclass it, replace that method with a stub and test that stub. You don't want to do that all the time. Like I think dependency injection is a really good thing and we should be doing that most of the time. But this is an option. You can totally do this and it's okay.  Because we really shouldn't be testing controllers. And if we have a logic in there that needs to be tested, we should just move it out. So it touched a bit on unit testability and coupling previously, but I want to take you through my experience trying to test this map class. Map is a class in type data. It's essentially a hash for people who think of them as hashes. It should be a pretty simple thing to test. So I just took the existing tests from our unit test base class, the type data thing, and just made a simple PHP unit test. All this does is it iterates over it and then it counts how many times it iterated. And then it should equal the number of items that I passed into it. I passed two items into it. And if you notice, I instantiated this map class with that value. So it looks like it has everything it needs. So this is the first message I get. It failed. It didn't work at all. I then discovered I had to pass set value and give it the value again. Just a little strange, but okay. That got me going. And then the next error I got was an undefined function called a cache. So that's in cache decorator for plugins. Just to get to the next thing I went in there and just hacked it out. Now I get this. Hacked that out. Now that. This is a special example because I feel like we just default to using format string all over the place or check plane, which is fine when you need to use check plane, but for format string, this is actually using an exception. I don't really know why we ever use that in exceptions. We could just use sprintf. If I'm wrong, we can talk about that. But let's figure out something because we shouldn't be calling procedural functions in exception messages. And now I get this. And this got called somewhere within the type data, like magic functions. And so I hacked that out as well. And that's how I hacked it out. Finally, after all that, this test passes. So the thing to understand here is that inheritance is hard coding and dependency. We're very sensitive in code to seeing a class's name. And in general, that's not a great practice. But we inherit all over the place. And the thing I want everyone to know is that it's the same thing. It's actually, this is a tighter form of coupling to that class. There's no way I can mock this. There's nothing I can do. It is essentially like taking on that class. If you're a base class, and we're saying, these are our base classes, everyone should inherit them. You have a responsibility to not screw your subclasses. Right? Just this simple tiny map class had problems from, like two different problems from these two different systems. These systems should not make other code untestable. Yeah. And so, touching on what I was mentioning before, here's another example of just calling a dependency directly in a method like this. So sure, this should be injected. I think there's maybe issues right now with injecting things like this into entities. And if that is the case, and you can't do that, the bare minimum, just hide every dependency in a method. As I was saying before, that's still testable. I can replace that. And you just don't want that save function. That save function, its responsibility is to save things. It shouldn't have any knowledge outside of that. And this is a super, super simple thing to do. I don't think there's any reason to not ever do this. Whenever you have a dependency, just hide it in a method.  It'll save you having to refactor the thing that has the logic in it. So I actually think single responsibility principle is more important when applied to methods. And it's a really easy thing to apply. So if you have a method that has more than one responsibility, like it's fetching something from the database, it's applying some business logic in it, say calling a wash dog, you can pretty easily refactor that into separate methods. Those separate methods will be pretty easy to name because they just do that thing that you need done. And then that class is going to be simpler to understand and easier to refactor. So our code is still, as I saw before, very tightly coupled. If you can't use PHP in it to test your class, you cannot claim that your code is loosely coupled. There's a lot of talk in Drupal 8 about how, like, more loosely coupled things are, but there are not a lot of PHP unit tests. And for those of you who don't know, we got PHP unit in a few months back. You can now test any class in Drupal with PHP unit and prove that it is decoupled. Drupal unit test base is not a unit test. And actually, unit test base is not a unit test. Here's an example of a unit test base. A unit test should not have a database connection. So please, I know, like, I don't actually think that none of our code got more loosely coupled. I know it is, but please just go prove me wrong by writing tests. I really want to be wrong about that. And the more we write tests, the more we will find these issues like I found with MAP because it's very easy to ignore when all the code is loaded all the time. So if you write a PHP unit test, no code is loaded except for what's auto-loaded.  So I think there's actually still time to do this. I don't think any of these, or any of the stuff I'm showing is necessarily that time consuming in terms of refactorings, because really, like, they are just refactorings. There's not changing functionality. It's just taking our existing code and making it simpler and moving things around. So that's really all I want to do. I just want to make Drupal simpler, and I think everyone wants that. And so there's a sprint Friday. If you're interested in working on this type of stuff, I will be there. Happy to help people out with it. And just a couple of books I recommend. I feel like there's some good design books out there that have really helped me understand this stuff, especially if you're new to object-oriented programming. For if you're into this stuff and you feel like you have a really good foundation, I love small talk best practice patterns, not the easiest book to read, because all the examples are in small talk. This is actually a really great book, and a lot of the patterns apply to Drupal. And I'll put these slides online, so don't worry about copying them down. Refactoring is also another great one. Domain-driven design I quoted heavily in this. This is actually the bulk of what I'm talking about here. And this is actually one of my favorite new books. It says it's about Ruby, but it's really just about object-oriented design, and it's explained in like the simplest, easiest to relate to terms. And it talks about everything in terms of like the benefit, like you do this and this is the benefit that it gets you. And I think anybody in the Drupal community who feels sort of new to object-oriented programming and doesn't feel like they understand it, I highly recommend that book. It's really great. Thanks. So, are there any questions? And if you have a question, you're supposed to come up to that, Mike. Or anybody who wants to talk with me or tell me that I'm wrong. That is not much of a core conversation. All right. Even though I usually love to tell you you're wrong, I thought you were mostly right on here. So, a question I guess in terms of core development, how much do we need to block release on the developer experience being good? That's a great question that I can't answer. Yeah, question is like how much would we like block release on the DXB and VAT? I don't like to think in terms of blocking since that's clearly not my call. But I don't think there's, I mean we think like, okay, we don't want to block on this. So that means maybe we don't have time to do it. I think that maybe just encourages people not working on it. I would say let's assume we're going to ship D8 in a state that makes sense. So we should just continue to work on this stuff until we release. Sort of a dodge, but I think I said something. You were talking about Ruby and Active Record earlier, and I think the way that they do domain modeling is very intuitive. They have all of their static finder classes and saving classes on the model object, the entity object itself, right? I think in the PHP world, the preferred way to do that is to inject dependencies. Oh, hey. Oh, yeah, it helps to turn the mics on, I guess. Sorry. So should I repeat what I was saying? Keep going. I'll summarize it. Okay. So the preferred way, I think in PHP instead, is to inject dependencies into like a manager class, right? And that does the finding and saving, so, you know, et cetera. But I think that results in a more complex domain model, right? And like an uglier looking code to, like, end users who are using your interfaces. What do you think about that? Okay. Yeah, happy to talk about that. So the question is about, like, if you ever looked at Rails and the Active Record pattern, like, if you had a user class, you would call it user static method find, and then you'd get users back. You don't have a separate object. Like, that's the same user class that you would then instantiate. And the Active Record pattern, it's where you have, I mean, this is going to be a gross oversimplification, but it's where you have the persistence layer and the domain object, like, all in the same object. And so you mentioned, like, the PHP world, we tend to do it in another way, where you have, like, repositories and stuff. Those two patterns, actually, they're in the... They're in this book. That actually has the Active Record pattern. This book is actually sort of the secret manual to Rails. And then there's also the data mapper pattern, which I think is what you're talking about. A doctrine from what I've seen looks like it does the data mapper pattern. I don't think it's actually bad, because the basic idea is you split it up into your domain models, and then you have repositories. Repository has a place in your domain. I think when you call it that, it says, actually, what it is. If we call it a manager, it's more ambiguous. But a repository is a domain object that I talk to to get instances of this type of object. It's certainly more complex. I think if we actually did something that looked like Active Record, we'd be totally fine. But I don't really want to make that argument. So I'm fine with doing, like, a more data mapper-style thing. So I wanted to ask again, actually, about the question about whether we should block release on DX problems. I actually have... It's part of my job to try to help answer that question. So Code Freezes July 1st, and the idea is that five weeks from now we can't change our public APIs anymore. And so the question becomes, how much refactoring can we do that's not going to change our current public API? Do we consider namespaces part of our public API for July 1st? Because if we do, then, you know, that sort of reduces what... Like, question, so can you, like, talk about what you think we can and can't do, or do you have any idea? Okay, so what I'm talking about would definitely involve public API changes. But they don't necessarily have to involve public API... BC breaks. Right? So say, like, in the example, we're showing, like, the comment-prepare author. We could move that in. We could create that new method on comment. But we could leave that function and then just move the guts of that function just passing through to that class. We've done that in a few areas. Like, there's a lot of... If any of you have been in the CorkU following this stuff, like, there's lots of patches that are just moving these functions into classes. Some get rid of them. Some mark them as deprecated. Some just leave them. I like leaving them and marking them as deprecated. We have procedural code. We're going to have it for a long time. We have .module. That's what that is. There's... People are going to want or need to call those procedural functions, and that's totally fine. You just can't do it in a class. I probably should have said that earlier. You can't call a procedural function in a class. That's, like, violating a boundary that introduces hidden dependencies and makes that class totally untestable. So we can do that and leave those functions. We just can't actually use them inside of classes. So I think we can actually do this, in most cases, without breaking VCU. And in terms of, like, public, it's really important distinction. We don't need a default to making everything public. If there's no reason to... Or for... If a method is intended to only be called within that object, just make it protected. And then we don't have something that could potentially break VCU. Because everything that we make public, I like Martin Fowler has a concept of a published interface. It's like a step beyond public. It's like we have our public interface, and then we release. Now, we're really on the hook for never changing those. And so if we think it might change, if we feel like it's unstable, let's just make it protected. We can always change that if it ends up being an issue. But that puts us in a safer spot. So, for the record, I don't actually disagree with 95% of what you said. Sweet. Really, the only thing I'd add is, Drupal does have something of an upper bound here, simply because so much of what Drupal does is by design runtime dynamic that does limit your ability to use method names to document what's going on, and what's going on is going to vary depending on what the user configured in some form over there. So there's a limit to how far we can go with this, but in a general sense, I mostly agree with you. So if anyone thinks that there's a blood feud here, no, there isn't. And to comment on that, though, I think there are definitely cases where you can say, like, yeah, it would be nice to have this method that says what this thing is, but in this context, I don't have the knowledge about that because it's some user configured thing. I would say in that case, I mean, it's clearly not appropriate, but it gives us a better understanding of what our domain is to understand that because our domain is not solving, like, these business problems that sites have. Our domain is making software that builds websites. Right? And so that generic part of it, of just getting information that a user configured and then doing something with it, like, that's our domain problem. And so methods that reflect that are very informative. So they made up, you know, find by query object that the user configured somewhere, you know, find by view or something like that. Yep, and that explicitly states, this is the lowest level of abstraction that we can deal with. Yeah. Anybody else? Okay, thank you very much for showing up.


well well well apparently today is the day that we get updated on the switches sales numbers and the software sales numbers at least through June 30th now we thought we were gonna get an update back in June because they had a meeting towards the end of the month at least an update on what the switch numbers were to date but now we know now we know at least what they are up until July so there are no sales numbers included in this data from Nintendo for the past month but I mean that that's okay that's expected so here is where the switch stands as of June 30th worldwide it is sold 4.7 million units obviously if you include this month it's probably over five at this point especially with the release of Splatoon 2 but yeah 4.7 million units that that is the lifetime to date sales to put that in perspective at the same point for the Wii U it sold like 3.45 million units and the thing is 10 months after the Wii U came out it still had and broke 4 million units and now we're looking at the switches probably broken 5 million units by now that's just insane also with this sales data we get updates on game sales so it's probably no surprise that the number one selling game for Nintendo Switch is still Breath of the Wild which sold 3.92 million units on Nintendo Switch which is great that's already more than some others all the games and if these sales keep up by the end of the year this could end up being one of the best-selling Zelda games of all time just on the switch not counting Wii U sales the next best selling game is Mario Kart 8 Deluxe at 3.54 million units I mean this is a a re-release a remastering of sorts of a Wii U game and it almost tied Breath of the Wild that just crazy arms which just released last month has already sold 1.18 million units and that is a brand new IP on a console that only has 4.7 million that that's an insane attach rate of arms to the amount of switches out there that is very very good news for arms as a new IP and as a potential of becoming a franchise so it's not a one-off game it could get sequels in the future even if it's a once per generation game like Smash Bros and Mario Kart generally are and that about does it for the million-sellers Switch we Nintendo's only given us the million-sellers here and they're obviously only talking about their games are not talking about third-party games and what those sales might be it's up to those companies to discuss those sales what's also really neat about this is we have something really cool media create they always post a week-to-week sales in Japan and normally I don't talk about them because you know there's nothing extremely notable but this this week is especially notable at least this new report from media create because this is the launch week of Splatoon 2 so Splatoon 2 in Japan launch week so 648 thousand units to put that in perspective the number two title on their list which is also a new game for 3ds Leighton's mystery journey by level 5 brand new number 270,867 so that's an insane amount Splatoon 2 is well on its way to top in a million maybe even 2 million units in Japan just Japan and to show you how big this impact was on the switch itself last week the switch sold about 32,000 units this week it sold about 99,000 units and it probably could have sold more but you know we all know the switches supply constrained so it is what it is and lifetime to date tend to switch is sold 1,196,986 units just in Japan so of that 4.7 million unit we know that 1.2 million of that is Japan and obviously this is insane this is really really good numbers the switch is doing really well really well that that's what the big takeaway from these numbers are also in general the Nintendo switch is sold 13.6 million units of software with 4.7 million hardware you know that gives it almost the three-to-one attach rate of software to hardware which means every switch owner essentially has at least three games or at least on average there are three games each switch owner owns which if I had to guess Mario Kart Zelda and arms or Mario Kart Zelda and some other you know other game in any game or whatever the case may be I don't know if indie game sales are counted in this or if it's just these are just physical sales I have no idea I don't know how Nintendo counts their units and it's important note that this is just an update for Q1 right because this includes obviously this is lifetime to date sales so this obviously includes launch month which was Q4 of last of last fiscal year but yeah this is really really good so essentially the switch from March has sold 2 million more units overall now that might seem like a small amount because launch month you know hey they sold 2.74 million in March but they only sold 2 million cents man the switch momentum's dying but that's not really what's happening Nintendo just can't make enough of these dang things they have production ramped up to the max and they just cannot meet demand you think they only wanted a hundred thousand units available in Japan when they sold 600,000 plus copies of of Splatoon 2 no if they had it their way they probably want you know 500,000 switches available in Japan for launch week of Splatoon because they probably would have sold every single one of them but it is it's what it is what to give you an idea just for the quarter sales switch hardware sold 1.97 million in this first quarter of this current fiscal year and switch software have sold 8.14 million for this fiscal quarter again kind of maintaining that momentum you know that that three-to-one game ratio also as a note obviously 3ds is still kind of a thing the 3ds hardware sold 950 case for this quarter and 5.85 million units of software for the quarter again a really nice attach rate you know six to one that's that's great stuff also their smart device and IP related income for the quarter was 9,062 million yen just a lot of money Nintendo's earning share from Pokemon Go is 3,286 million Nintendo made 81 million dollars for the smartphone games that are not Pokemon Go and Nintendo made to 29.4 million from Pokemon Go so overall they made over they made about 110 million dollars this is in USD off of smartphone stuff that's really really good yeah that there isn't really much more to say than that I mean I'm just looking at the official press release and you know it says there were a few type of amiibo compared to the same period last year few new titles offered amiibo functionality amiibo sales were approximately 1.6 million units for figure type and 1.3 million units for card type in our digital business sales digital versions of package software downloaded content and Nintendo switch showed study growth with total digital sales of 11 billion yen which is a 41% increase year-on-year yeah it I'm just glancing at the rest of this you know in addition the Super Nintendo entertainment system the Super NES Classic Edition is a compact recreation of the Super Nintendo entertainment system which launched in 1990 and it features a collection of 21 titles from Rich Library we plan to launch this system globally in September and October blah blah blah blah there are no revisions to the financial forecast for this period originally published on April 27 2017 and the big takeaway from that is Nintendo predicted that they would sell you know 10 million switches in this fiscal year now selling you know just under 2 million in the first quarter might seem like a bit of a bummer but we saw the holiday period coming that's usually as higher sales than normal plus there's still selling every unit there's no doubt in my mind that if they had 2.5 million switches available worldwide they would have sold 2.5 million switches so again you know a lot of this is going to come down to can Nintendo stop supply constraining themselves but yeah this is all really good news you know but again this is just my take let me know what you think and I'll put links to all the results down in the description so if you want to dissect even further into the details be my guest but I went through all what I feel is all the relevant information I mean if you want to know I guess I didn't talk about this the lifetime sales total for the 3ds are 67.08 million units with software at 335.10 million units you're just really insane stuff if you want to know for the Wii U Wii U hardware is obviously done 13.56 million units that it's it that number will never go higher than that but the Wii U software is at 99.97 million units again a pretty good attach right there but yeah it's Nintendo's doing pretty good man they're doing really good right now the switches is selling like hotcakes the 3ds is still moving you know almost a million units per quarter I know that's not you know as much as you would like but again you know the amount of software they're moving in compared 5.85 million for only a million units so that's insane Nintendo's doing really well right now switches doing really well I'm hoping it continues the momentum Nintendo can catch up to demand and we can see them hit that 10 million goal that they had which would put the system at about 13 million units around the end of the fiscal year but yeah I'm excited I hope you're excited good job Nintendo you have hit a home run in my opinion and as always I am Nathaniel Rufflejantz from Nintendo Prime if you liked this video you know what to do if you dislike that video hit the dislike button subscribe for more and if you already subscribed thank you so much you are what make this channel possible and hey if you care to support us you know in a financial way you can check us out at patreon.com slash Nintendo Prime the biggest thing we're trying to you know support there is our podcast but obviously once we move beyond our podcast goals we have other really ambitious video ideas we would like to get to down the line that we need your support to make happen so thank you so much for tuning in and I will catch you in the next one


Hey I'm here in Churchill, Pennsylvania. The address here is 1912 Garrick in Churchill. Hi I'm here to show you this lovely home. It's a four-bedroom, two and a half bath and it's got hardwood floors, a large living room here, high ceilings with crown molding and tons of light. This is a great open concept kitchen. You've got plenty of room here plus a functionally wood-burning fireplace, stainless steel appliances and a lovely outdoor living space. This house is completely pre-inspected and I'd love to share the inspection report with you. It has so much to offer. We're close to town. It's a big home, beautiful, lovely lot, professionally landscaped. It's got a formal dining room, finished basement and like I said before, four bedrooms.