The sea has always been the lifeline for India, surrounded by the soothing blues from three sides. The world's largest peninsula nation houses a huge wealth of maritime culture handed down by generations. And this has been true since the beginning of civilization. But sadly insofar as India's maritime heritage is concerned, our ancestors left little to no written records of even the chronology of our rich maritime past. Expertise and navigation meant increased efficiency in overseas trade. The first trade was with the Sumerians, the Egyptians and with Crete and later it extended itself beyond the Roman Empire into Europe and Africa. Incense, spices, textiles and precious stones reached the Arab and Egyptian ports and from there on travelled deep inside European empires. Our systems of faith became our first global cultural ambassadors. Ashoka, one of the most illustrious emperors from India's early history, a keen follower of Buddhism, he wanted to share Buddha's message of peace across the planet. Ashoka ended up becoming one of the biggest global emissaries of Buddhism, which at that time was largely confined to India. Some glimpses of this ancient past can still be spotted in dominantly maritime societies scattered among the coastal communities of India. They are the modern-day upholders of Indian expertise in cost-effective but top-quality shipbuilding, a skill set that has been recognised worldwide. When it comes to warship building, the story was almost the same as for merchant shipbuilding because we missed out on the industrial revolution. Our ancestors had determined to make the Indian navy a builder's navy rather than a buyer's navy. India's expertise in warship building also extends to submarines, one of the most critical determining factors of modern naval warfare. Our technological acumen in the area is comparable to the best in the world, but this was not always the case. This idea of navy as we know it today didn't exist till the coming of the Europeans. In the folk laws of Kerala, the first European colonists are often referred to as the Portuguese pirates. They posed a threat to India's trading groups. Local sea commanders of Kerala, particularly four generations of Murakars, were naval experts who specialised in stealth attacks. They fought the Portuguese and resisted their advance. In 18th century India, Kannuji Angre, a Maratha fleet admiral of repute, acquired an almost mythical status as a Maratha navy chief. He was labelled a pirate by his European enemies because he fought against British, Dutch and Portuguese naval interests. Angre remained undefeated till his death. The Europeans ultimately won over, thereby starting four centuries of authority-based control of the seas. One could make a case that it was an inadequate appreciation of sea power that led to the colonisation of India. And there is also I think an interesting technological dimension which is that India had demonstrated the highest levels of shipbuilding acumen at that time. Indian ships were considered to be the best in the world because of the craftsmanship and the fact that they could out sail any of the European ships that were being built at that time. The Bombay Dry dock, the first modern dry dock in Asia, was built by Lovji and his brother Surabji in 1750. Lothal in present day Gujarat was probably the world's first tidal dock, at least the first that we know of. The remains of the dock reveal that the Harappans were well aware of the principles of hydrology. The shipbuilding and repair yards in Mumbai are carrying forward a tradition of excellence that started ages back with the shipbuilders from Surat. All of this trade happens under the watchful eyes of our competent and confident navy. It not only remains defensive, it also ensures that it always creates and maintains bridges of friendship across the seas. We have created the largest number of friends across the seas on all continents through the sea route. For centuries we have reached out to the world with a message of peace and freedom and the world has come to us with the same expectations. The Indian way forward has always been to develop a spirit of partnership and collaboration. We still move ahead with the same purpose, riding the waves of mutual progress to become the true wave riders in time.


Thank you very much. My name is Rachel Lammie. I work in member and community outreach at Crossref and I'm going to talk today about metadata which we know and love and the fact that the discoverability and richer metadata, the future of that is in the hands of all of us really. If you don't know Crossref, we're a not-for-profit membership organisation predominantly for publishers. We work with libraries as well and it's to try to make content easy to find, cite, link and assess through the assignment of metadata and persistent identifiers for content. In numbers, we've got nearly over 5,500 publisher members, metadata for tens of millions of DOIs. It's a great resource but it could be better and that's what this is gearing up to do. Yes, we collect bibliographic data but we also collect more than that. It's not just enough information to be able to specifically identify an article, a book, conference proceedings. We also collect nondescriptive information that facilitates usage. What I mean by that is that publishers can give us license information. Collecting information on how the piece of content can be reused. Author identifiers, having publishers collect and deposit orchid IDs that identify the author, the license that the paper has been published under to enable reuse for things like text mining and also things like who funded the research, what grant number, clinical trial information so we can collect a clinical trial number associated with lots of different papers at all centre around that clinical trial so that they can all be linked together and discovered in the metadata. Also information on things like corrections and retractions, archiving information. Why should anybody care about a campaign for richer metadata? That's what I'm here to persuade you today. Because at Crossref we were keen to get publishers to deposit the best and the richest metadata that we can but we realised it's bigger than us so we went out and talked to people within our community and they were saying it's layers upon layers. It's not something that Crossref can drive by themselves because though we work closely with publishers there are bigger benefits that are transferred to the wider community by publishers doing this and we need their help too because there are problems in the existing system. You know people are saying well I don't get asked for my orchid very much and then when I do I don't actually see it being used in the benefits of less data entry and author disambiguation being realised. A lot of our members are very small international publishers. What we need to do is we need to do a couple of things. We need to provide better tools for them to provide metadata. Things like OJS are great and we're working with PKP but we need to really communicate to them that better metadata increases their visibility so that it can sit and be discovered equally as well as that from our biggest publisher members. So that's great but where do we go from here? I put a slide into the pad actually that was quite good. So we want to recognise that this is our kind of modus operandi but metadata is the engine that drives discoverability use and re-use of scholarly communications. But it could be, you know some of the talks in the last few days have really covered the fact that it could be better. So we're working on a campaign in recognition that it's not just something that sits with one organisation, it sits with us, it sits with orchid, it sits with other DOI providers and also with libraries, institutions and people in the wider research ecosystem. So Metadata 2020 is a campaign that we're in the process of launching and the aim of that is to educate and motivate publishers to supply richer metadata and to recognise the people who are doing a really good job of it already. It's nice to say that but we need practical steps, we need things to do. So we want to encourage publishers to make a public commitment to do this but for me the really important thing is the second part, giving publishers the tools that they need to see what metadata they're providing and how they can and tools to be able to do that better. This sounds weird but not a lot of publishers don't know what metadata they're giving Crossref because it's at a remove from their processes so we need to make it so that we can educate and equip and make publishers aware in a really simple format. This is what you're giving Crossref. If you're collecting orchid IDs are you actually depositing them with us? Are you depositing DOIs for data?  So we're going to provide participation reports really simple ways for publishers to see what they're giving us how much they're giving us and helping them to do that better. So as with all things we've got a working group but I wanted just to show the fact that this is we're trying to represent a cross section of the community who access and use metadata and are in positions to actually to actually talk to a broad range of stakeholders about that. The working group I've met I was hoping to have we've got a website in development that's about to go up I don't have it just yet and we've got a consultant who's working with the group to really start to kick this off in the next couple of months. It will be the 40th anniversary of the World Wide Web in 2020 so we thought that was a good thing to aim for even if that's just step one. We wanted the opportunity just to get up and talk about it because we need input from the whole community on this and support. Please watch out for more information and also give us feedback. We'd love more people to be involved and to support what we're doing here because it could be incredibly valuable to everyone. Thank you.


Hello and welcome to the session. In this session we will discuss coordinate geometry. We know that position of any object lined in a plane can be represented with the help of two perpendicular lines. This simple idea has far reaching consequences and has given rise to a very important branch of mathematics which is known as coordinate geometry. Now we shall discuss some basic concepts of coordinate geometry. First let's see what is Cartesian system. Cartesian system is basically the system used for describing the position of a point in a plane. When we need to locate the position of an object or a point in a plane, we require two perpendicular lines, one of them is horizontal line and the other is the vertical line. That is we consider these two lines xx dash and yy dash, xx dash is the horizontal line, yy dash as you can see is the vertical line and these two lines are perpendicular to each other. Then we have the plane is called the Cartesian or the coordinate plane and the two perpendicular lines that we take on the plane that is xx dash and yy dash these are called the coordinate axis. This horizontal line xx dash is called the x axis and the vertical line yy dash is called the y axis. Then we have the point of intersection of the axis is called the origin that is this point is the origin and it is represented by the letter O. The coordinate axis divide the plane into four parts called quadrants. The coordinate axis xx dash and yy dash divide this plane into four parts. This is the first quadrant, this is the second quadrant, this is the third quadrant and this is the fourth quadrant. And as you know that quadrant means one fourth part. So the plane consists of the axis and quadrants. We call this plane the coordinate plane or the Cartesian plane or we can also say the xy plane. Now next we see how we write the coordinates of a point. The distance of a point from the y axis is called x coordinate or we also can say fc sub that is it is basically the perpendicular distance of the point from the y axis measured along the x axis. Then distance of a point from x axis is called its y coordinate or we can call it ordinate. It is the perpendicular distance of the point from the x axis measured along the y axis. And when we state the coordinates of a point in the coordinate plane the x coordinate comes first and the y coordinate comes after the x coordinate and they are put in the brackets in this way. We have the positive numbers lie on the direction ox and oy and the negative numbers lie in the directions oy dash and ox dash. That is we say that ox is the positive direction of x axis then oy is the positive direction of y axis. Ox dash is the negative direction of x axis and oy dash is the negative direction of y axis. Next we have coordinates of a point on the x axis is of the form x0 that is in this case the y coordinate is 0 and then coordinates of a point on y axis is of the form 0y that is the x coordinate would be 0 and the coordinates of the origin that is the point o is given by 00 that is this point is 00. That is we say that the origin o has zero distance from both the axis. We have taken xx dash and yy dash the two number lines and we have marked numbers on it the distances are taken from a fixed point and they are marked in equal units positively in one direction and negatively in the other direction and we mark the distances from the fixed point which is the origin. Let's consider this point a in the plane and now we shall find out the coordinates of this point a. As you can see point a is at a distance of positive two units from the y axis and at a distance of positive one unit from the x axis so we have the x coordinate would be its distance from the y axis that is positive two units and the y coordinate would be its distance from the x axis that is one unit so 21 is the coordinate of the point a. The coordinates of a point are of the form plus plus in the first quadrant that is x coordinate would be positive y coordinate would also be positive then the second coordinate it is of the form minus plus that is x coordinate is negative and the y coordinate is positive in the third quadrant it is of the form minus minus that is both the x and the y coordinates are negative fourth quadrant it is of the form plus minus which says x coordinate is positive and y coordinate is negative. Now we shall discuss plotting the point in the plane if its coordinates are given. For this what we do is first we draw the coordinate axis that is x x dash and y y dash and then we choose a unit such that 1 centimeter represents one unit on both the axis. So we have drawn the coordinate axis x x dash and y y dash and we have taken 1 centimeter equal to 1 unit on both the x axis and y axis. Let's consider a point A with coordinates 21. Now we shall plot this point in the plane. This point shows that distance of this point from the y axis along the positive x axis is 2 units and distance of the point from the x axis along the positive y axis is 1 unit. So from the origin O we count 2 units on the positive x axis that is on O x and we mark this point as P. Now from P we move in the positive direction of y axis that is along O y and we move 1 unit that is in this way and we mark this point as A. So this is the point A with coordinates 21. Hence this is the required point A with coordinates 21. Order of x and y is very important in x y so this x y is called the ordered pair that is if we have x is not equal to y then the ordered pair x y is not equal to the ordered pair y x and we have if x is equal to y then ordered pair x y is equal to the ordered pair y x. Let's consider a point P with coordinates 10 and a point Q with coordinates 01. Let's plot these two points P and Q. This is the point P with coordinates 10 and this is the point Q with coordinates 01. So it's evident that the ordered pair x y is not equal to the ordered pair y x. As in this case we have x is not equal to y. So this completes this session. Hope you have understood basic concepts of coordinate geometry.


Let's get started, it's on the hour as Dickel would say at our至 on events. Lovely to see you all. How nice to see a few of my friends from Faren as well. I guess they're only here because they want to hear what my voice sounds like.. Dyna'r ysgol i ffynolfi'r cyflawniol. Felly, dywedaeth bod wedi yw'r llfa yma ar y cyflodi fod yw eu hyd sefydliad. Mae winnod, dydy ben fydd yn fwy fyddio'r dweud â'r dweud i chi, ac mae'r fydd gweithio'r dweud. Fy yn jem Imag, mae'n ddweud i'r profesi yng nghymryd y byddwch yn y UK, ac yn cyfieithio ar y Cymru yn llesyn y byeunol yno, ychydig yn ymddi'r ysgol. Bydd y cyfnodd, dywed am y cyfnodd cyfnodd o'r cyfnodd cyfnodd ymddi'r cyfnodd. Felly, dywed am ymddi'r cyfnodd ymddi'r cyfnodd o'r cyfnodd ymddir yma. Yn ymddi'r bod yn ymddi'r cyfnodd, mae'r bach gŵr yn ymddi'r gynhyrch. Felly, ydw'n credu cwestiynau ymddi o'r gweith o'r chart. I'll keep off an eye on the chat log and yeah, by the way, if you have a piece of paper and a pencil beside you, there's a little exercise about halfway through. So let's start by running through some basic assumptions we have when we're doing science, our usual theory of knowledge creation. The basic unremarkable approach we follow when we try and create knowledge. We work with a formally expressed general statement, which has got the potential to explain things. That's our theory. We make a deduction that if a theory is true, then we'd expect to find a relationship between at least two variables A and B. There's our hypothesis. We define exactly what we need to measure in order to observe A and B, the operational definition. And we make the measurements by making observations according to a careful research design. Now, that bit's important, very important. It's probably the heart of what we're doing because a good design allows us to draw conclusions above the hypothesis in a way that tests our belief, tests the fit of data to hypothesis, rather than just saying, ooh, I can see a fit without considering alternative possibilities. And finally, there's a verification. We draw implications back to the theory. Well, that's all straightforward enough. When it's developed sufficiently, we use the theory to generalize, to clarify principles, and eventually to recognize laws out there. Now, notice the assumptions that we're making. We're assuming, first of all, that we can analyze phenomena in terms of variables. We're assuming that we're engaged in an act of discovery, that there's principles out there to be discovered by a dispassionate objective observer. A bit more subtly, we're also assuming that given the evidence, we're always able to distinguish between what's true and what isn't true, so that we can identify the real reason for phenomena. And our purpose is to build theories, general statements which have validly explained what's going on. And then there's Occam's razor. In other words, we should always value the simpler explanation over the more complicated explanation. And finally, once we've developed those theories sufficiently, we should seek to apply them for productive purposes. There's Occam's practicality theories aren't there to hang about in the abstract they're there to be put to use. Now, here's where I'm coming from. That works very well for the physical and the biological sciences, and for their applications and subjects like engineering, for example. And it certainly acts as a model for classical psychology, the sort of psychology I was trained in, probably 50 years ago. But recently people in the social sciences, including psychology, as well as sociology, and social systems researchers have been expressing, increasingly expressing reservations about that approach, as do people in the organizations that they study. Let's look at some of those reservations.  When you look at the phenomena on the ground, you notice people tend not to ask the question whether the area was here. They tend to ask, look, what's the issue? What are the issues? They're not neutral about it. They're stakeholders with a position to maintain. Sure, as supposedly neutral researchers, we select useful hypotheses to test, but our choice depends on the effort we've put into how and what we've verified in the past. As practitioners in our different roles, we care for what we're doing. We've got a position to maintain and defend. We want to do good by our organization drawing on our particular functional area expertise, and it matters to us that we get it right. Reality is different for the different people involved. Reality is different for the academic and the university administrator. I'm sure I can hear all the academics groaning when I say that. It's different for the full professor and the tenure track lecturer. Different things matter to each. They notice different things. They seek to explain, understand different things. Reality is different for the dean of arts faculty and the dean of engineering. We care for what we're doing from our own stake holding. Truth, truth isn't there to be discovered in an absolute way. Yes, we stick to the evidence and we use evidence to work towards a consensus about what matters, but that's often a process of negotiation towards an agreement. And we might sometimes agree to differ. We satisfy, in other words, we invent a just sufficient outcome that fits the evidence. People don't talk about issues being solved. They talk about them being resolved for the time being. And the purpose of the inquiry isn't so much to explain us to understand sufficient to be able to act. Ogham's Fraser, I hear you throw the term around the euro and fill. It certainly needs throwing around. I've got reservations about it. The phenomenon on the ground out there are quite complex. As Herbert Simon said when he defined complexity, quotes given the properties of the parts and the laws of their interaction, it isn't a trivial matter to incur the properties of the whole. And then we have the cybernetician, Ross Ashby, and the notion of requisite variety. The complexity of our explanations, he says, must match the complexity of the phenomena. And the simpler explanation may miss something that's obvious to people with different stake holdings. Application.  Our actions take place alongside the development of our understanding of what's going on. I wonder what your reactions are so far. Just thinking about all of that. Notice how the language has become vaguer. We've abandoned, for a moment, the search for truth out there. Absolute explanations. Have we thrown the baby out with the bathwater? Have we abandoned all rigor? Yeah, tagline. Absolutely. No hypotheses would look at that in a moment. Vague language, though. What can we do about it? How can we handle the situation? Well, there is a way of being rigorous. The constructivist approach. It flops out of work by a clinical psychologist in the USA seeking to develop a new theory of personality, a chap called George Kelly. And he offered, he ended up offering to us not just a theory, but a complete epistemology, a theory of knowledge, an alternative theory of knowledge. And I think the best way I can get that across is by giving you a story. Let me tell you a story. One day back in the 1940s, Kelly spent his morning with one of his doctoral students in a tutorial. In the tutorial, he encouraged the student to state a research question, set up a hypothesis, no and alternative tagline, deduce what kind of data would test the hypothesis, draw a suitable sample. He helped to decide on how to gather and analyze the data, draw conclusions that arrived at informative answers to the research question and generalize the outcomes in a lawful manner. Then he went off to lunch. And after lunch, he spent an hour doing therapy with one of his clinical clients. In that therapy session, he asked the client to state what he thought was distressing him and causing the symptoms, asked him what he believed would make life easier, asked how he might check the belief through his behavior in the following week and come back with his thoughts on what had worked and what hadn't worked and asked what sort of a difference it might make if he behaved in the way it worked. And you see what we're saying. What's the difference between what was happening in the morning and what was happening in the afternoon? Each session was seeking to make sense, seeking to construe experience. And what Kelly is famous for in my field is offering us the model of the person as scientist. But he says something much more profound than, you know, we're all scientists trying to make sense of things. He's saying there's no difference between what the laboratory scientist does and what the man or woman in the street do. The epistemology is the same. The theory of knowledge is the same. What constitutes proof is the same in each case. We need to talk a little about his theory. But first of all, I've got an exercise.   There's an invitation to an exercise. The back of an old envelope will do. Everyone got one? Just say yes in a nearby chat perhaps. Sumo, Dali, Phil, Tagline, Extender. OK, right. I'd like you to think about your experience in second life. How do you construe the people you interact with? And I'd like you to write down the names of six avatars known to you in second life across the top of the paper like so. I've written down Jenny, Fred, Sally and three other avatars that I know. Please write down your own six. If you write down the names of anybody here, no looking over each other's shoulders. And again, let me know when you've got six names written down there. Let's keep it confidential to yourself for the time being. Keep it in RL, not SL. But Sizzigie, I'm going to be doing one of the team building exercises in a couple of weeks time based exactly on this. And it'll be about sharing. So in the meantime then, has everybody got six names written down? Again, could you say yes, yes, yes? Lovely. And now what I'd like you to do please is to address the following question. Please look at your avatars number one, number two and number three and answer the following question. Which two are alike in some way and thereby different from the third? What do two of them have in common in contrast to the third? There may be several similarities and differences that occur to you. Just focus on one for the time being. And write down what they have in common. Oops, where's it gone to? Write down whatever it is two of them have in common on the left hand side. And the contrast that characterises the odd one out on the right hand side. And again, I'll pause for everyone to do that. And this time the pause might be a little longer because I want you to write something down that's as explicit as possible. You know, if you're writing down nice versus nasty, in what way nice, in what way nasty. I'm sure you're a kind person, you will be doing, you won't be saying that. Or maybe you will be. OK, so again a phrase on the right, on the left that characterises the two that go together. And the contrast to that, not necessarily just the logical opposite, but you know the in what way different on the right hand side. You might not realise it, but what you're doing is creating a five point rating scale. The phrase on the left anchors the one end of the five point scale. And the phrase on the right anchors the five end of the scale. There's what I wrote down. And you know, please don't write that down yourselves. Really it's got to be your own construct, not mine. But I wrote down that the two what they have in common is that they're relaxed and laid back. Whereas the chat on the right is a bit of a warrior. OK, has everybody got a phrase? And the opposite will come to that in a moment. I'm just waiting for everyone to have something written down on the left on the right. I want you to give each of your avatars a rating on that scale from one to five. Depending on whether the phrase on the left applies to them. Or the phrase on the right applies to them. Just write their rating down below the name. So here's what I did. Jenny and Sally are relaxed and laid back. They both get a rating of one. Remember, relaxed and laid back is the on the left is the one end of the scale. In contrast, Fred is a bit of a warrior. I gave him a three. Notice once I thought about it, Flora and Bert are even greater warriors than Fred. And so they got ratings of four and five. So please, could you write down your own ratings on whatever phrase you wrote down, giving each a rating of one to five? Yes, that's right, tagline. Opposite, but contrasting rather than opposite. Nice, not nice doesn't tell us very much. Nice, as opposed to totally nasty, begins to provide us with a particular contrast. The rating scale you wrote down wasn't mine. And that is so important. It was yours. I didn't lay down on you a way of thinking about six avatars. You used one of your own constructs, one of the ways you have to construe your social environment in second life. It's called a construct. We've identified a construct, a way in which you have a making sense of your social world. The construct you wrote down will be almost certainly different to mine. And by the way, we're not looking for right ways or wrong ways of seeing the social world your way and your defining the terms of discourse. And so on, we would continue. I would offer you another three, verse number two, verse number five, verse number six, for example, in what new way are two of them the same and one different. Don't repeat yourself a new way in which two are the same and one different. I'll show you a typical outcome of the process in a moment. But now we've defined what a construct is. Right? It is a tagline, has it? Yeah, contrasting attributes of an individual. And we'll see, Rockhound, how we can get or multivariate about these polar opposites. Now that we've defined what a construct is, let's dodge back to Kelly's theory and say a little bit about how he construed people's construing. Kelly did something that's quite unusual in psychology, actually. He offered an explicit theory stated formally, stated in terms of a fundamental postulate and 11 corollaries. His fundamental postulate says the following, the world out there is real, as real as any traditional null hypothesis testing account of existence. But he also said the world in here is equally real, in here in the head, and that people operate by building internal representations to match what they see of the external world in order to anticipate their future experience. And they do that whether they're scientists or not. His corollaries deal with how people alter their constructs in the light of experience, developing their internal model to match that experience. And it describes in various ways how they interact with other people in order to share their models. And that's how people are scientists, says Kelly. That's how we as researchers can develop our own models of human behaviour without necessarily having to accept the positivist assumptions I outlined earlier, without having to accept a real world that's true out there, but rather living with a world that we construe, a world about which we invent constructions, obviously still in accordance with evidence. But let's not be salipsist about this. There isn't a single true world out there. Knowledge is a social construction. That, after all, is why scientists hang about in groups, build a conferences, share one another's knowledge. It's open to rigorous analysis nevertheless. For example, and in conclusion, here's what my own construing looks like after I completed the exercise by eliciting seven more of my own constructs.  That's one of the things I've specialised in down the years. There's eight of my constructs, I think in terms of how relaxed and laid-back they are, but also the extent to which they're dominant, whether they're into building things in second life, how careful they are with their money here, different ways in which I feel close to them. Notice the constructs are bipolar. That's so important. You have to ascertain the contrast to capture a person's meaning. Look, think about it. The word good is meaningless. Good means one thing if we're talking about a student's essay, good as opposed to poor. Good means something completely different if we're talking about good versus evil. Just feel the weight of that word evil reflecting back on our use of the word good. Good by itself doesn't tell us anything. Meaning is carried by contrast. Explicit or tacit. One of the things about doing a repertory grid is that it helps people to surface their tacit constructs as well as their more obvious and evident ones. The other thing to notice is that constructs should be as specific as possible if they're going to be useful. Construct number four, for example, initially I was thinking two of them are mean and one of them is generous, but then I got a bit more specific. I operationalised it in terms of these two are careful with their Linden Dollars whereas this guy spends a lot of money in Second Life Marketplace and is prepared to travel to in-world markets and get terribly upset when the market in-world no longer exists because the persons sold the site in which he was doing sales. Okay, so here we are in a constructivist world. Isn't all of it a bit vague and woolly? Well, no, because notice there are numbers there as well as words. In fact, meaning is being expressed by in terms of the number locating the avatar with respect to the words. You need both. We all remember the old saying, if a thing exists, it exists to some degree and if it exists to some degree, it can be measured. I'm just pausing to read what you're saying, Tagline. Yeah, yeah, yeah. I once did a study in which I looked at what bankers, how bankers construed an effective lending officer and it was quite funny to see how they construed someone who was good at making commercial lending decisions to small businesses. And then I asked the banks, look, I'm going to use a double-blind technique. I want you to identify the people who you know have succeeded in their predictions about business success and which lending officers have succeeded in their predictions about business success and which lending officers have not been as effective. And would you believe the banker would not take part in that part of the exercise? It was just close to the bone, I think, to be making statements about who was more effective and who was less effective for the banker, in ways in which we can do that for ourselves in our repertory grids. OK. So, yes, relationships between these characteristics. We've got some numbers, folks. So we can do some quite advanced analyses. For instance, we can do a cluster analysis on that grid. We reorder the constructs and the avatars. So the ones with the most similar ratings lie side by side. And then we group the individuals according to their degree of similarity. So have a look at, oops, I've skipped one. Bear with me, I've got to go back. One. How do I go back to number 12? Yep. Have a look at that. The tree structure, bottom right-hand corner in red. That tells us something about how the ratings group the individual avatars. So Sally and Jenny received ratings that are almost the same. In fact, on that underground, their ratings are much at about 96%. Bert and Flora are rather different to the others. At best, Flora matches with Sally as low as the average. Matches with Sally as low as about 69%. By the way, I mean, that's a graphic representation. I'm saying about, you know, we can print out matrices of the exact similarity values. That grouping is information about how I think. Now have a look at the tree, the dendrogram in blue on the right-hand side, halfway up. There's evidence there about how I'm thinking. It shows the structure of my thinking and the implications I might draw. For instance, look at the ratings along the relaxed construct and I could meet construct. They're very highly matched. If you follow the lines across until they meet the common apex on the right-hand side, they're matched at about 93%. There's a sense in which whenever I think of an avatar as relaxed and laid back, there's somebody I wouldn't mind meeting in real life. Whereas wherever I think of an avatar as a bit of a warrior, well, to that extent, our relationship is more likely to be confined to second life. I wouldn't especially be excited about meeting them in real life. There's the other high match, the second one down and the third one down, matched at 93%. I feel I can trust someone that I care a lot for and sometimes a bit cautious with respect to somebody that I feel neutral about. So, all that we've done is worked out the sum of differences vertically downwards and expressed as a percentage score in the red dendrogram. Then we've worked out the sum of differences across between every construct and every other construct and used them to reorder the constructs, so that those with the most similar ratings, right side by side. Yes, there will be. I can send the whole thing to you. So, that's one way of looking at the data we have in the repertoire grid. There's another way. Another form of analysis, equally rigorous principle component analysis. It's kind of like a light factor analysis. It's the same repertoire grid. This time the constructs are organised according to the patterns of variance in the ratings. Plotted along two orthogonal axes, the first two orthogonal axes that come up in the analysis. You can say something about the avatars in terms of the different, the distance between each avatar. And you can say something about the similarity between constructs in terms of the angles between them. Oh, Rockhamd, you can make all sorts of decisions with this. Next time you decide to buy a car, right? List six possible cars, six to eight possible cars. Do the exercise which two are like in one different in some particular way. Get out as many distinct constructs that you have. Then go to the motoring press and have a look at what the reviewers are saying and pick up any of their professional constructs and then use those for ratings. Then here's where the decision comes. Add an additional car. It's called my ideal car. Rate that car on all of the constructs, yours and the professional ones. And then buy the car whose ratings lie closest to the ideal. Okay, I tend not to use principle components analysis very much. It can be quite complicated to explain principle components et cetera to a client, whereas the cluster analysis, things lying together, close together in a tree structure is easier to explain. However, there's one last thing I want to draw your attention to and that is the bit at the very bottom. There's a plot of the proportion of variance explained by the various components. And as a very useful rule of thumb, the total variance explained by the first two principle components, the ones that are graphed up there, tells you something about the cognitive complexity of a person's thinking about that topic. Think about it. The more components it takes to account for all the variance in the ratings, the more complex the thinking, the fewer components. Well, I'm only thinking in one or two ways, black and white terms. Here, in this grid, my thinking is very simple. If you add up the percentage of variance accounted for along the horizontal axis, there it is on the right-hand side. And along the vertical axis, there it is, labelled at the bottom of the vertical axis, you can see that 90% of the variance in all those ratings is accounted for by only two components. I've only got a few distinct ways of thinking about all these people in this grid anyway. And so to conclude, there we are, we've covered a lot of ground. Thanks ever so much for your patience. There's really just three things that matter to me that you can... Oh, sorry, what are they? Sorry, okay. Just to go back to Sisiqi's question. I've lost it. Hang on. I've just moved the camera too far back with first two components. It's a very wise question. There's a lesson to be learned in that question. That was, hold on, number 13. What are the components? Well, you tell me. And the important lesson is that the analysis doesn't tell us the name of the component. We have to make a judgement reflecting the constructs which lie closest to that horizontal line, to give the horizontal line a name. And similarly, vertically, to give that vertical component a name, we've got to think in terms of the constructs which are angled most close to it. This is the problem for any multivariate analysis. You can be as numerate as you like. At the end of the day, you make a personal judgement as to what you're going to label as the underlying variable. Hopefully you'll do that with a well-trained mind, following some careful principles, and argue about it with your colleagues who have also conducted the same study. And look back at the literature and see what terms other people are using for those kinds of data. But the actual name doesn't come out from the analysis. You have to decide. Okay. So, if you're going to take everything away from this, I think three things matter. I wonder if you agree. Number one, people behave as scientists as they seek to make sense of their experience by mapping their, their construing onto the events they encounter and by caring about whether other people see those experiences in the same way or not. Scientists may have a few more precise ways of making sense of their experience of the data, but they're subject to the same needs to negotiate shared understandings with other scientists, with other people as they seek to map their data onto their hypotheses. Science depends on interaction between scientists. If you've done a study and you've got your results and you keep them in your own head, you haven't done science. You've got to share it, write an article, have it reviewed, put it out into the community of scientists, and enjoy the critique. It's a way of making sure that your measurements are reliable.  So, there you go, both the scientists and the person in the street are doing ultimately the same thing. That's Kelly's epistemology. It's called constructivism, and it's a different way of looking at the world than positivism. I'm going to argue that it's suited to some of the subject matter that psychologists have to do these with. There you go. That's it. Got any questions?


My focus is joint surgery. I'm a trauma surgeon and the last year I pretty much focused on the shoulder, on the elbow and we worked very closely with Dr. Peter Millett. One of the greatest experiences in our life, I'm here with my wife, Maria. I came here to Yale to work with Dr. Millett at the Statement of Philippine Research Institute to do research and observe him in his daily work. The leadership we learned from Dr. Philippon, Dr. Millett and all the other attendings and also the empowerment of the team. Watching Dr. Millett work was really humbling because he makes everything look very easy. And when we had the chance to try some of his more advanced techniques the next day in the labor lab, then, yeah, we experienced that this was not as easy as it looked like. The cool thing about SPRI is you work together as a team and you have research coordinators working hard, engineers working hard and obviously the clinical teams. It has been an outstanding experience to work with so many bright and accomplished people. I want to thank my wife because she was patient and believed me that we should try to come here. We want to thank, obviously, Dr. Statement, who built this house. Without him, all of this would not be possible. And Dr. Millett, who empowered us from day one. You need basically every person who works here to make all of this great.


teaching is super rewarding, but it's also exhausting. It's hard. And students would come in to the university saying, I want to be a teacher because I love kids. Well, that's great. But there's a lot of garbage that comes with teaching also. And honestly, even the prayer books that would kind of skip over the hard parts. And it was like, oh, all teachers are saints and all students are little cherubs in disguise and yay, everything. But that wasn't the reality. And I wanted to give teachers a resource that said, I see you and I see how hard this is. And God is in it. God is with you in it in all of it, not just in the happy endings and the stories that make you cry and give you chill bumps, but in the boring parts and in the really hard parts. He's in it with all of it.


All right, let's let's get started right on time for the last morning session today before you'll guys are free to leave for lunch the speaker is Well, the speaker is a Robert who's done pretty much everything That one could potentially do so I don't even know how to start introducing him to be honest Many of you will have seen him before I have talked to him before so I'll just It's just right dive right in and please get started. Cool. Thank you So I've got a I've time tested this talk and it's too long. I Had to choose between skipping out enough bits. I thought it wouldn't make sense or trying to fit it in So I'm gonna try and fit it in we might not get time for questions at the end tough But if we can they'll be great So why why talk about this is probably something that's worth taking a little bit of time to To mull on and my speaker notes are not Well, that's going to be debugging the slides is step one Right, okay. Yeah, so I've worked with Chris Armstrong before and he's the guy that wrote this package I'm gonna talk about today and Chris is a really good program He's been around for ages and ages and ages and who here by the who went to Tommy's talk about kinesis this morning Right, so half the room so statistically we've just completely around them. That's great and One of the things that the kinesis talk didn't really touch on is side effects Like I talked about how things can be linked But when you think about reasoning about a program Side effects is kind of the thing that makes it impossible for you to tell what your program is going to do and Python it's an imperative language. It is entirely about side effects There is nothing you can do in Python that doesn't sort of have that feel to it and That makes it really hard to reason about Python programs at scale Small ones are really really easy You look at the program you figure out what it does as soon as it gets slightly bigger that gets kind of hard And so he wrote this library to start bringing some of the things that been done in the functional programming world To Python programmers because like me he loves writing in Python He does it as his day job, but there are better ways to do some of the things we do Unfortunately, they are available in Python So I'm gonna give you guys a test. What's wrong with this code? What's the bug in this code? Yeah, yeah, just No, it is entirely legitimate. That's just reveal.js doing something a little bit wacky So yes, the highlighting is wrong. That is not the bug with the code Tom The code assumes English. Okay. It's not It's not accessible. It's not diverse. I don't care about that for this talk Right It has a side effect, right and this code will actually what would you expect this code to do if Standard out was not able to be written to what would be the correct behavior for such a trivial program The correct behavior would be to trace back and exit non-zero because that's what processes that fail to do the job I meant to do they are meant to do something like that Fantastic it works. It's exactly what you want No, it's not That simple program does not actually meet the contract of a posix process. It doesn't exit non-zero Now there's a Python bug for that But this is the simplest example I could come up with undefined behavior in Python writing really really rigorous code in Python Can be quite hard and this talk is all about trying to figure out a way of doing that that is Pythonic and tasteful performance reasonably well and doesn't make us all actually want to switch languages because this is just so much worse than Yeah, right, so let's let's see if we can get somewhere interesting about this Things that can cause these side effects for us global state yay My slides just did something unexpected must be written in Python. No, I'm using reveal.js bad bad bad joke. So What went on here? No, I don't know so if you look through the Program I did before and you just try and break it into little little bits If you've ever looked at Python bike code, this is kind of a no-brainer for you But what it's really doing is it's looking up in the global The name print it's marshalling some arguments to it. It's calling it. It's looking up sys.standard out inside that function Another global that could be defined to do anything It's part of the power of Python It's how things like mock work that you can switch out names at runtime in your tests and have it have completely different meanings and You actually then call the right method and then the output gets buffered if you haven't changed anything else You just run that code your output hasn't been written to the socket File descriptor whatever it's still sitting in your process Then Python exits And it goes oh, I've got a file descriptor here. I've got something in the buffer I'll write that out it fails to write that and then it starts to clean itself up and it's got nowhere to go Can't run any more Python code your code's already finished There's a bug in the interpreter, but If you want to test this code and be confident how do you test that you have to run a separate process Because you're testing something right in the boundary conditions, and that's just really really ugly So if we ignore that Mostly we could monkey patch stuff in we could provide a new definition of print and then we're only having to reason about the code That's in front of us. It's very local. It's very easy to think about I can say yes That code does exactly what I expected to do because no one is going to change global state on me No one is going to run me in a context. I didn't expect to be running, but that is exactly where the bug came in You could run in a sub process as I just said you can redirect the IO You can run it in the same process, but move the file descriptors around and that will give you kind of a bit of both worlds It's not as bad as monkey patching, but it's not as comprehensive as running everything in a sub process and really been absolutely sure So if we wanted to fix that code that kind of looks like fixed code We get rid of our assumptions we get rid of our globals we make everything explicit and visible We can reason about it. I know it's going to write exactly that file Yes, there's still a global there, but I know what global it is anyone reading it even if they don't know The exact definition of print in the standard library can see what that's going to do with a bit more fidelity And we're going to flush it. We're going to say we care that this is actually being written somewhere before our code finishes and if we do that We get to trace backs because of It's a long story It's not that long we still have the data in the socket when it exits and Because our flush fails. So it got into the file descriptor buffer. We tried to flush it. It failed It's still in the buffer then the Prython itself exits and it's still in the buffer So we get two trace backs one of them a full trace back the other one just the exception Which is all the interpreter can do but we have fixed the bug Okay, I've now fixed the simplest shallower's bug ever still wasn't super nice to test when I look at that and I Want to talk about Haskell now because I like talking about Haskell. I don't know anything about Haskell. I'm an enthusiastic Experimenter in Haskell, but I'm not actually an expert But one of the things I find most striking about Haskell particularly when I try and talk about those benefits to people who Have heard of it and heard of you know this wonderful thing called monads It has all these terms to solve problems that Python doesn't have a Monad is a way of getting Data dependencies Across pure functions and that's not a problem Python has because we're imperative So trying to pick up Monads and using them in Python is a bit a bit crazy And the reason of this is that Haskell's pure math it gives us huge amounts of rigor and being able to think about a Program and the sorts of side effects we saw here are much harder to create in Haskell, but You're not actually telling the program to do anything you're telling it how to calculate something if it were to decide to do it And it might decide to do it at some point before the heat death of the universe So This here is actually Equivalent to this Haskell code and it's kind of Ridiculous right what I'm trying to show here is that in an imperative language I can set up something that Doesn't matter like that This is one mean by throwing this off a problem. We don't have But I want to talk really really quick through Who had does no Haskell? Right, okay, so I'll I won't skip it So in Haskell this Greater greater equals an in fix function just like pluses in Python and it's called bind and It binds two things together and it creates that data dependency and it does that by creating a lambda So on that slide the backslash is equivalent to the Python lambda colon thing We create a function right here and now so it creates Action one bind to a function which takes a parameter called x1 and Is going to have a body definition so the arrow says the body is off on the right Action two is going to be bound to a function that takes a parameter x2 And that's going to pass x1 and x2 to action three and all of that's just going to be evaluated as a function It's a whole lot of boilerplate to be able to just write three lines of code So if you try and translate that straight to Python, it's just it's mental so You've got two lambda functions and you start out with the other side and you have to evaluate the function all the way down but actually this is a little bit wrong because the Dispatch and Haskell is polymorphic on type and The bind functions polymorphic on the on the left hand argument, so we don't have this monad context And you could go and create one you create a monad Class and you can create a binding unit and there's a thousand of these on pypy and I'm not going to add to that mess But you end up with something that looks maybe a bit like this We pass the monad into all of your functions because you don't have that capability that Haskell has of sort of having it as context and You pass one and two and we return the two together. Okay, so that's all cool But this is not feeling Pythonic if you guys are looking at this and going well no wonder I don't like learning Haskell. This is because this isn't a Pythonic approach to the problem But it does have a couple of redeeming features if you were to think about that initial program I started off which had a side effect and it did some lookups All of these things could be broken out of separate steps and they could be tested you could control the interactions with the global state Very very precisely if we were doing this So maybe there is something we can get at that's valuable from this Thing which is you know seven times eight times the initial code we started with and And that's testability now I Don't know about your experience with Python, but my experience with Python is that if it's not tested It's not a question of if it is or is not broken. It's a question of when it will break And that is in large part due to the things that make Python powerful the mutability the ease of expression and The fact that you don't have to go through a long TDS compile force the type checker to be happy to every step along the way You the flip side is you find out that the type checker would have told you about the problem now the problem is that That's still if you go back to that code there That's really not code you want to look at and test because everything's nested you can't get at those inner functions You can't really pull it apart and and and control it easily so The other related thing I'm jumping slightly around my slides is actions can do anything so you can still have all the global side effects You can't really control it. I mentioned that and Here's a better title, so There's a thing called the free monad and the free monad lets you put a language a domain specific language and write your own Interpreters really really really easily, but again, it's a monad which is solving a problem. We don't have but the technique That technique could be very valuable and Chris did that with effect So the free monad says you create a language to express what's going on So I'm not going to talk about the Haskell side of anymore that bit's gone. You can start breathing again You create a language to express actions now actions can be actual physical IO or they could just be your change in the global variable or if you wanted to go down to the Finds grain possibility you could even do just things like looking up names in your global program state as an action Like you can completely disconnect your Python code from global state using this approach if you want to so This here is an intent. It's the intent of printing a line. So it's just a simple three line class It doesn't do anything itself It's what goes into your language you build your structure This is what is going to be going on and you write some pure code and I'm by that I mean code that itself doesn't interact with the rest of the world you give it a given input You get the same output every single time So when you test it you don't get a surprise and production because your tests don't have anything that can trap you up and trap You and make it break You can return a generator which will let you treat this as a co-routine or you can return an effect object and And You might for something very simple just return an effect But when you start one who flow control and loops and so on I find it's easiest to express that using generators and co-routines rather than returning callbacks thunks that are going to chain on to other things and that's I think because the boilerplate gets in the way Generators are great for avoiding that sort of boilerplate the function except a single parameter Which is the intent? That it's going to action So you write an interpreter Sorry, they yeah, so the output value everything gets threaded through the interpreter And so that single value is you doesn't do star eggs or keyword eggs So you pass a dict of your parameters or whatever you need to be communicating amongst your program parts You write an interpreter and the interpreter is the bit where you encode the actual real There is something happening here. This is where your IO happens This is where you can talk to a random number generator and this is where you can consult global variables or whatever other things are appropriate for your production environment, so this here print and flush is my actual implementation of the print intent that's the thing that evaluates it and the interpreter object there is a composed dispatcher so the dispatcher is something that takes Intense or effects and hands them off to executors and glues it all together Type dispatcher is something that does that based on the type of the object Because this is kind of part framework and part solution. You can actually write your own dispatchers that would dispatch on Rather different things and one reason you might want to do that is because you wanted to glue it onto async IO or tornado it comes with a synchronous thing So you can just write normal code and a twisted thing so you can write twisted code using this But it's written so that it's very very easy to port to many different frameworks Event list would be another one that you might want to write your own dispatcher and the Base dispatcher here is the one that knows how to deal with generators regular functions and all the sort of boilerplate That you'd kill yourself if you had to recreate it every time and there isn't really doing global status Just understands how to map from one type to another Testing this is actually quite quite interesting. So We just write a different interpreter. We wrote an interpreter to use the thing in production We write an interpreter for testing and the interpreter for testing. That's where we avoid all the IO We avoid all the expensive stuff like talking to disk and we avoid all the things that can cause confusion like global state by putting That into our test interpreter So test print says I'm going to get some outputs Sync performer that decorator there says that this is going to execute this code synchronously I'm not going to be going and returning a twisted deferred or anything like that. So the Particular interpreter is tied to the execution model. So if I want to write stuff and twist it I would write twisted executors and All I'm going to do when I get that print effect is I'm going to pull out the Like sorry the print intent is I'm going to put up the line Parameter from it and put it on to my outputs and then in my test I can inspect that I say I can't assert here in the general case because while I could write an assertion in this deaf perform test function here if I was Throwing five or ten or twenty different lines at the user during my program I would have one perform test function here and I can't write an assert that's going to handle all those different inputs Without it becoming really hard and unreadable. So it's kind of easier to just accumulate everything that goes on and then write I've moved my mouth. Have a night. There we go and then write a so I have to create a dispatcher that will dispatch out to that and So that gives me my test interpreter. I Perform it synchronously note that Sync performer and sync perform terrible names and we'll get some much nicer stuff in a second And then I look at the outputs and I write my assertions here, but obviously we want to be able to do a bit better than that However, we have fixed all of these things. I did not need to monkey patch my program. I did not need to use subprocesses I did not use to use IO direction. I need to test my production interpreter once and only once I Might test that using subprocesses and pay the cost there But all the rest of my code however big it gets I'll never need to go and touch that thing again because I've exhaustively tested this bit that has all of those nasty complexities and That code was the production API. So the if I go back Over here, this is production code The real print function and the program method there It's not beautiful big code because I'm trying to keep really tiny examples for us, but it is production Little bit awkward with some of the closures. I needed to do when I was testing it But not terrible. I could write quite a few tests that way and be quite happy In fact, I have ad hoc almost exactly this in the past trying to solve these problems with Programs again a bit big and a bit slow to evolve and you want to sort of get your velocity up So you just go, okay, I'll fix the thing right in front of me Now If we get time I'll come back and talk about some more Haskell stuff here, but not right now There is however a dedicated testing API. Yay so it's got this thing called sequence dispatcher and Oh, one of the fun things about writing this talk is that as I went through the talk and I went to Chris I said, hey, this is a bit hard to use. He went and fixed things So this is the third maybe fourth iteration of the talk when I filed a bug and he Either accepted the bug or the patches, you know, I've been here how far along I've gotten that the evolution of the thing and It got better, but I thought we'll show you the path we go through So sequence dispatcher makes this much much more straightforward each intent is going to come through and It's going to look it up and match it. So did I put I? Think I managed to skip a line there. So Print is going to be compared by a quality here So the print object I wrote will fail because two different print objects with the same line parameter are not going to be equal Unless I implement Dunder EQ But what I can do is turn into a named tuple at which point it has all of those methods for me And I don't need to ever think again So the first thing is make your intense named tuples makes your code smaller easier to read and it works with a testing API in a really nice way And also makes it clear that you're not going to put Complex functions on those intents they are buckets for passing data around between bits of your program not actual classes You'll have classes you'll have real objects, but they'll consume those things rather than being combined together The lambda none there says I don't need anything back from this performer And like it's not like a read function where I'd like to return some strings this one. It's going to be doing a print It's not going to return anything so my Main code that the main function I had right back at the beginning is going to print this thing It's not going to try and evaluate the result sequence.consume There is going to oh I know what happened. Yes. Okay. You're getting the final API No This is the intermediate one. Sorry. I'm sorry about this It is why they speak so okay This is going to work through that list of things and dispatch them out using sync perform So with sequence.consume what that does is it creates a dispatcher out of that sequence that's ready for use and So you can then see sync perform sequence So it's kind of the same object. It might be nicer to have it be a context manager and Anyway, so this is the name tuple bit that I said just before so I can skip past that and this is what the Thing starts to look like if a bit bigger if I wanted to be able to read something in I'll create a read line name tuple and I have to define a production implementation of it So sys.standardin.readline and I have to update my dispatcher. So this is one of the costs your Interpreter has to be expanded every time you add a type that you're passing around You have to tell it how to work with that type that intent But I can now write a more powerful program I can write a program that prints something out And if it succeeds, I want to read it back in and then if that succeeds I want to print it back out again to you does that seem like Pythonic code though Yeah, so some people are asleep and some people shook their heads. So that's good So this is how you might write a test for this and this is using hypothesis. So it's just throwing random data at it It will throw a whole bunch of stuff and see what happens. It's a wonderful thing look into it But it's the same testing style I create a sequence I create some objects for it to compare against and I checked that they executed Sequence.consume also checks that they all executed if you just ran through half of your your program would be buggy And so flag that is an error in failure test Right loops so This is the generator API I want to talk about before you this I think is Pythonic code I yield the effect of printing. What is your quest my I get a line back from the yield because you can use it to get Values out and that is the effect of read line and then I'm going to yield that line back out to the user It's a little bit more boilerplate than just doing it as three direct functions But it doesn't have all of the huge mess of boilerplate that we have before and it's in exactly equivalent So I can run the same test and it will pass But I can also Make it a bit simpler by using a single composed dispatcher. Well, I have to use a composed dispatcher because I had a generator a new type in there, so that was going to use the bait bring the base dispatcher in for me loops Sorry, I'm rushing something out because I've gone over time and so If you want to loop It's really hard with that callback based approach where I return the thing I do the dot on I didn't really explain it because it just looks like line noise this here. I think is pretty clear While I haven't got the line I want Ask prompt the user ask for the line back and at the end of it print out another question was your favorite color So this is obviously not a complete program. I haven't written the full quiz here Again, I use a hypothesis test to generate test data for me the bits I really care about they're gonna be static and it's gonna say what's your quest read the line. I'm going to deliberately give it a Different quest that's the random thing coming from Hypothesis and then I print what is your quest again? I give it the line It's looking for to seek the holy grail if you go back to my Loop here to seek the holy grail is the thing I'm looking for and we can continue And returning from generators. This is a bug. I'm gonna discuss this with Chris and length. I haven't time yet You have to yield do return which it just looks for as a rapper to say oh, that's not an effect to pass on elsewhere in the program Actually, I think we can fix this so it doesn't need to do it There's a comment in the code and the docs that says you don't need to do this on Python 3 The code actually requires you to do it on all versions of Python So I believe the intent is there and there's just a certain amount of Figuring out that we need to do And this is the Newest testing thing he had is a performed sequence. You just give the same sort of structure, but you don't need that With sequence dot consume and you don't need to worry about closures It returns the result of the full thing out the end of it for you So you can see you know your program return this value or the function act like a function and gave you a value back And then you can write regular asserts against it. So I think it brings together all of those things and fairly nice and straightforward fashion Yes, I have got three minutes for questions Wow, that was certainly a very interesting talk Thank You Robert We do have a few more minutes for questions. So I'll just be coming around How is it used in paper? How have you found using it for real? So this is currently not used in PIP, but it is something I think might be a good fit for some of PIP's problems because PIP is all about IO and Some of the bugs we have are all about IO. This is used in Otter, which is a rack space Auto-scaling thing. So you have a heat cluster that's a cluster that's been defined and managed by heat But you want to throw more machines and more capacity at it when you have lots of load coming in So it's heavily asynchronous It's got external state that it has to synchronize against which is the actual state of the cluster and IO that can go wrong in every single way you can imagine because it's a distributed system and They're using this so slowly increasing the areas within the code that they use it Because it's got the sync perform and the async perform and that the idea of these Interpreters you can embed it in an existing program in a very small way like you can put just this little bit here Beside if you like it and then Glom things on around it or put it in another island over there and just add it and add to it as it makes sense Any other questions you guys should use the time that's available come on Well, let me ask a question of you guys does this sound interesting or are you regretting choosing this room? Yeah, right, so I thought the question was a bit harsh provocative Okay, um, no, definitely got me thinking about you know, Python at scale and what you run into and the awareness of it and things you have to think about and try out and so I Wouldn't use it because there isn't kind of immediate need but definitely interesting input cool Yeah, it's an interesting talk a little bit Fast for me to actually take all that and actually ask you any sensible questions afterwards But I'm sure it's something I'll have a look at in my own time later I'm here all day and tomorrow and I'm happy to be approached in the hallway track There's another question up to the right behind you. Yes, I think I had one question up here first I was going to ask you if you will commit to running a tutorial next year on This because I think there's lots of people here who are interested but maybe need a bit more time and some practical examples I'd be delighted Yeah, that's in one up there. I think probably the last one is there any facility for separating different kinds of effects and supplying different interpreters for different families of effects for example IO state manipulation and so on So you want to have two different interpreters and you want them to cooperate with each other When some an effect of one type is encountered go to that and yes the composed so the interpreter is the dispatcher So a composed dispatcher takes an arbitrary number of dispatchers and tries one and tries the next and tries the third and tries the fourth and so on so We're beeping So all yeah, all you need to do is to have one Dispatcher for each family of effects and then use a composed dispatcher that's appropriate for your your combination to join them all together very straightforward Very last question if it's a quick question Yeah, my question was more Isn't that creating a new language and shouldn't you use a functional language in the first place if you're solving problems where that makes sense No, so So yes and no yes is creating a new language. So is event lit twisted async IO tornado So DSL's of any sort you create new languages every time you create a language to talk about something whether or not the syntax has changed So you're absolutely right. It's doing that Is this one one that lets you mitigate some of the things that the Thereby default language in python gives you and that gives you good bridges to thereby default language I think it is I think going to Haskell for an existing code base is a very expensive proposition and going to Haskell for an existing Is a very expensive proposition now will it pay off and how long will it pay off?  I think it is So I think this can be a good thing without any impact on the question of moving to a different language I completely different interpret, you know, I guess color. Okay, anyone who's going to the pie ladies lunch The group is already meeting outside. So you would have to leave Right away Other than that, please join me in thanking Robert again for his talk


Aaron, what was the approach against Stannock when you drilled that first pitch he threw out? Just get ready. That was the biggest thing. You know, they know he's got a good fast one get up to a hundred He's got that good splitter. So my biggest thing was just making sure I got ready early So you know couldn't stay on the heater, but also have a chance of that splitter What is it about this team beyond talent that you guys have seemed to win so many games like this one?  He's gonna do his job So I better step up and do my job. You know, so that's the mindset we have and It's a fun environment to play in. What were you thinking and feeling as Guardi drilled that three-run homer in the 11th? About time. Hicks, he had a homer, I had a homer. He had to step up with the outfielders So it was, I was excited.  So, you know getting that extra blast He gives a couple extra runs was huge You're getting there as far as being locked in but maybe not quite there yet. How do you feel about that? Yeah, we're getting there Missed the first one in the first inning and there's got enough of the last one. So we're getting there What have you thought of the contributions of Hale so far this season and what he did tonight in particular? Yeah, he won us that game, you know him coming in and giving us, you know, 2.1 strong Indians is It's a good, you know, raised offense man. They're, they get guys on base.  What is most impressive to you about this team? Like I said, just how tough they are mentally doesn't matter who goes down. What happens what the score is You know, we always feel over and whatever it's in the ball game You know, it doesn't matter who's in the lineup who's not in the lineup who's pitching who we're facing You know, we feel like we can beat everybody. So when you have that type of mindset and everyone's on board Good things happen No, not till it's October and you know, we wanted to vision you know, it means even come back, you know, we can't we're not finished So you got to keep pounding away and Let's get ready for mom. You have to like where you are though, right? Can't be satisfied. We got to keep going so


Welcome to 30 days of kindness we're going to share a new kindness prompt every day These will be little acts of kindness. We'll be challenging you to do we might try these two We look forward to hearing how you go on Leave a comment or a like Today's day is 11 Remember that great lesson you taught recently share it with someone We hoped you liked today's prompt. We can't wait to hear how you get on leave a comment or a like Comments make us smile Good luck and see you tomorrow. Bye


Okay, now we move into one of the sections that I think is a good one for the design engineers on fastener design. These questions are kind of a working list that I made up based on questions that I'd gotten in the past from people. The most frequently asked questions for fastener design. Number one is what torque value should I use? Now this is a difficult one to give an exact answer on, so what you have to do is you look at the material strength, lubrication, the loading that you're going to have on the fasteners, the differential expansion, and then give a torque range for the mechanic to work in because you cannot expect someone to go with exactly 345 inch pounds on a fastener because his wrench won't read that accurately, so you have to look at things and determine what range you should be in, and the range usually on torquing is about plus or minus 10% of the value, really, that you have to give for a tolerance, and you have to determine whether you can live with the lower limit and the upper limit on it. Now should locking torque be added to regular torque? Now the first thing to do is check to see if locking or running torque is a small percentage of the total, and Marshall Standard 486 gives guidelines for this. If you are using an extremely small fastener, and when I say small down to maybe a number of six or below or something like that, then locking torque can be a sizable amount of the total torque value, so small, and it's hard to get something on a small fastener that will give you some locking without giving you too much because there's a limit on how small can you go on a plug or deform thread or something until you get into problems with it.  Well if you are running a fastener down and it's taking a lot more than the maximum amount given to Marshall's table, you've got to go back and check to see what's wrong because chances are there's something wrong in the threads or something that's causing you to have that higher running torque. So yeah, you add it on, but it should be a small add-on. Next question, do I have to use inserts and aluminum if I install steel bolts? Well, you try to avoid tapped holes if you can, but if you have to have the tapped holes, you can delete inserts if galvanic corrosion and disassembly don't need to be considered because chances are if you put a steel bolt directly into aluminum, it's going to corrode up so much that you'll never get it out. So that's one of the problems that you have with it. Otherwise, you need inserts. The other question is why did the heads pop off my socket head screws within a few hours after installation? Well, as I pointed out in the inspection criteria, the depth of the socket in a socket head screw is not measured normally during inspection. So if it goes below the bottom face of the head, the net cross sectional area is so small that it will fail in tension. Of course, the other reason for it failing would be hydrogen embrittlement, which would cause the heads to pop off. Assembly disassembly life cycles for a locking fastener. Now, it's usually good for about 10 to 15 assembly disassembly cycles. Nylon, nylock plug is good for about 5 to 10. Of course, the deformed thread is what I'm talking about. It's good for 10 to 15. Now, if the running torques, once again, if you check and they're below the minimum values given in the Marshall Standard, then you should discard the fastener. In other words, if you have ground up the nylock plug to where it's no longer effective, then you discard the fastener. Now, the assembly disassembly life for a fastener. If the fastener was torqued above yield, it shouldn't be used again at all. The number of cycles for a fastener, it depends on the criticality of it. For instance, in the aircraft business, you're not supposed to use fasteners over again at all. This is one of the places that some of the small charter type airlines have gotten torqued in trouble, not as often as they should, but they have gotten in trouble with taking cannibalized parts off of an airplane and using them as new parts for rebuilding, both fasteners and just structural type pieces. That is a no-no because you are supposed to put new fasteners in when you rebuild an airplane. I know that here at Lewis with the Grumman plane we have or did have, I was told by the mechanics that Rolls-Royce will not allow them to use anything but Rolls-Royce supplied fasteners any time that they work on the engines because they want to make sure that the right bolts are in there and that they use new ones each time. What do I use for a shear area when I have a bolt and shear in a tapped hole? A bolt loaded in shear and installed in a tapped hole, first of all, is not a good design to begin with, but if you can't avoid it, use the root area of the thread for the shear area. If the design is critical, use a stress concentration factor of like about 2.7 to 6.7 depending on how many threads you got exposed and Peterson, most of you I think are familiar with Peterson's book on stress concentration factors. They give the factors in there for all sorts of cases like this with threaded holes. The next question, should I use a washer under the head and nut of a bolted assembly? The answer is yes you should as much as possible to provide a smooth hard surface to minimize the friction forces during torquing and provide in the case of high strength fasteners with a bigger fillet radius under the head to make sure that you have a counter board interwarsher diameter to avoid point contact on the head fillet. Next question, when should I use coarse fine or extra fine threads? Now, whether you're going to use fine threads or not, fasteners below a number 10 usually have coarse threads unless you special order them due to the difficulty of making very fine threads. Corsed threads are easier to install without cross threading, so they're the most popular one in the industrial world, but fine threads are easier adjusted and have a larger root diameter than coarse threads, so they're a little bit better in fatigue. So the aerospace world uses fine threads. You normally do not find coarse threads being used on airplanes. Extra fine threads are used for fine adjustments and for jacking screws on mechanisms, that type of thing, and tapped holes and thin materials. Now this next one is a wide open question that can never be satisfactorily answered. And one of the problems with it, the government sometimes, when they're infinite wisdom comes up with things to get them in all kinds of trouble. And one of the troubles that they're in with customs is that they have a different tax rate for screws and bolts on import tax. Now the problem is, and I've gotten several calls from customs on this, asking my opinion on the definitions of a bolt and a screw, how do you define a bolt versus a screw and differentiate between them? You really can't because here's all the different answers that you have. A screw is installed in a tapped or drilled hole and a bolt is threaded into a nut. But you look at these and you take a bolt or a screw either one, and you can buy them that look exactly the same, but one says screw and the other one says bolt. Because they can have a head on them, the heads are alike, they can be threaded, they can be threaded all the way to the head, and they can be only partially threaded and still called a bolt or a screw. Now here's another definition, a bolt is installed with an external wrench and a screw is installed with an internal driver. Now that's one of the common definitions that we come up with sometimes, that we feel that okay if it's something you use a screwdriver on it's a screw. But then on the other hand, a socket head bolt, you use an allen type internal wrenching driver for it, so you could say that that one was a screw instead of a bolt. And here's another fine definition, a bolt has a shank diameter equal to the minor diameter of the threads and a screw shank diameter equals the major thread diameter. Now the only time that you use the reduced diameter bolt is if it's a fatigue application where you don't want to fail in the threads near the end of the threads, then you machine the shank down to the minor diameter of the threads to prevent stress concentrations. But most 99.9% of the bolts that you get are formed by starting out with a given diameter rod which is formed and you actually cold form it to reduce the threaded area before threading so that when you do the threading, the deformation that you get will only make the OD of the thread equal to the diameter of the shank. So that kind of shoots that one down. The other one is a screw is threaded all the way to the bottom of the head and a bolt has some unthreaded shank. Well, that's not true either because when you get into a longer length fastener, then you only have a partial thread on it because they don't want to bother to spend that much time threading it. So the only ones that are threaded all the way to the bottom of the head are the ones that are say an inch and a half and less in length. So because the normal way of threading a fastener is that you go with a minimum of one and a half to about two and a half times the diameter of the fastener in thread. So if you have a four inch bolt that's a quarter inch in diameter, you will have three-eighths to a half inch of thread on it and that's it. Now, you can say that's a bolt or you can say that's a screw, whichever you want to call it. So that definition. So all of these definitions have overlaps. So what you need to do when you're specifying something is give the geometric terms of how much thread you need and what you have to have rather than depending on a definition of bolt or screw. Then the next question is when should I use threaded studs with nuts instead of fasteners and tapped holes? Well, the threaded stud works better than a fastener if you're not going to remove it because you can just let it rust in place. For instance, the manifold on a automotive engine is usually installed with threaded studs because once the thing rusts into the manifold it's like a bolt sticking out and your chances of getting a nut off and then chasing the threads and putting a new nut on are much better than trying to twist a rusted threaded part out of a hole and replace it. So the threaded stud would work better, particularly here in the rust belt. Now, next I have some comments on some of the thread specifications and do you have that one in there? It's this one. You do not have that one in there. Well anyway, I can just give you from here. As some of you may have heard about the PERI initiative, which was, PERI was the Secretary of Defense and he came up with the idea of doing away with mill and federal specs because that way the government would no longer have to look after him. You just do away with him until people use something else. Well, of course he's a non-technical type so he didn't realize all of the thousands and thousands of specifications that were being done away with no replacements. So two of the ones that were really a concern in the fastener world were mill S7742 for screw threads, the standard threads that covers your grade eights and socket head cap screws and stuff like that and mill S8879 which covers J-threads. Well, the 7742, they made it inactive for new design but it still can be used on old designs. And 8879 for J-threads, they made it inactive for new design and actually as of May 14th of this year and said other consensus standards can be used. Well, of course this creates a big problem because J-threads are not covered very well in anything else except this mill S8879, there's an SAE spec that covers it to a certain extent. The other thing, there's kind of a turf war between the industrial people and the military people on control of these specs because you don't want to be a party to a specification like an ANSI spec if you're working for Boeing and ANSI, the ANSI committee decides to change that spec and makes it unsatisfactory for your usage, you don't like that. So the good old national aerospace standards committee is coming to the rescue and they are a part of AIA which is the Aerospace Industries Association and SAE. So the committee decided to convert all of the MS, AN, mill type specs to NAS specs and what they will do since they could not rewrite them, they're just saying okay we'll make them an NASM and then give the same number they had before. So what this does, this transfers custody of the spec to the NAS committee so that future revisions of the specs will be made by the NAS committee but the spec can still be used and the other thing that they emphasized was that people see this notice saying inactive for new design. Alright, you can still, if you want to specify that that spec be used, you can still put it on a drawing and that's up between you and the contractor that's building the part. If you say I want it to this mill spec that is inactive for new design and he says give me a copy of it, that's fine. So that's the way that we're getting around that with the NAS committee taking over the custody of those specs. The other thing that I had mentioned was of course the Fastener Quality Act has been delayed until May or at least presently delayed until May 1998. So now we go into the summary which you can show as the agenda because the agenda and the summary are the same thing. And here we have it. These are all the things that we have covered and there was heavy emphasis at the beginning on materials. We covered all of these other topics and then we got down to the appendices and the references which you don't have yet in your notebooks but we will be distributing those to the people who took the course and the final edition of the manuals will contain the appendices and references. One of the things that I added to that was the, that I forgot to mention when we covered bearing stresses, Tony Herman and I wrote an article for Fastening Magazine on bearing stress distribution and it was published in the December edition of the magazine and if anybody wants to look at the copy and see me or Tony, both of us have copies of the article and I think I listed that at the end of the references. The other thing too that I would like to acknowledge once again is the references that I used from John Bickford and Dave Peary's book. Peary was, I met him when he was at General Dynamics. He used to be head of their research division at General Dynamics. His book is one of the best there is, the old edition of it. If anybody can get a copy of it, it's out of print. It's a 1950 edition. He was head of aeronautical engineering at Penn State at the time he wrote it and a lot of the stuff that I got out of there for the fasteners in a pattern, how to analyze them and so on came from Peary's book. So any of you that would like to pursue that further could check Bickford's book and Peary's book for more information. Also I'd like to mention again the book which is supposed to end all quests and so on for fasteners will be published around the end of the year. I was a contributing author to that book. It will be a two volume set published by Marcel Decker on fastener design and each volume is to contain somewhere in the neighborhood of 1300 pages. So you can see even though this may have seemed like a long course, this only scratches the surface in the field of fastener design. So with that we will close and thank you very much for your participation.


So I'm not sure if you all knew this, but Lego has apparently gone woke according to Fox News And I have to say that I do agree with their assessment here because what Lego did is I think peak Wokeness like when I think of woke. This is a quintessential example. So let's go ahead and listen That's quick when saying ain't so now Lego Lego. Excuse me. We go got me with Bogota Lego is going woke the company unveiling a range of new characters in the effort to be more inclusive Lego says the new characters will promote diversity and understanding some will have anxiety issues I don't know how you show that one will have a missing limb another Down syndrome. These are really important issues Yeah, do you want Lego in there? So good One of them will have anxiety issues One of them will have a missing limb She's not bringing on the expert to be like, do you think that Do you think that Lego should be educating the masses of myself?  I can handle it Definitely not but what's so fascinating about this story is the divide in the country Republicans think it's insane that they're forcing identity politics into Legos Democrats are upset that they didn't make a drag Queen stripper.   Maybe I'm missing it Look, maybe there's this world of hyper woke individuals who are just very fixated on representation and all types of representation But I haven't seen it yet. This is the first that I've heard about it. Where's the outrage? Like usually There'll be some type of segment that they'll base off of internet outrage, which is usually like one tweet with two likes Um, but in this instance like who's Who's saying this and he's like framing this as some sort of a divide.  Okay What kind of set is this? No, it shouldn't be going on the way it's going on But the reason they force identity into toys is because they think identity comes with a built-in political orientation And that's what they're after here. I'm not having it. Wow. I just want to build like I have one I have a Lego set that builds the white house. Yeah, no imagine that And the whole that's the whole point of Legos if your kid builds with them He's smart. He's gonna be fine if he eats them. You got to keep an eye on that kid. That's all they were there for There you go. And playdoh is like that too. I'm number next If you step on them then it'll hurt um, listen as A bit of an a full myself an adult fan of lego. I've got to say that lego has always been Woke, okay, and this is not an american company. So they don't care about what's going on in the united states They're not tuned into cultural issues. But lego has been very woke. They released a set called everything is awesome And it's a set that is basically the rainbow flag and trans flag and um people of color flag Like it's that flag that they're triggered by but in lego form, right? And during pride, they like had these lego letters like this is what trans means This is what uh lesbian means like they did the whole lgbtq plus like info thing So the company itself has always been pretty woken forward and on top of that They always had characters that are in wheelchairs or disabled like it's a it's a pretty woke company Uh with regard to you know social issues So they're a little bit late to the train if they think that lego Just went woke. Yeah, I'm pretty sure they're a danish company, right? um, but look I I think that lego can do whatever they want to because lego Is based so I have the I have a couple of sets But my favorite one is the nes with the retro tv and it has like the super mario cartridge That is an amazing amazing set building that took me right back to my childhood. It was very nostalgic They even have an atari set lego is just an amazing Brand and um, they're expensive as though. That's the one complaint that I have not very woke there lego discriminating against socio economically disadvantaged people but either way for them to for them to Say that they've gone woke because A character has anxiety or a missing limb It's beautiful. I love it. I love hearing them describe banal things as woke You can tell that like they don't even care anymore.  I think that's her name.


I researched landslides on asteroids. A day in the life for me can be anything from making a landslide in a sandbox all the way through to working on set helping writers with science and movies. When we send robots to go explore asteroids and comets, we want to make sure they're safe where they land. Part of that is looking at how do rocks fall down, how does ice fall down, how do things tumble and fall, just like they would on earth, but in less gravity and with no air. I could never have guessed the career path that I'm on. What I could understand is that I liked solving problems and I wanted to make things better. Science is the ability to create the future that we want and the ability to understand how to solve problems. My name is Mika McKinnon. I am a disaster researcher in Vancouver, British Columbia.