Andra check there's another link as well. So go ahead and switch over to that one. But now we will talk a little bit about how to use the DHS to API from your platform web application. We have built a library called we call app runtime, which makes it easy and a little bit more robust to access that API from particularly from react applications. So I will be covering that in the next 20 or 30 minutes. I'm going to share my screen again. So you should see my screen here now. Yes. Great. So this is going to be just an introduction to app runtime. Some of you may be familiar with it already. But it is, yeah, it'll be a refresher for those that are familiar already. And app runtime is a collection of different utilities that are used at runtime by DHS to applications. So I'm going to focus on what we call the data service or the data engine here today. And so that's using queries and mutations to interact with the DHS to API. But there are, it's important to note that there are some other things that you can do with the runtime as well and there will be more things, more functionality added to the runtime in the future as well. But I won't cover that too much. I'll tease it a little bit today, but I won't cover it too much. So this is one thing you can do. This actually isn't related to the API, but this is one of those other other functionalities that is available in the app runtime. And basically this is what's called a react hook. If you're not familiar with react hooks, there's lots of good documentation for it on the react website, and some of the links that Deborah sent out as well. So the hook that exposes base URL API version and server version for a particular DHS to instance so your application doesn't necessarily know what the base URL is what the API version is or what the server version is when you build that application, because you can then it might be installed in a different DHS to instance that has a different version or different URL or those types of things. So in order to get those, those variables or the that information from any component in your application you can use the use config hook. The server version is particularly interesting because you can turn on and off different parts of your application if you want based on the server version that you're talking to so if there's a feature in DHS to 235 that it doesn't exist in DHS to 234 that you want to support both in the same application. So you can use this server version which has minor and patch version numbers within it parses it automatically and to determine which which version you're talking to, and then you can do different things in your application based on what's what the version of the server is so that's something that is quite interesting. And you can also use this if you need to, to manually do API requests but I wouldn't recommend it because there's a lot of things that the app runtime gives gives you out of the box that you would have to do yourself like error handling, like authentication, some other things as well parsing. So, let again I'm not going to go into use config too much it's fairly simple, but I will also say that if you want to learn more about any of the things that I'm talking about today. You can go to developers.dhs2.org. And then in the docs section under reference. You can find the app runtime link. Click on the app runtime link, and we have this this documentation site that talks about everything that that I'm going to talk about today. So it'll tell you how to add the app runtime how to use it. I'm going to talk about the provider today but there is a provider which gives you this base URL and API version for the rest of the application to use, but you don't need to use this can this provider. So you are using the app platform, it's it's done for you, it's provided for you. So, don't worry about the provider if you're using the platform which you should be for for everything in this workshop in this Academy. There are also the the hooks that are available from the app runtime. And so we just talked about the config hook. This tells you there's no input variables or arguments for this function call. You just call use config, and it gives you some output base URL API version server version, etc. Next we're going to talk about use data query as well. So let's look at the use data query. I'm going to actually come back to this slide after I introduced queries and mutations and declarative data fetching. But this is another hook that is exposed by the app runtime. And it basically gives you a way to say for this component in my application, I need the, let's say the list of 10 indicators with their display display name and ID, which is what is shown on the in this code sample here. And then react and the app runtime know that you need that information. So they'll go and request it from the server for you. It will also re render your component every time the state of that request changes so when it first starts, it will return loading equals true, and you can render something in your component that says, I'm loading and waiting for this response to come back. When that response comes back, if it's an error, it will give you the error. If it's successful, it will give you the data that was returned from that API call. And so this is a way to do declarative data fetching within a component, and it lets the the component can say exactly what data it needs. The runtime is responsible for combining all of the needs of all the different components that are on a page, requesting that information from the server, and then re rendering all of those components when they're when they're available. So we're going to use data mutation, which we'll cover a little bit today but we're going to focus more more on queries, and use data mutation is just a way to mutate or change information through the DHS to web API. Usually you would use posts, put or delete requests to do that through the API itself. This is a way to do it in a declarative way similar to the query from within a react component. I'll talk more about that in a minute. And then this is one that will cover more in the workshop in May. It's called use alert. Basically, this is a standardized way to show alerts to the user that the little snack bar that pops up at the bottom of your screen. And this is again a declarative way to do that so you can declare the the alert that will be shown by a particular component of your application, and then you can call the show function when when you're ready to show that alert. We'll talk more about alerts and what those look like and how to how to use them effectively in the design system in the May workshop. I've mentioned declarative data fetching here a couple times. If you've seen me present this before maybe you are familiar with the example I'm about to give but if you haven't. Or even if you have hopefully it's a good refresher on what declarative means. And declarative is the opposite of imperative. So imperative means I'm giving a command to do something very specific. It's also a grammar a term from grammar to say like the the command version of a verb when you're when you're telling somebody to do something. And declarative, on the other hand, is just announcing what you want rather than telling someone to do something. So we'll talk a little bit about the difference there and why it's important in software engineering and in web application development in particular for DHS two applications. So a destination is declarative. I can tell you where I want to go, where I want to be, rather than how I want to get there. So if I say that my destination is this particular Boulangerie in Paris, or my destination is the Jinja Uganda, where the source of the Nile River, for instance, and that's a destination but I'm in I'm in France it would take me out there were a lot of steps to get me to Uganda from here. And that's just an example. Any destination would would work for that. But I'm not telling you how how I'm going to get from Paris to Jinja in Uganda. That would be imperative so directions for how to get from my my apartment to the Boulangerie in Paris, or from my apartment to Jinja Uganda is imperative so there are a number of very specific steps that I could say could could tell you in how to do that so I could say that I would need to take the train to the airport fly to Kampala take the a bus to Jinja something like that to get to the that that destination. But there are other ways that you could do the same thing right so maybe there's a you take a motorcycle instead of a bus, or you take the different train to get to the airport. There are a lot of different ways to go about that and it might, depending on the situation it might be better to take a different train or to take a car or a motorcycle rather than a bus in in a certain situation for for this metaphor example. And by by giving you instead of these turn by turn directions specific directions by giving you just a destination it gives the person that is for the system that's responsible for for figuring out how to how to get to that destination. It gives them some freedom to choose the best option in the moment. And so what is this what does this mean for software engineering and for fetching data from an API. And basically it means that if I tell you that I want the the the information about the current user. I want the name of the current user and that's all I really want. There are a number of different ways that I could get that I could tell you that you need to go to HTTPS colon slash slash the name of the server slash API slash 32 slash me. The question mark format equals JSON and fields equals name. And then you would send an eight and I would tell you send an HTTP request with this authentication header to that URL, get back the response and parse the response in a certain way, and then I would have the name. Maybe someone else already got on the same page as as my component already fetched the name of the current user. So in that case there's no need to go across the network to get the name of the current user because I already have it in the browser. So the runtime allows us to do so all the different components can declare what they want, and the runtime can figure out what requests it needs to send across the network what it needs to fetch from its local cash potentially, and do do a bunch of things to to make that more efficient maybe it combines multiple requests into one. It's a black box you don't need to know what's inside of it. So by moving to this declarative model where the application sends a query to the app shell or the app runtime. That app runtime maybe makes a request to the server, maybe it makes a request to the local or offline cash. Cashing and offline support are coming very soon as I mentioned earlier so that you won't necessarily see cash hits today, but in the very in the near future you will. The important thing is that when you declare your your data dependencies in this way. The application doesn't need to change in order to automatically get the responses the correct responses back from the cash. So when the cash is added or when there's additional time to combine different requests into one in the runtime that will be automatically available and used by every application that uses that runtime without any changes to the code. So that's an important thing to think about. Let's talk a little bit more about what a data query is I've said that word a couple times. It's a specific term for the way we make declarative data requests in DHS to and particularly in DHS to web applications using the app runtime. So it's a declarative data request for data that will come from the DHS to API at some point, whether that is some point in the past or at the moment the request is made is up to the runtime. So that's the whole query here. So I'm going to go ahead and present so you can make this a little bit bigger. And this is a simple rest API request, and it has it's going to the URL that we are using for our Academy instance, and it's fetching the me endpoint so the information about the current user, and it's getting the name field. So as the example I just just was talking about. But this is the imperative way to get that information so you were actually saying to send an HP request to this specific destination with a particular header or those types of things. The same exact request can be made with the data query using this object down here. The resource is me. So that's what I want. And specifically what I want is the name field for this resource. Everything else is is is more instructions and directions than destination to make that even a little bit more clear. We've broken down the URL the API request into different sections and talking about what those actually mean so we have the base URL which is the URL of the instance that we're talking to. We also have the path of the API version that we're that we're requesting from, we have the name of the resource that we actually want. We have the format of the response that we want in this case it's JSON, it might be XML or something else. And we have the parameters which say what, in this case we're specifying fields, I talked about a lot of other parameters that you can also pass to a rest API endpoint in the CSS to API, but in this case we're talking about fields so we're requesting the parameters with fields name so we just want the name field. And these things tell you how to fetch from the API, because their base URL the API version the transit format is all instructions. We don't actually need those when we're using the app runtime. Because the only things that are actually telling you what you want to fetch are me, which is the name of the resource that we're requesting and fields equals name, which is just a way to kind of specify exactly what you want from that me resource. So those two things are the only things that are present in this declarative data query that we can use to request that information from the app runtime, and then that would turn into potentially this API request potentially a different API request potentially something or request to the local cache. This is a good example or a good moment to introduce the data query playground. This is a simple data query on the left here I have the query itself which is me with the fields name, the one that we just talked about. And then on the right I have the response. And so I'm going to go out of this and go back to my runtime documentation.  This will open here. And you'll see that there's a big blue button on the left that says query playground. So let's go ahead and click on that. This is an application it's actually a DHS to application built with the app platform that is running on the DHS or on the runtime documentation website. So I've already filled this out of this in and it remembers what what URL you previously connected to. And I could also do HTTP local host 8080 if I had a server running on my local machine, but I don't so I'm going to use the Academy instance, and then we put in our username and password, and we sign it. And remember that if you're you doing this with a custom DHS to instance or a production DSS DSS to instance or something like that. You need to make sure that runtime dot DHS to dot and you. The DHS is in the cores whitelist as Deborah mentioned yesterday. So what does this application do it's it's just a handy way to test different queries and mutations and and to see what the results are. So the default query is just here. Again, it's to the me resource so the current information about the current user. We have ID name, email and introduction. Let's go ahead and execute that query. And it actually made a request to our DHS to instance, which fetched the information about the current user with the fields name ID email and introduction which is exactly what we requested. This is the query and I didn't need to specify any information about the other stuff that the runtime already knows which is listed up here on the right side. And so we can actually say we can we can change this and just experiment so let's go ahead and get rid of that let's do the exactly the query that we had here in the previous. So we just wanted the name, for instance, let's get indicators instead, which we talked about earlier. Note that this is JSON. So the keys need to have double quotes around them. If you did just like this which you can do in JavaScript, that doesn't work and it shows you that the, this is bad, bad JSON. Let's just click execute. Now we have, again, we have the list of indicators and we have the name of each of those indicators and our page size is 50. Under params we can pass the other parameters that we also could pass in the query string of our DHS to rest API. So we can say page size is 10 comma. We have nine pages. We've got 10 indicators with the name only. Let's try organization units. So let's get. Again, I wouldn't recommend using all. So you can use all here. We will actually see, let's look, let's look at the request that's made under the hood here. So if we use the all resource. It will show me all of the available. Yeah, all of the available fields for this organization, these organization units. And it actually makes this request, which is the same one that we might have typed manually into our browser. So you can actually see the requests that are made if we change this to just be, let's say, so here in organization units, we have a set a bunch of data sets, let's say data sets. And then we want the ID and the name, let's say display name for that data set. Let's do page size. Actually, let's get an ID as well. So you'll see that fields is an array. So you can have multiple different fields specified as arrays, but if you're using the field expansion, it needs to be in one string. So data sets, open parentheses ID, comma display name. So now if I execute this, we get the ID of this particular organization unit. There are 1300 organization units, which is quite a few. And I'm only interested in this particular one. So I'm actually going to add ID here to my resource. Sorry, that's not the right ID. This is the ID. This is my ID. So we didn't talk about this quite yet, but you have resource, which is useful for specifying what your, what type of object you're trying to request in this case organization units. And then you can also pass ID, which is the specific organization unit that you care about. So we make that request. It goes to, if we see in this URL here slash organization units slash that ID, and then it passes the page size, the fields, etc. So now we see that we have a list of a bunch of data sets that are affiliated with this with this organization unit. And actually let's change this name. So you see this name here is me, we can actually change that to whatever we want. So my results or something like that. This is just to identify this particular query in this query set. Now we have so we can get some other information about this data set let's change ID and names to star for the moment just to explore and see what we get. And it's quite a lot of information. So if you see that this this request for fields equals ID and data sets star. We actually got 112 kilobytes over the network after G zipping so it's actually 600 kilobytes of data. That was downloaded. That's a lot. So if I if I changed this to a slow 3G connection and I tried to make that same request. It takes a long time. And if we don't actually need all of that information for every single data set. That's a lot of wasted time and wasted network that we don't want to do. So let's look at what fields we have available here let's say we want let's say display name ID ID display name. Let's try. Let's just get another one. Period type. Instead of when we when we reduced that from every field in data sets to just the ID display name and period type. We're still getting a list of all the data sets that are associated with this particular org unit. But instead of 112 kilobytes across the network it's one kilobyte. So that can be a huge savings when you when you actually specify the the correct fields that you want. And in the latest version of the app runtime, it will actually show you a warning if you specify all or star as the field name here because that is can be quite dangerous. I'll also give you a warning, if you say paging false, which would only work in this case. But if I said paging false, I'm going to turn. I'm still on slow 3G. I'm going to turn off page size but I say paging false. Let's even just get the ID. Actually, let's get star. So if we if we did this which is bad, you don't want to do a request like this. This means that we're not going to page the org units, and we're going to get everything about that or unit. Remember we have more than 1000 org units in this system, and some have 10,000 or more. So this is going to be quite a big request here. This is 500 kilobytes across the network, more than two and a half three megabytes of download. So it was actually 500 kilobytes across the network 3.4 megabytes of data when we used paging false and star so don't do that. So this is again something that will show a warning when you when you do it in the latest app runtime, but it will also at the sometime in the future we will restrict that ability to do to do something that could be harmful in that way. So that is the the runtime playground I'm sorry I'm running a little bit over time here but hopefully that's alright Deborah let me know if I should. This is a that that is a good way to test out simple data queries and mutations as well. We're not going to get into this too much either but you notice that I had the my results here in this response here, you can also. Let's make this something reasonable ID. Page size 10. Let's say this is my oh you results so that's going to give you the organization units for 10, the top 10 organization units and their IDs, but I can also have two requests that will run at the same time. So I have my oh you results here and let's also get information about the current user for instance so let's say we want we also want the current users name, which we did before as well. So resource is going to be me rams is going to be fields to do that. We got 10 organization units you'll see we have two different things here we have my oh you results and me and they're both in this object and actually if we looked at the network graph, which I think we can see. It's a little hard to see, but I showed it in this slide a little bit better. So we actually did made two different requests across the network here we had the me request and the organization units request, but we specified it in a single data query here. And those would actually be requested at the same time, so that they run in parallel, which is, it's a nice kind of advantage here as well. So we have now the result of the organization units query and the result of the me query. If we look at this, you can see in the waterfall here in this little pull out that all three of the requests in this query run at exactly the same time. If you ran one and then the other and then the other it would take three times as long so it's, it's important to do this in this way. I'll cover very briefly data mutations, and then I think we'll do some exercise an exercise on data queries. So data mutations have basically queries are for reading information mutations are for writing or changing that information. So three different kinds create update and delete. There's also partial update mutation, but that is not supported by all endpoints so I would caution against using it unless you know what you're doing. So create mutation. Again, you can test this out in the app runtime playground, and you can specify basically a resource in this case we're talking about indicators we're going to create a new indicator, and we pass it some data. So we have the params we have data here, and we specify some information that will be in the, the new indicator that is created in this case. We can also do an update mutations in this case I'm going to update the introduction of the current user. I'm going to specify it as hello world, my type here is update, and they get that response. And finally, we can do delete. So if we created this indicator here and we get this you ID in the response, we can then delete that same indicator later using a delete request, or a mutation of type delete. So that was a very, very quick introduction to mutations. I'll talk a little bit more about them in a little bit but first I think I'll turn it over to Deborah to do the, to facilitate our first exercise unless there are any questions. Were there any questions that came up with that I know it's a lot of information. So, don't worry if you have questions. I'm sure other people do too.


Players, rigs and setups are now more creative than ever and they can incorporate amps, pedals, rap gear and even computer-based plug-ins. For me, kind of connecting all of that, switching all these things at the same time, can be just as much of a challenge as getting the right tones. The LiveLogic MIDI Foot Controller is a super compact, fully customizable controller interface. So as well as being a MIDI Foot Controller in the traditional sense, we've added a couple of little things that really open the doors for what this pedal can do, such as the USB on it, but you can use this as your MIDI interface. So the example being, I've got a few of the pedals on my pedal board which have MIDI but are not USB, and so I can connect those in a MIDI loop into the LiveLogic and the LiveLogic will then forward on the MIDI messages via the 5-pin DIN cables over the USB to your DAW and that means you can either trigger MIDI events from your pedal board into your DAW or you can even have your DAW trigger MIDI changes onto your output gear. So it's kind of the hub of your whole MIDI setup if you're using a PC or Mac. It can be powered via either a 9V battery internally or an external 9V power supply just like your standard pedals. Or it can even be a USB bus powered. There are two modes. You've got patch mode and you've got custom mode and that's accessed via the switch on the back. Patch mode sets the controller to send MIDI program change messages when the foot switch is oppressed. So switches one to four send your program change messages and then five and six are banked down and banked up. When it's in custom mode all six switches can be individually configured to any type of MIDI message you need whether that's program change for your switching patches, control change for changing individual parameters or settings. Even note for triggering samples or clock for synchronizing the tempo of your multiple time-based gear. There's even two available expression pedal inputs. Setting up your custom configuration is done using our free PC or Mac software. It's a really simple graphical view of the foot controller and the ability to choose the message type and even set minimum and maximum values whether the switch is toggle or whether they're a momentary press. It's all designed to be as flexible yet as simple as possible so your MIDI controller is no longer the barrier to doing what you want to do with your rig. One of the great things about this we've teamed up with Ableton to make LiveLogic an official integrated controller. One setup we tried when we were developing this product was we were actually controlling our amp channel and also some lighting effects all in one go. So it was a really cool live experience controlled by the MIDI foot control. LiveLogic appears in Ableton Live as a supported product and it gives you access to specific functionality where Ableton Live can actually take control of all of the functions and all the displays on the LiveLogic foot controller and to be used integrated as a part of your door setup. We've tested loads of use cases here at Blackstar but I'm really excited to see what YouTubers and artists kind of create using this platform.


Hello and welcome to MIPP TV, the TV station for Manchester Institute for Psychotherapy and I have with me tonight Bob Cook, the founder of MIPP and he's going to be talking about Co-Creative Transactional Analysis, a book written in 2014 by Keith Tudor and Graham Summers. Summers? Summers, excuse me, Graham Summers and we're going to put a picture of that up now so you can have a look at it and we're going to put a link in the bar below so if you're interested in the book you can click on the link and go and investigate it maybe by it. And just to be clear this isn't a sponsored video, this is just Bob sharing his love of this particular book. Would I be right in saying that Bob? Yeah my love of transactional analysis, our transactional analysis has evolved since Eric Byrne's day, Eric Byrne started to create TA in 1956. His first books were on Intuition and this book really is an evolution of transactional analysis. It's one of the books which has taken really transactional analysis in the 21st century. It's a wonderful book, I really like it. It concentrates on the thread of relational transactional analysis. In other words it looks at the co-created relationship between two people, therapist, client. And if you concentrate on the relationship then you will work towards an effective cure. The relationship is the key at worst to cure in this sense. So it almost sounds like there's an acknowledgement that the relationship is a primary part of the model or the theory or the treatment plan. And this book really concentrates on that element. And of course Keith Tudor is well known, he's come up quite a few times, certainly in my teachings through the years. He's been advised in the person-sensitive community. So I'm wondering if I get that sense that he's transferred that into TA, would that be right? Yeah I think so. It's certainly centering on the idea of the relationship as all important. If you go back to Eric Bernstein and his first books, Transactional Analysis and Psychotherapy, which are reviewed here. I think it was the first book I've reviewed. This is the fifth book I've done. Now if you look at Eric Bernstein's books, Transactional Analysis and Psychotherapy 1961 and then you look at games people play in 1964. And you look at the theory of principles in 1967 and then what you say after you say hello in 1969. Eric Bernstein didn't really centre on the relationship that's been figure in the idea of psychotherapy. He developed a lot of techniques, a lot of really good models like the parent-adult child model, functional, structural. Talked about games, drama, triangle, strokes, discounts, transactions. But he didn't really have a figure, well he didn't really I think concentrate on the relationship between a therapist and client. Which is a co-created process being figure to cure really. When you talk about co-creative, I've often heard you speak of this before. And it might be worth just expanding on that. Co-creative, it almost feels like there's two people in a relationship and they create it between them. Would that be right?  So if I suddenly said to you, do you know what Roy? I've had flu for the last three days, which is true by the way. I'll suffer from flu at the moment. That transaction would impart information to you and would probably evoke in you a transaction back. Now that might be coming from TA terms, parent, adult, child. But we would co-create a dialogue. We'd co-create the space between us. Just follow that through a moment. Look at the theory that the past affects the present. And that we are enacting in the present our past dramas. Are you with me? Yeah. We hope that. We'll get a different answer. So I don't know what your history is about illness. But say you have a script belief that you should get on in life, be strong, don't look at illnesses, and that you've got to really just ignore illnesses. And you will have a script decision about that. So your transaction back to me might not come from the child in your state. It might come from the parent in your state. I hear that you've had a bit of flu, but pull yourself together, book yourself up. You're not dead yet, that type of thing. Yes, that's right. So you're enacting out a script belief or a real core belief from your history.  And then you transact back in the co-created place between the two of us. And we may or may not enact out your script from your history. Yeah. So it's helped to realize the way someone reacts to that initial I've had flu, which is an adult transaction. The response of that could either come from a very parental place, which I've just done, or a very childish place. He's like, oh, that's terribly frightening. And, oh, I bet you're feeling awful and you need four days off work and that type of thing. So we're playing out in the here and now, or enacting out in our co-created relationship, processes from the past. Yes. Yes. That's really what we mean by co-created relationship. But what happens in the therapist room with the client is a relationship today in 2017, which will have its etiology or its oranges way back in time. Yes. So if we can deal with the relationship in the here and now, perhaps maybe in a different way or have a different outcome, we may then in that process have some healing through the new relationship. Yes. So a reaction such as, I'm sorry to hear you have not been feeling well. I wonder what you're doing about it. That type of thing would be a very much of an adult response, wouldn't it? Yeah. And then how I react back to that might be one of disbelief that someone could actually say this transaction in a certain way, or it may be typical to my history. According to my script belief systems. So it's through the relationship with therapist and client that we can have a different healing in the present. Yeah. And also I'm hearing, and it sounds really interesting, Bob, from something that comes from a person's centre position, is that the reaction to what someone says can set the tone of the relationship and the power in the relationship. So if you're the client who said I've had flu and you say, oh, you'll sort of, you'll be all right.  It sets the tone, doesn't it, and the direction of the relationship. And that can be, I would imagine that could be quite dangerous if it's done without any thought or kind of sense of self from the therapist. Right. Now here, hitting on a really big point here, because I think when we talk about using the relationship in a co-created way, we need to have some clinical thinking. It's not just about past timing or self directing a relationship in a way, which may be a one up, one down position. This is about clinical thought in the relation. Another way of looking at this is that the clinician is reworking the transfers in the here and now in the service of the client. So they're reworking, they've been thoughtful of their own history of this. Their responses is purely based on the best outcome for the clients and doing the right thing for the clients. Right, in the service of the clients. Correct. And you know, it takes quite a lot of skill to work in this relational co-creative process. It takes a lot of, you know, higher sophistication. And most important, it takes the therapist knowing themselves well. Yes. Yes. So this is about self-awareness, isn't it? Yeah, because if you don't know yourself well in this particular model, you won't know where you begin and where the client ends or where the client ends and you begin. And you could end up in a symbiosis emerging and actually a counterproductive process. Yes, you get into a symbiotic relationship, couldn't you? Where there could be a co-dependency either way, I would imagine. Yeah, yeah. So it takes, you know, it takes a real lot of therapy, knowing yourself for you to work well in this process, I think. It's a wonderful book, by the way, because it goes through the origins of Eric Byrne, goes through the concepts that Eric Byrne brings forward and brings to you right up to date, you know, in terms of relational thinking, relational theory therapy in the 21st century. Yes. So, I mean, the very data of the book 2014, it's maybe two, three years old. It's got two quite big voices in the world of counselling psychotherapy. So it sounds to me, I've not read the book myself, but from what you've said and the chats we've had about it in the past, it seems to me that this is bringing the thinking up to date, maybe adding on to the work of Byrne who was a technician. Yeah, definitely. And it would really appeal, I think, to client-centered therapists. Oh, that's interesting. What brings you to that place, Bob? Because it's actually, it's about following the client in a congruent way. It's about being attuned. It's not about going back into someone's history in a regressive way. It's going with the client in here and now. It's not about using techniques, not using about analysis. It's about bringing the work into a phenomenological place in the actual clinical office, which is where I think client-centered work has its origins, really. Yeah, so I think that's where it has its efficacy as well. That's where the model would say the work's done. But in TA, of course, it relies on the technique, on the model of the mechanics of it. So yeah, hey, what you're saying, Bob, a useful book for maybe person-centered therapists who want to read about it from maybe a slightly different handle than the traditional person-centered books. That last sentence is really interesting because what you just said then about TA, the mechanics, models, etc. If you go back to Eric Byrne's day in Classical Transaction Analysis, 1961 to 1971, that is certainly true, what you've said. However, this book is focusing very much on the relationship between therapists and clients. And reworking the transference in the service of the client, not necessarily bringing techniques in, like I said, to try to discounting matrix, the script theory, or those techniques you just talked about then. This is much more about the co-creative relationship between the therapist and the client being the way to healing, not the techniques. Right. So the emphasis really is on the relationship. Yes, not the analysis of the relationship, not the analysis of the relationship, but the co-creative relationship that occurs in the client's room. Sorry, the therapist's room. And that's a really important point. This is solely to do with the relationship and the co-creation between the two people, the therapist and the client, being the road to healing, not techniques, not theory, what happens in the room. So it sounds to me this book is a book for clinicians, for students. It sounds to me like to some extent it's modality free because it focuses on the relationship and how to build a relationship. That's really right, Roy. And I just want to take that step further, which is it isn't theory free in the terms of the co-creative transaction analyst will have that whole parent-adult child model, those theories of Eric Byrne, the evolution of transaction analysis through redecision therapy, through shift approach, integrative approaches. They're there. They're not saying that heritage isn't there. But what I am saying is that the primary focus is in the co-created relationship, not the theory. Yes. Yes, it's building the relational depth, isn't it? And building that trusting connection. Wonderful work. Wonderful world. And who wrote that book, Relational Death in the client-centred world? Well, you're putting me on the spot now. Yes. That would be Mick Cooper, wouldn't it? And Dave Moons. Yes. Yes. I love the term relational death. But this book is concentrating on the relationship, not the theory. It doesn't mean that the therapist hasn't got the theoretical heritage. But what is important is the co-created relationship above the theory. Yes. Yes. I think that's a really important point. Well, I think that's a great point. I really like it. Yeah. I think that's a good point. My passion. Yes. It is your passion, Bob. And anybody who's seen you teach would know that. So to end this review, if anyone's interested, the book is called Co-Creational TA, 2014, Keith Tudor and Graham Summers. And it's a book that, as Bob Cook said, would suit students of transactional analysis but students of counselling in general may be worth taking a peek at it from a different perspective and just seeing what relational psychotherapy means and relational depth means in another modality. So Bob Cook, as always, a pleasure. Thank you very much. Thank you very much, Roy.


So my beautiful people, I am back with another hour of the ring video and today guys I'm going to guide you through the 4 Balfour's quest. Well, I say quest, it's a certain thing you can do where you can actually obtain 3 keys. These keys will take you to hidden areas on the map. We can get exclusive loot from today. I'll guide you through it all. How's it going guys? My name is D.P. Jen, if you do enjoy the video, leave me a like. It really helps out and if you like what you see and want to see more, be sure to subscribe. Okay, so the 4 Balfour's area located west-hand side of the map, you can see right here guys. You've probably discovered this area already. You've probably discovered a couple of the keys needed to take you to these actual locations, but either way I'll guide people that don't know through this entire thing. So you need to come here guys, basically find this grace point left hand side of the map. Not hard to come to to be honest, not hard to find either. So once you get here guys, you need to make your way around to the very top and activate this grace point, which we're going to do now. So from this grace point guys, follow the path I'm taking. Now, these three locations you'll go to, one is in Knockdown City, one is at the very start of the game and the other one is within the dragon temple. Now these places all behold exclusive loot to them and I'll showcase that loot to you in a quick second because I've already done this but it don't matter. I can still guide you through it quite easily. Now coming up this hill there's going to be a giant, you may want to try and avoid it. Let's try and go through these legs. There we go.  But hey, so some of the rewards from this are actually quite cool. They're sold especially. Biatch, back for your legs again. Okay, so the three teleporters, there's one right here, there's one right there and the other one is right there. Now to actually activate these teleporters you need something called imbued keys, which you'll see on screen now. Now these, one of them you are granted for free. If you come to the very top of this place, the peak of this place guys, you'll see that there is a chest here. That's your first imbued key. You can use that key on any one of those three teleporters but there's another two of these imbued keys hidden across the world and I'll show you exactly where they are. But first let me showcase to you that's your things you get for this soul. From the very start, because I can't remember exactly which one takes you where, you'll see that in a quick second. But the actual boss, which is the first boss if you remember when you come into the game, you actually fight a boss called the grafted scorn. You actually go back to the start of the game to fight him. Now if you defeat him guys, you get two items. You get this ornamental straight sword and you also get this, the golden beast crush shield. Pretty cool. Now showcase what this does. Pretty nice people, there we go. Come with that double attack. Now I ain't dual wielding these guys. It's actually this weapons attack. It's special attack. It's weapon art. Pretty cool, pretty cool. And the shield itself doesn't do anything special as far as I'm aware but hey, have a quick look at it. There we go. Still cool looking, still cool looking. You also guys get a couple of talismans. You get this one right here, which is cool. Where is it? Where is it? Where is it? There it is right there, the mulled necklace. Raises robustness, immunity and focus. You also guys get the pearl drake talisman. Pretty cool. I've actually got a plus two of this. So yeah, it's not really efficient for me but hey, if you're collecting you want everything, you get this from the actual third spot. Simple as that guys. Okay so, one sword like I said is located from this chest. The other two are located, the first one. You need to go to the Reia Lucaria academy and make your way through the entire, well not the entire place but you will have to go through and take down the fox boss. I'll showcase to you exactly how you do this in a quick second. Firstly, let me showcase to you where that the seal is to break into or get into the Reia Lucaria academy. When you first go here guys, there will be a seal blocking your entrance. So if you come to this part of the map guys right here, you'll see there's this sleeping dragon right here. If you sneak behind him guys, you will get up and walk away but hey, the actual seal key, the glint stone seal key is located right behind him. Once you've got this, you can then go back to the seal and gain access to the main academy gate and from here guys, follow the path I take unscrew now to get the first of the two imbued keys. Okay so the second key is located guys, right here in the Celia under stair, right over in the town of sorcery. So here guys, what you first have to do is come here obviously. Once you get here you need to light three of these beacons. So follow where I go unscrew now guys and light the three of these beacons. Pretty simple, pretty straightforward. Okay so once you've lit these beacons guys, just follow the path I take unscrew now from the third one and you're getting access to this chest. Watch out, there will be a few enemies surrounding it but once you open the chest guys, you'll get that second imbued key and there you should have all three guys and now guys you can go back to the four bathrooms and access all three teleporters by using those keys and unscrew now guys, you'll see exactly where each one takes you, where you need to go in each and how you get this done. And really guys, it is as simple as that and there we have it guys. If you enjoyed the video, leaving a like really helps out, feel like what you see, want to see more out on ring, be sure to subscribe and hopefully my beauty for people. I will see you on that next one.


I'm Darren Marlar and this is your Daily Dose of Weird Dark News. The ability to regrow your own teeth could be just around the corner. The team of scientists led by a Japanese pharmaceutical startup are getting set to start human trials on a new drug that has successfully grown new teeth in animal test subjects. Torigumbio Pharma is slated to begin clinical trials in July of next year after it succeeded in growing new teeth in mice five years ago. Dr. Katsu Takahashi, a lead researcher on the project and head of the Dentistry and Oral Surgeon Department at the Medical Research Institute Kitano Hospital, says the idea of growing new teeth is every dentist's dream. Really, you could have fooled me. I thought their dream was just to get me to start flossing. The Florida man was feeding ducks and geese at a pond near his yard when suddenly all the birds flew away. Joseph Scaglione was confused, seeing no hawk in the area, but then he noticed an otter in the pond. He backed away toward the gate to his yard, but as he lifted his hand to shut it, the otter attacked. In a mauling that lasted several minutes, the man received 41 bites on his legs, arms and hands. After Scaglione got away, the otter attacked a dog that was walking with a family in the neighborhood. Nearby residents eventually managed to trap the otter under a recycling bin and a Palm Beach County Animal Care and Control Officer was then able to capture it. It tested positive for rabies and was euthanized, according to the Florida Department of Health. Fortunately, the dog will be okay, but Mr. Scaglione's euthanization is scheduled for tomorrow afternoon. Cher has been accused of hiring men to kidnap her son from a hotel where he was staying with his wife last year. Court documents filed by Elijah Blue Allman's wife, Mary Angela King, alleged that four men removed him from a New York hotel room on their anniversary in November 2022. The pair had reportedly been in a hotel attempting to save their marriage after filing for divorce in 2021. Cher was quoted as saying Mary Angela was a gypsy tramp and thief and that if she could turn back time, she wouldn't let the dark lady say, I got you, babe, to her son. And yes, I know how much of a stretch that punchline was. When Jan Erik Asvik's mother lost an earring in the garden of their home on Norway's Genfruland Island, he decided to pull out a metal detector and scour the yard for the missing jewelry. But when the device started beeping near a tree, he dug up two 1200-year-old Viking relics instead. Asvik had stumbled upon two bronze brooches, one large oval brooch and one smaller circular brooch. According to Live Science, the brooches were characteristic of the 9th century and were decorated with engravings of animals and other elaborate patterns. Because they also have traces of gold, archaeologists believe that the brooches were once gilded. The jewelry is so old, they believe it might have actually once belonged to Cher. Is that punchline better? I'm trying here, people. Residents in a New York town are being asked to keep an eye out for a wallaby that escaped from its owner's property. Yep, a kangaroo is loose in New York. Kelly Thornton, owner of Small Town Shelter in Sherman, said on the Shelter's Facebook page that the wallaby escaped from Charlie Source's property in the Mina area. Thornton said the runaway wallaby is one of three owned by Source. Multiple local residents reported seeing the wallaby in the Route 430 area this week. Wallabies and other marsupials are legal to keep as exotic pets in New York state. We do not suggest trying to grab the wallaby unless you know what you're doing, they said, they can cause serious damage with those back legs. I'd also recommend being sure you have headgear and boxing gloves on at the time. Here is a horrifying story.  Pike County Sheriff Russell Thomas said the 17-year-old victim was found dead outside the family home Tuesday afternoon. Deputies said the unnamed teen's father said he'd been missing since Monday, but they had not reported it. Thomas said he interviewed several people, but when they spoke with the victim's 14-year-old brother, the teen confessed to shooting him from the porch. The sheriff said the teen told them his brother staggered out of the house before falling to the bottom of the back steps. He said the young suspect told them that he dragged his brother about 60 yards to the back of the property. Thomas said no one else was home when this happened. He said their father returned home a few hours later and questioned where the victim was. According to the sheriff, the school had the father pick up his 14-year-old son early the next day because he was acting upset over his brother's disappearance. They searched for him when they returned home and that's when the father found his son's body out back and called law enforcement. Thomas said they learned the 14-year-old confided to a friend at school that he had killed his brother. The news release said he then asked his friend to help him murder the rest of his family and help him bury their bodies. The friend also stated the 14-year-old had a hit list in his book bag of family members he wanted to kill and made statements about wanting to shoot up the school. The sheriff said they searched his bag and found that list. The suspect was taken into custody and charged with murder. October is the anniversary of Weird Darkness and we celebrate by raising funds through our Overcoming the Darkness campaign to help people who suffer from depression. Jamie gave to the Overcoming the Darkness campaign a few years ago and when she did she left a message saying, I live in the smallest of small towns and Weird Darkness makes me smile, sometimes uncontrollably. I suffered from depression for the first time after my father passed away in 2013. It was awful. I didn't understand it first when I was feeling it's debilitating. Also, my child suffers from extreme depression and I didn't know how to help. It makes you feel useless. Well, of course, he loves your podcast too since I shared it with him. Thanks for all you do. To other listeners, come on people, more donations. We should be able to surpass the goal. Donate, donate, donate. Well, I can't really add anything to what Jamie just said except to say that you can donate, donate, donate by visiting WeirdDarkness.com slash Overcoming. That's WeirdDarkness.com slash Overcoming. After launching a generative AI tool for corporate employees in August, Walmart is bringing the technology to its customers. During a demo with TechCrunch, a company spokesperson outlined how the retail giant is experimenting with generative AI to help shoppers in all stages of the shopping experience, from the search and discovery phase to making a purchase. Three features coming down the pipeline include a shopping assistant, generative AI-powered search and an interior design feature. If the AI is really smart, it'll act as a door greeter too and suggest you shop somewhere other than Walmart. And that shopping in your pajamas is tacky. A Missouri woman mistakenly added to the Social Security Administration's Master Death List in 2007 has been trying to prove she is very much alive for the past 16 years. Madeline Michelle Carthen, now 52 years old, first found out about the accounting error when she was a business technology student applying for financial aid to attend an intern exchange program at Ghana. At first she laughed, but her questions began to stack up quickly. I said, what do you mean? I'm sitting right here. I've been at school for over a year and a half. How am I dead? School officials told Carthen she had to withdraw from her program until the matter was sorted out and advised her to contact the Social Security Administration and the SSA recognized the error and provided her with a death erroneous letter to show creditors. But Carthen's problems only started to snowball from there. Once a person is added to the Master Death List, groups like the IRS, Medicare and banks are notified. This makes getting a new job turn into a game of whack-a-mole. Sometimes I get a job and then within so many months there's going to be a problem, Carthen said. So it's like I can get it and then it's yanked back from me, but I don't know when it's going to be yanked back. Being declared dead has cost Carthen jobs after HR couldn't add her to payroll, vehicles that were repossessed and housing.  Ironically, being dead all these years has not once stopped her from being able to vote in a presidential election. Meanwhile, someone who truly was dead was pretended not to be. Doctors at an Ohio hospital propped up a dead patient in a fake, alive pose before she was seen by her family, even though she had died during a routine surgery two hours earlier, according to the lawsuit. The patient, an unidentified 65-year-old woman, was in good health when she walked into Adina Health System in Chillicothe for what should have been a routine heart catheterization. The woman's family has claimed discrepancies between hospital records and the death certificate regarding her time of death. While the medical records indicated a 1 p.m. time of death, the woman's death certificate says 305 p.m., which is the time her family was brought into the room and, quote, urged to take her off life support, unquote. Her family is demanding the truth behind what happened leading up to her death and why she had been propped up to look fake, alive for her family when she had been declared dead two hours before. The woman received surgery from Dr. Jared Betts, a cardiologist who has faced previous questions over his credentials. Betts has performed at least three trans-catheter aortic valve replacement procedures despite not being qualified to perform the specialized operation the outlet previously reported in May. Why is this guy still employed there? Betts allegedly cut into an artery during this procedure and while he thought he'd gotten the situation under control, the woman was still bleeding later in the ICU. The surgery was taken over by a second cardiologist, Dr. Atik Reham. The patient later died under his care, medical records show. At least 31 people have come forward now accusing Betts of faking his credentials. An independent autopsy was requested by the family because they found out that Ben Trotter, the Ross County Coroner, is also an employee of Adina. Adina Health System has, not surprisingly, not commented on the matter. Except maybe to say, I have no Adina what went wrong. From the dawn of civilization, people with no formal education have been dispensing medical advice. Whether it's Dr. Laura, who's probably the last person you'd want to perform open-heart surgery, to Dr. Phil, who couldn't even put a band-aid on a paper cut. There's big cash to be made by adding that abbreviation to the beginning of your moniker. So how can people at home become doctors like Dr. Jay and Dr. Dre? Well, there are millions of different ways. For example, Dr. John Gray, who wrote all those men are from Mars books, got his degree over the internet. And funny man Bill Cosby once received an honorary PhD from a prestigious university to become Dr. William H. Cosby Jr.  So what's everybody waiting for?  You could be the next Dr. Henry Kissinger or Dr. Ruth. Right after I read my kids a Dr. Seuss book. A Texas family says they were terrorized by a very large pig and it kept coming back. Kingsland resident Wendy Goldstein said a black and white-spotted pig attacked her parents and daughter last Monday. The animal, which Goldstein estimated weighed about 300 pounds, had somehow entered their house. My grandma was being attacked by a random pig, a child said in a 911 call during the incident. Now my grandpa is being attacked.  My mom tried to lay on top of him to crunch him down until the cops got here to get him, but he overpowered her and got on top of her, Goldstein explained. He had her flattened like an accordion. Goldstein says the owner of the pig approached her family while searching for the animal. She claimed the pig's owner threatened to shoot them if they harmed his pig. What's he expected us to do? To sit there and let his pig maul us? She said. The pig was shot with a non-lethal pepper ball by animal control officials on Monday, but it ran away and did approach the family again Tuesday. I'm standing inside my parents' house with a hammer and knife trying to defend myself and defend my family at any cost. My whole family is scared. They feel like they're prisoners in their own home, Goldstein said. Model County Sheriff's Office is actively investigating the incident, so if a dog were to attack this family, animal control would immediately have that thing put down, but because it's a pig, it just gets pepper sprayed and is allowed to come back and do it all over again the next day. There is an easy solution to this problem. Slaughter the pig, give the processed meat to the family who was attacked as reparations, the family is no longer terrorized, the pig owner will know to control his livestock more responsibly in the future, and finally, bacon. On a hill in Shelby County in the heart of Tennessee comes the taste of prairie home country sausage. We take pride in what we do and the quality shines through as we bring that country flavor home to you.  Then we cut off all their body parts which doesn't sound appealing. It's a pretty decent job you know if you don't mind the squealing. Prairie home sausage brings the prairie home to you.  The only thing more spooky than Halloween in October is Spooky Empire. Join me October 27th through the 29th in Orlando, Florida to meet horror celebrities like a nightmare on Elm Street's Freddie Krueger Robert England and co-star Heather Langenkamp. Hellraiser's Doug Pinhead Bradley will be there with other casts from the film. Candyman's Tony Todd, an American werewolf in London's David Motton, the Crypt Keeper John Kassier, Rose McGowan from Charmed in Death Proof, Kane Hodder from the Friday the 13th films, Harry Hamlin from Clash of the Titans and so many more including Cassandra Peterson, better known as Elvira, Mistress of the Dark. Get autographs, take photos and hear Q&A sessions with your favorite horror celebs. They've even asked me to moderate a few celebrity Q&As too. You'll also find horror-themed workshops like making movie props and makeup, horror writing and more. Get all the details, see a full list of the celebrities and grab your tickets at SpookyEmpire.com. That's SpookyEmpire.com and I hope to see you there October 27th through the 29th in Orlando, Florida. An Australian man reportedly made his girlfriend believe that he'd been kidnapped so he could spend New Year's Eve with his mistress. 35-year-old Paul Ayera narrowly avoided jail time after he admitted before a judge that he had concocted an elaborate lie to hide his infidelity from his girlfriend, wasting tens of thousands of taxpayer dollars in the process. On December 31st of last year, the Australian man from Wollongong called his girlfriend to tell her that he was meeting his finance guy, when in reality he was going to see his mistress. At one point, in order to buy themselves some time, the couple messaged Ayera's girlfriend again this time pretending to be a kidnapper who promised to deliver him safe and sound the next day. Thank you for sending Paul to me. Now a payback is a blank. Bye-bye. We will keep him with us until the morning when he gives us his bike, we call it Square. The one thing Paul and his mistress apparently didn't count on was his girlfriend's panic after reading the message. Fearing for his life, the woman immediately notified the police to report his kidnapping and a strike force was immediately established to locate and rescue the victim. So while Paul Ayera and his mistress were spending some quality time together, the Lake Illawarra Police District was spending 200 hours of police work, equivalent to more than $25,000 of taxpayer money on trying to find him. On the morning of January 1st, during a high-risk vehicle stop, the police pulled over Ayera's van and found him safe and sound in the company of his mistress. He then tried to lie to the officers, saying that he had been indeed kidnapped by some Middle Eastern fellows who eventually let him go. But his story had all kinds of inconsistencies and 12 days later, he was arrested and charged with making a false accusation with the intent to subject another person to investigation. Paul Ayera faced up to seven years behind bars for his despicable deception, but after admitting to making up the story of his kidnapping to hide his infidelity from his girlfriend in court of law, he dodged a bullet and was ordered to pay $16,218.11 local money to the New South Wales government in compensation for the work done by police. Ayera was also sentenced to 350 hours of community service. Magistrate Michael Ong described the accused actions as abhorrent, adding that he had seriously considered giving him jail time. So you don't expect the girlfriend to do something after getting a kidnapping text? You're surprised when she calls the cops seriously? And another question, the supposed kidnapping ransom was for Paul to give the kidnappers his bike? That's it? If that's as much as even Paul thinks that he's worth in a kidnapping situation, his ex-girlfriend is so much better now without him.  Either that or it is a really nice bike. The Washington State Patrol stopped the driver in the high-occupancy vehicle lanes of a highway when the sole passenger was found to be a Halloween mask. Trooper Rick Johnson, public information officer for the Washington State Patrol District, said the vehicle was pulled over in the northbound HOV lanes of State Road 167 near State Road 18 in the Auburn area. Johnson shared a photo of the driver's only passenger, a Halloween mask affixed to the passenger seat along with a vest and scarf. Scary but still doesn't count, Johnson wrote. The driver was cited for an HOV violation. But he did come away with honorable mention at the DMV's annual costume contest. A moose that was found wandering down the tracks of the Stockholm subway and causing havoc was shot dead by a wildlife ranger on Wednesday after the service on the southern part of a busy line had to be suspended. The moose somehow managed to enter the enclosure that surrounds the tracks and roamed the southwestern part of the so-called red line with above-ground stations. At 1.7 stations had to be closed. Swedish news agency TT reports the moose wandered for several hours and the number of stations that were shut down gradually increased. It wouldn't have been so bad, but the moose kept stopping at each station asking people if they wanted to see him pull a rabbit out of a hat. And I'll end tonight's Weird Dark News report with a scary one. For the past five months, the people of Pravia, a town in Spain's austereous region have been under constant siege from flocks of crows who mindlessly attack their homes and vehicles. The town of Pravia has no less than six crows proudly displayed on its historic coat of arms, so it's safe to say that people here have been living in harmony with the birds for centuries. That's not the case anymore, as large flocks of black birds are now attacking the homes and vehicles of human residents for some unknown reason. The people of Pravia started reporting groups of birds mindlessly flying into their windows repeatedly until the impact caused them to bleed in May of this year and things have been getting worse ever since. No one knows exactly why the crows are targeting people's homes and vehicles, but they are relentless in their attacks, pecking at and flying into windows until they start to bleed. It looks like something out of an Alfred Hitchcock movie, a Pravia woman told local reporters. Today, 17 of them were grouped together in front of the same window and nothing was going to scare them away. The neighbor had to paint his car completely because of the amount of scratches he had and the pieces of paint that were missing, another man said. When the attacks first began to occur around Pravia, many people claimed that it did something to do with the crows being very protective of their young and keeping humans away through their behavior. But that period has long passed, but the birds remained just as aggressive, if not more so. Now some are saying that the lack of food and the constant destruction of the crows' natural habitat have pushed the birds to this extreme behavior. In the last few months, the people of Pravia have reported flocks of crows attacking homes and vehicles, often throwing themselves at windows in order to break them. They mostly hurt themselves in the process, but they are relentless. Blood-stained windows across the Spanish town stand as evidence of the crows' relentlessness, but no one seems to have a solution to the problem. The Pravia local council and mayor have received hundreds of complaints about the crows' behavior, but they are powerless to stop them, despite several attempts. They tried catching them with traps, staring them away with balloons, and now they want to use nets to keep them in bay. It is very peculiar, it has to have some explanation because they crash very violently, Pravia Mayor David Alvarez said, admitting that his administration cannot currently keep the birds at bay. Find the links to all of the stories I've covered in this episode in the show notes. If I'm more strange, disturbing, and sometimes humorous news, then the weird news and blog at WeirdDarkness.com


plus button sales form and so so now we don't have those fields so unless you're using them it's sometimes useful not to have them in there because then you have a less cluttered field so you have some customization on what's going to show up on your invoice closing that back hitting the cog button again going back into our account settings back into the sales area so that was and that was that and then we have the tags here lets you add tags to track sales so this is a another kind of custom way they can can add another layer of tracking we might look at tags in and of themselves but they're kind of a specialty usage type of thing we've got the products and services show products and service column on the sales form so that's on by default so it's going to show the products and service items and by default we'll keep that if you want the number it can show the number here but we'll keep it off by default turn on price rules so this is kind of a new thing that's in the beta at this point time price rules allow you to provide discounts for specific products to certain customers for a specific amount of time so it gives you you know more optionality or customization over that process track quantity and price rate so that's on by default adds quantity and rate fields to sales forms we have that on by default we'll keep that on here our track inventory quantity on hand so obvious if we have the tracking of inventory noting that with inventory there's multiple methods you can use to track it you you might try to stay in a cashed base system and basically just expense the the cost to get sold when you buy the inventory which could only be used if you don't have that much inventory you have a just in time kind of system you're buying inventory for a sale that you're going to make quite quickly you can use a periodic inventory system tracking the inventory outside of QuickBooks or you can turn on inventory tracking which will track not only the dollar amount of inventory but also the unit the units of inventory that's what we're going to practice on here that's one of the differences between the levels of QuickBooks software by the way as well that's why we had to level up to the the plus in essence here that we're using I believe the the main one so that we can track have the capacity to track inventory


So, module 12, quotient spaces, the idea of a quotient map and the construction, open the floodgates of geometric topology to us. We can now study a large class of very interesting geometric objects via topology. Before proceeding with the topology, let me make it clear that all of you understand the meaning of a surjective map, a surjective function from one set to another set and what it means in terms of decomposition of x or equivalence classes, there are three different pictures of this which imply the same thing, same concept. Look at this diagram, the first portion here represents a surjective function, a onto function from one set x to another set y. When you have this, you can take f inverse of y as y ranges over capital Y that will give you disjoint union of x as I have written down here, f inverse of y means all points of x which come to a, the point y here, okay, so by the very definition of f they are disjoint and the entire x is a union of this thing. Because f is surjective, each f inverse of y will be what? Non-empty, therefore what we get is a non-empty disjoint decomposition of x, okay. So such a thing is called a decomposition or a partition. So what we have got here is a surjective function into another set implies a partition of x or a decomposition of x. Now suppose you have a partition of x, okay, then you can define an equivalence relation on the set x, namely in which the partition members will become equivalence classes, namely x is equivalent to y if and only if it is in the same subset. In particular here, what will be the relation? x1 will be x, it will be equivalent to x2 if and only if fx1 is equal to fx2. So a partition giving rise to a relation or a function directly giving a relation, this picture you can get from here directly or from directly from here. Finally, suppose you have an equivalence relation like this on x, look at the equivalence classes that is a set call that set as y, then what should be the function from x to y, take any x and take its equivalence class. So from equivalence relation, you can come to a surjective function. If you follow this procedure again, this cycle, what you get is whatever you have started with, namely suppose you have an equivalence relation and then you have defined f to be x going to the equivalence class of x, then what will be the disjoint union here, there will be equivalence classes and what is the equivalence relation induced by that, the same equivalence relation because these are the equivalence class correspond to this relation. So this is what I am saying, given a surjective function on a set is equivalent to giving a partition by f inverse of y and then giving a partition say x is disjoint union of ai, you can define x is equal to x2 if and only if both x1 and x2 are the same subset ai, so this is an equivalence relation. Finally, giving an equivalence relation, you can take y to be the set of equivalence classes and define f as f of x equal to the equivalence class of x. So verify that if you run the cycle of arguments again, what you get is wherever you started from, you come back to the same point, same concept. So when you have an equivalence relation or a surjective function or a decomposition, even if one of them is given, you should have all the three in your mind so that you can use them whichever one, whichever description you want you can use. Now let us come to the topology. Suppose x tau is a topological space, x is a set and tau is a topological space and q is a surjective function from x to y where y is any set. We want to make y into a topological space such that q becomes continuous and this we want to do in an optimum way. How many open sets can we put as much as possible? That is the whole idea. So I define tau prime which is going to be a topology on y as follows. Take a subset of y. If q inverse of that subset is inside tau, then put it here. That means a subset of b belongs to tau prime if filled only if q inverse of b belongs to tau. This tau prime will be automatically a topology on y. Very easy to check. Namely, q inverse of intersection of two sets b1 and b2 is nothing but q inverse of b1 intersection q inverse of b2. So since tau is a topology, that intersection belongs to tau prime.  That will be inside tau because each bi is there. q inverse of bi is there. Therefore, union of bi should be inside. So tau prime is a topology. Automatically q is continuous. Why? Because take a set here in tau prime, its inverse image by very definition is in tau. So this topology does satisfy that q is continuous. This topology is called the quotient topology and the space y with this topology is a quotient space. The map q will be called quotient map. Some people call it identification space because surjective map, it may not be injective, identifies a certain number of points which are taken to the same point in y. It is also called decomposition space using the second description that we have there. Every surjective function gives you a decomposition of the set or partition of the set. So those names are also used by some authors. Often quotient map from x to y and the quotient topology are described as one of the four with two statements. So you should know various different definitions here. They are all, they could all be taken as definition of quotient space. The first one is u contained inside y is open if and only if q inverse u is open in x. The second condition is by taking a De Morgan law f contained inside y is closed if and only if q inverse infinity is closed in x. If and only if is important only if follows by q continuity, continuity of q. If this is there, we will tell you that everything that whatever satisfies as important. Therefore, I get a third one which describes the quotient topology namely this theorem which says that quotient topology on y is the largest topology with respect to which q is continuous. If suppose some lambda is a topology on y such that q is continuous with respect to that topology. X topology hasn't changed, topology on x hasn't changed. Then I want to say that every element of lambda, every open subset in this topology is in the quotient topology that we have defined namely the top prime. How? Take a certain say lambda, its inverse image is open in x because q is continuous but that is enough to put this one inside top prime. Therefore, lambda is contained inside top prime. Therefore, top prime is the largest topology. One more criteria. So, this will be the fourth one which is called in some parlour as the universal property of the quotient map. So, let us go through this carefully. You start with the quotient map. Now take any function, any continuous function from x to z which as a function factors down from y to z. Factoring down from y to z just means that there is an f total here such that you start with q and then composite trace, f total composite q is equal to f. It is the same thing as saying that whenever f takes two points to the same point here, sorry, whenever q takes two points of x to same point here, f must take the same points, same point to the same point here, these two points, same point here. f of x1 equal to f of x2, whenever q of x1 equal to q of x2, then you get a map like this, function like this. This is a satiatic fact. But what this theorem says is that this f total is automatically continuous. That is if you need continuous map, no matter what f is, what that is. Once they satisfy the satiatic property correctly to get a map, get a function like this, continuity of f will imply continuity of f.  Here what this theorem says is that f is continuous and f hat is continuous. So, this is the so-called universal property of q because it is true for all f and all such. And there is no other function, which is continuous like this, we satisfy this one. Such maps are called quotient maps. You can take this as definition. Let us go through this one, why this is so. Securitically, at condition, we will tell you there is an f period. By why f total is continuous is what you have to show. The continuity of f total follows, start with an open subset in set. Its inverse image must be open here. But what is the condition for a set to be open here? Its inverse image under q must be open in x. So, I have to take the open subset u here, f truly inverse then q inverse. So, that must be open in x.  So, if f is continuous, f inverse of q is open here. So, we are done. The above theorem can also be taken as a definition of the quotient topology. If we have given a topology tau twiddle on y, I have some other topology y, and it satisfies this property, then tau twiddle will have to be tau prime. There is no other choice. That is the meaning of this. So, I once again repeat. So, such a property is called universal property. Here is an example, quotient maps occur at plenty in mathematics. For instance, take a subjective open map. It will be automatically a quotient map. Subjective, open and continuous. Automatically it is a quotient map. Why? Because take an open subset in y, take any subset in y. It is inverse image. I want to show its suppose I want to show inverse image is open.  Therefore, u is open. So, this is the only point. f is continuous.  So, openness gives you that it is the quotient map also. Exactly same way by taking De Morgan law, we have a closed map. Closed, continuous and surjection that is also quotient. You may be under the impression that these are the only cases. No. Of course, quotient maps are much more general than open maps or closed maps. But open maps are plenty again. Namely all coordinate projections from any product space into any factor x cross y to x, x cross y to o, y, r2, r3, r4 to any of these coordinate spaces, they are all open maps, projection maps. But be careful projection maps are not closed. You may be knowing that the standard projection x y to x or x y to y inside r2 to r is not a closed map. Just look at the image of the hyperbola x y equal to 1. By the very defining x y equal to 1 is a closed set inside r2. Its image inside the x axis, what is it? It is all the real numbers minus to 0. That is not a closed set. So, I will give you some examples of maps which are quotient maps, but they are neither open nor closed. So, I have just hooked up this example. It is not very standard. It is not occurring naturally. There are natural things also. Here just for simplicity, in one single example, I will show you a quotient map is neither open nor closed. So, what I do? I take the whole of real line or some large interval, okay. So, I will just take the whole of real line. Then look at the open interval 0, 1. All the points in 0, 1, you identify to a single point. 0 less than t less than 1, all of them will be identified to a single point. Similarly, look at the closed interval 2, 3. All the points in between, namely 2 and 3 included identify it to another single point. Different points, another single point. So, these two are different points, not the same point. So, these are all relation. Rest of the points are not identified with any other thing. Okay. Look at the space y obtained and let q from r to y be the resulting quotient map. So, y is a quotient space. Then I want to say that its map q is neither open nor closed. Okay. Why it is not open? The open interval 2, 3, the image of that q of 2, 3 is equal to but single point, namely q of closed interval 2, 3. The closed interval 2, 3 and open interval 2, 3 are the same image point. That point is not an open set. Why? Because its inverse image is closed interval 2, 3, which is not open inside r. Okay. So, therefore, q of open interval 2, 3 is not open. That means q is not an open mapping. Okay. It is not a closed mapping. You come to the first part. Take any point in 0, 1, any single point. It is a closed set in r. But the image which is the same thing as image of open interval 0, 1, one single point. Open interval 0, 1, one single point, q of that is same thing as q of 1 by 2. Right? That point is not a closed point because its inverse image is open interval 0, 1, which is not a closed subset of r. So, this map is neither closed nor open. So, here is a picturesque representation of what I have done. This is the open interval 0 to 1 and this is 2 to 3, the closed interval. This entire closed interval is going to a single point. Here the open interval is coming to this red point. But the end points of this interval, they have come just nearer to that one. Why is what they mean here? If you take the closure of this red point in the quotient topology, that will contain both the end points. Okay. So, in particular the red point, singleton red point is not a closed set. Okay.  If you open the subset, its closure is this entire 0, 1, 0 and 1. Okay. In particular, the quotient space is not a t 1 space because this image of 0 here, image of 1 here cannot be separated by open sets. Image of this open interval, this red point, if you take any neighborhood of the red point, it will contain both of them. So, it is not t 1 space. The singleton 0 is not open is enough to say that it is not t 1 space. Okay. Finally, here is an example. While discussing loops, we have used the fact that the space obtained by identifying the end points of the closed interval 0, 1 is homeomorphic to s 1. So, let us write down a neat proof of this one. By taking the exponential function on the interval 0, 1, q theta equal to a raise to 2 pi i theta. Then what happens? q of 0 and q of 1 go to the same point and no other point is identified with any different point. In other words, q is injective on the open interval 0, 1. Therefore, to look at the inverse image of a point in q, only the inverse image of 1 contains two distinct points. All other things are singletons. So, this is the same thing as saying that the identification set as a set is it is s 1. 0, 1, 0 and 1 are in the same equivalence class and rest of them are in different equivalence class. That is the meaning of that what we have done by identifying 0 and 1 in the interval closed interval 0, 1. So, set theoretically we are fine. So, what we have to verify is the subspace topology of s 1 coming from r 2 is the quotient topology on s 1 coming from i via this map q. This is what we have to verify. In other words, q is a continuous function is fine because we know that exponential function is continuous. It is surjectively also fine. What we want to say is q itself is a quotient map. If we know q is a quotient map then our justification, our claim that identifying 0 and 1 inside the closed interval 0, 1 to a single point whatever space you get is only 1 to s 1. So, what we have observed is now we have to verify that this exponential function is a quotient map. So, we know that this can be done if we verify that this is a closed map because we have observed that closed maps are quotient maps. So, that can be done very easily. Take any subset k of i which is closed. k itself is a bounded set because i is bounded. Bounded then goes subset of of a Euclidean space in r. It is a compact space. k being compact, the image of k under continuous function q, 2k must be compact. A compact subset of a metric space s 1, standard topology. So, it must be closed subset. So, fk is closed, qk is closed. So, closed set, closed set means the function q is closed and that is the end of this argument here. So, we will study more of quotient spaces next time. Thank you.