In my previous video, I have demonstrated how we can download the Toastmasters dashboard data directly in Excel. This method works when we have an option to download the CSV file from the Toastmasters website. However, there are several reports on the website, especially the daily reports. For example, if I was to select the education achievement, this report does not have an option to download the CSV file. How can we load this data directly in Excel? Let me show you how. The Excel load from web is a very smart function. If you give the URL of any page, it will try to convert everything that it finds on that page into data. Let me go back to my page. This time I will select the URL which is on top here. Press Ctrl C to copy it. First go to Excel, select data from web and paste that same URL in this box by using Ctrl V. When I click on the OK button, Excel will go and load that entire page and try to make sense of the data that exists on that page. Let's click OK. As you can see here, Excel tried to interpret everything that is on that page and found couple of things. It found a document, it found three tables. What I need to do is check each item to see if it contains the data that we need. Click on document. It doesn't have any data. Click on table zero. It has some headings. I'm not interested in this. Click on table one. Also, it has data that doesn't seem to be of any interest to me. Finally, let's check what's there in table two. And voila, that is the data that I'm interested in. That's the table containing the education awards that were available on that page. Click on the transform data button. Excel will load everything it could find in table two. Scroll down to see if there are any unnecessary rows. This table has no unnecessary rows. All I have to do now is click on close and load. After a couple of seconds, the entire data set is loaded now in Excel. The beauty of this method is that anytime I want to refresh the data, I don't have to go to the Toastmasters website. I can simply click refresh and click on the refresh button. And the data will be automatically refreshed. You can go one step further by ensuring that anytime you open this file, the data will be refreshed automatically. If you want to do that, click on data, click on this arrow, refresh all and select connection properties. In the option refresh data when opening the file, enable it and click OK. Anytime you open this Excel file, Excel will automatically go to the Toastmasters website, get the latest data and refresh it in Excel. If you were to do any kind of analysis on this data, for example, a pivot table, we can do that by clicking on insert pivot table. Excel will automatically select the entire data set, click OK, create your pivot. Let's say I want to know the number of awards by division. I can simply select division in the row column, select award in the value column and it will give me immediately by division the number of awards. If I want to convert this into a nice graph, very simple, click anywhere within the table, click insert, select the type of graph you want and you have your division wise graph for the awards. Anytime you open this Excel file, it will reflect the current status of awards in your district. Isn't that cool? You can apply this technique to any unencrypted page on the web. All you have to do is give the URL that appears on the top of the page, go into Excel and plug that in and identify which table contains the data that you are interested in and tell Excel to load that data. That's all there is to it. I hope you found this video useful to extract any data available on the web directly into Excel. Have fun playing with the data.


Hi, this is just a heads up that our contest ends this Friday to win 10 gallons of free art resin Use the hashtag spread the love of art resin and art resin to enter on Instagram And if you need a little bit of inspiration Dave made something for his Valentine Rebecca you know we can't enter because he owns the company anyways enjoy Okay, so for Valentine's Day Rebecca had This one of Zoe I have five by seven on a wooden frame mounted It's one of those and so I added one of Xavier for her You know love it


When we create a table, we have to specify the data types of each column, and in SQL there actually is specified by the standard, a certain set of data types that must be supported. Unfortunately, this is one of the areas where the databases, the very SQL databases are most divergent because generally there's a lot of overlap because obviously every database needs a type 4 text, a type 4 numbers, type 4 binary data and dates and so forth. But even within that small domain, there's a lot of variation at the very least even in just what to call the data types. So you'll have examples where these two databases have the same data type that just give them different names, which is quite annoying. But if forced to produce a list of data types available in most of these databases, this is what I'd give you. First off, of course, we need number types. So we'd have a type for integers here called integer, which is usually a fixed size integer, an integer of a certain number of bits, whether that's 32 bits or 64 bits, but depend on the different on which database we're talking about. And then you'll usually have some number of float data types here float and double precision. And actually these are the names prescribed by the SQL standard. And yes, when you write double precision, you have to write out double precision. You can't just write double like you would in C or Java. And those two, of course, are floating point types where float is 32 bits and double precision is 64 bits. And then numeric is the name usually given to the decimal type. And for this type, we actually have to specify in parentheses first a precision and then a scale precision, meaning the number of significant digits and scale effectively meaning how large the magnitude of the numbers can get. How many zeros can you put at the end? For text data, SQL databases usually have two types, one called char, the other called varchar. For both of these, we specify in parentheses a number n, which is the maximum number of characters. The difference being that in a char, each value always takes up that full n number of characters, whereas in a varchar, the database may actually truncate. By its own discretion, it may actually store the data with fewer than n number of characters if the data doesn't need the full n characters. So you can have a varchar and say like 4,000, but then you have just a short couple words in there for the value and it'll be stored not as a full 4,000 characters, but just as however many are needed. And then for dates and times, we have date, time and timestamp, date being just the day of the year, time being just the time within the day, and timestamp being both together. And finally we need some data type for storing just arbitrary binary data, and usually that data type is called blob as in binary large object. So if there's some binary data like say an executable file, which you want to store in a database, then that has to be stored in a column, which has been declared to have the data type blob. Again, what data types are available exactly and what they're called, that differs significantly from one database to the next. This link at the bottom here takes you to your Wikipedia page with a good chart showing all the data types available in all the popular database systems and what they're called. So now we can finally get into looking at some real SQL code. First off, we create tables with a statement beginning, create table, and then we specify the name we want for this table, and then in parentheses we list columns, the names of the columns and their data types. And at the end of the statement, as with all SQL statements, we should put a semicolon. So this statement here for example, we're creating a table called cats, we're giving it four columns, one an ID column of type integer of course, and then a name column with varchar of 100, that is its string values up to 100 characters long. Then there's a lives column of type integer, that is how many lives does this cat have left, and weight, the weight expressed as a float, so like 12.0 or something like that. You may notice that I'm writing all of the SQL reserved words, the special words in the SQL language, I'm writing them in all caps, which is a common practice, but actually not required because the reserved words are not case sensitive. We can write them in any case we want. As for the identifiers, the names that we ourselves are creating, cats, ID, name, lives, weight, those things. By default in most databases, they're not case sensitive either. Some databases though actually have a configurable option where you can turn on case sensitivity for table names and column names and so forth. Now in our example, we created a primary key column called ID in a type integer, as we generally should for basically all tables, but recall what we really want for our primary keys is for the database to auto-generate these integer numbers for us, so we don't have to remember which IDs we've used and which we haven't. And the way we do this is we declare this column, this integer column, as a primary key with the reserved words primary and key. And now when we add new rows to the cats table, we don't have to provide an ID, it gets auto-generated for us and the database will ensure that the ID generated is unique and not otherwise used already in that table. So that's how to create a table. To remove a table from the database, we use the drop statement, and you just write drop table and then the name of the table. So here drop table cats will remove the cats table from our database and be clear that this will destroy the data in our cats table, so any data we've inserted will get lost. If you wish to modify an existing table by giving it a new column, we can do so with the alter statement. We write alter table, name of the table, and then add and then the new column with both the name for the column and the data type afterwards. Likewise, we can remove existing columns by writing alter table, table name, drop, and then the name of the column, just the name, not the data type. And finally, we can actually change the data type of an existing column by writing alter table, table name, alter column, and then the name of the column followed by the new data type. And understand that in most databases when you modify a column like this, changes data type, you actually wipe all the existing data in that column. So it's effectively like you really just deleted the column and then added in the new column with the new data type. I believe in some databases though for some kinds of conversions, like say converting from an integer value to a floating point value, I believe in some cases that it may actually do a conversion if such a thing is possible, depending upon what you're converting to and from. But really if you find yourself really needing to modify an existing table while preserving the data already in a column you want to change, well then you just extract all the data from that column into your application. Have your application do the conversion that you want, assuming one actually makes sense and then stuff the data back in. So there's always ways around this of course. And changing your existing tables is not something you do on a regular basis. That's like a design change of your application. It's not something done in the normal course of business. To insert data into a database means to add a new row into a table. So the insert statement, we write insert into the name of the table and then the reserved word values followed by a pair of parentheses with a list of values separated by commas inside. So here we write insert into cats followed by the reserved word values and then in parentheses a string mittens, strings in SQL are always enclosed in single quotes and then the number 9 and 12.0 and you may be wondering well which columns do these values get assigned to and the answer is it's the same order as when we declared the table itself. So when we declared the table we had the four columns actually. First we had the primary key but that value is being auto generated by the database itself because it was declared as a primary key. And then after that is we had the name field, the name column, and then we had the lives column and finally the weight column which is a float value. So this relies upon us remembering the order in which we declared the columns. So of course remember in a table there's no concept really of order between the columns except for this purpose. There actually is an alternate syntax where you can specify the names of the columns so you don't have to remember what order you originally declared them in but we won't cover that. It's a trivial variation but I'll leave it to you to look it up. To remove rows from a table we use the delete statement and write delete from the name of the table, the reserved word where, and then the predicate, some boolean expression basically. So here for example we're deleting from the cats table every row in which the lives value is less than three. To modify data in existing rows we use the update statement and we write update the name of the table, reserved word set, and then one or more column values which come in the form of key value pairs effectively. The name of the column equals sign and then the value to sign to that column and we separate these all by commas if we have more than one. And in this form we're not specifying any predicate to select rows so this will actually update every single row in the table. So here when we update the cats table and we assign five to the lives column and 9.0 to the weight column those two values will become the lives and weight values in every single row of the table. If we wish to update only certain rows in the table we append a where clause which specifies a predicate. So here we have the same thing but with a where clause with the predicate name equals the string fluffy. And this is confusing because in the set clause the equal sign is used as an indicator of like assignment whereas in predicates the equal sign is used as the conditional operator. It's performing a test returning true or false to pin upon whether these two values are equal. This is the equivalent of what we would write in say Python or Java as two equal signs rather than just a single equal sign which in the vast majority of programming languages is used for assignment not for a quality test. But in any case in this update statement then we are updating the value of the lives and weight column but only in that row or rows where the name of the cat is equal to fluffy. To perform a query we use the select statement which in its simplest form is written select then one or more column names listed separated by commas the reserved word from and then the name of the table. So here are two examples first we're selecting the columns name and lives from the table cats so we get back a table as a result of our query which has two columns name and lives and has all the rows of the cats table but just with those two columns. In the second example here though we don't specify any column names we just use the special symbol asterisk which is used as just a shortcut for saying I want all of the columns from this table. So select asterisk from cats will return effectively the entire cats table with all of the columns. Now in the SQL statement here where it's calling for us to specify a table we can actually specify a table produced from a join because well a join does produce a table right so we should be able to query such tables. So here we're selecting asterisk all columns from the join of cats and dogs. So this first query will return the cross join of cats and dogs with all of the columns. In the second example it's the same deal except instead of a cross join we're doing a left outer join. Remember commonly we call left outer joins just left joins. We could actually write left outer join here and that would also be acceptable but SQL most commonly we just write left join. And then finally the last example again it's the same deal we're doing a left outer join between cats and dogs. Recall though that outer joins and inner joins unlike cross joins may have a predicate which is applied to filter the rows returned by the join. So here this is a left outer join with the predicate specified in the on clause of cats.lives equals 6. And cats.lives here is the notation we use to specify the lives column in the cats table. And this may be important because the cats table and the dogs table there are cases where those two tables we're joining together might have columns of the same name so we have to use the syntax of writing the table name dot and then the name of the column to specify precisely which table we're referring to. So the join that's performed here remember an outer join is first effectively an inner join so we're inner joining cats and dogs together and then filtering on the predicate filtering to keep only those rows where cats.lives equals 6 and then because this is an outer join a left outer join we are then going to add back in any rows from the cats table which by that filtering process are no longer present after the inner join and so the outer join adds those back in matching them up with null values in the dogs columns. I should note here if you're wondering the syntax of SQL is freeform that's why we have semicolons at the end of our statements so the fact that we're indenting the on clause and putting it on its own separate line that's just basically a matter of style. And to make what's going on in the syntax clear we can actually put parentheses around our joins so it's clear that it just produces one single table from which we are then selecting columns. So the parentheses in these three examples aren't really doing anything they're just making it more explicit what's really going on. So we're performing joins here and then using the product of those joins as the tables upon which we are performing select statements. Now in any select statement we can add an optional where clause which is another predicate used to filter the rows. So here we're taking our last example and adding on a where clause that's filtering for the rows in which cats.name equals dogs.name so those rows in which the cat and the dog have the same name and you should be absolutely clear about when this predicate is applied especially in relationship to the predicate of the join itself. The join with its predicate that is performed first and then we are selecting columns from that product and then we are applying the where predicate where then we're filtering the rows with this additional predicate. Now if you wish to group your query on one or more columns you add a group by cause which is simply written group by the name of the column on which you wish to group. Again here we're qualifying the name of the column with the name of the table just in case the dogs also happens to have a column with the same name. And if you then wish to filter the rows after the grouping you use the having clause and what's special about the having clause unlike the where clause is that in the having clause you can use aggregate functions which is not the case with the where clause in most SQL databases. So here we're grouping cats by age and then we're using the aggregate function min to get the lowest weight out of each age group of cats and we're filtering those rows in which the minimum weight for that age of cat is greater than 10. Now again you should be very clear about when these various predicate clauses, the on clause, the having clause and the where clause you need to be clear about when exactly they get applied when their filtering gets done. And the on clause is it's a predicate applied in a join so it's performed during the join you can say the having clause is then applied immediately after grouping assuming there is any grouping and then the where clause is the final filter on all the rows returned by the select so the where always comes last. Now in our various SQL statements in our update statements, our select statements, our delete statements and so forth there are cases where the syntax is calling for us to provide some table or some value or some set of values and well normally when we provide say a value we do so by just writing the value ourselves in our SQL code it's possible to use a subquery that is to use a select statement within another statement and then if that select statement say returns a table then we can use it in a place where a SQL statement is expecting a table or if a select statement returns a table with just a single column then we can use that select statement in place of where SQL expects us to provide a list of values, a set of values and finally if a select statement returns a table with a single row and a single column that's effectively a single value right so we can use such a select statement in place where SQL is expecting us to provide just a single value. Now to provide an example of a subquery I'll actually introduce first a new operator the in operator which takes a value and then after it a set usually expressed as a list of values in parentheses and the in operator is a conditional operator which evaluates to true if the value is found in the set and otherwise it returns false so our top example here imagine let's say this is a where predicate and it tests whether the value from the column cats.lives is found in the set of 3, 6 and 5 so if cat.lives is equal to 3 or equal to 6 or equal to 5 this will return true otherwise it will return false in our second example here we're expressing the value not as a column name but as just a fixed value the value 4 but we're expressing our set not as a fixed set of values which we write ourselves in the code but as a subquery it's a select statement which is returning a table with a single column the column age from the table dogs and so this in operation here will evaluate to true value 4 is found in the column age of the table dogs aside from in we have a number of other operators which deal with sets and these are actually combinations of the existing comparison operators the equality operator the less than operator greater than less than or equal to greater than equal to etc it's those operators but then followed with either the reserved word any or all that turns these comparison operators into comparison not between one value between a value and a set and so in our top example this is an equals any operation with the value from the column cat dot lives testing whether it is equal to any value in the set 3, 6 and 5 in truth and equals any operation it's really just the same as an in operation swapping out equals any for in here would do exactly the same thing in the second example we have a less than or equals all operation which is asking is this value less than or equal to all of the values in the set so is 5 less than or equal to all of the values in the set returned from the column age in the table dogs so assuming the ages in the dogs column are say 7, 8 and 7 this will return true because 5 is less than both 7 and 8 if the ages in the dogs column though includes any value which is less than 5 then this would return false now subqueries can be pretty tricky to understand and I know I'm going over them quickly I'm kind of glossing over them but I will make one last point which is very important and that is you need to understand when subqueries are really performed in this example here we have a select statement which is selecting all the columns from dogs but then we're filtering those rows with the predicate dogs dot name in and then a set provided by a subquery and this subquery you will notice is selecting the name column from the cats table but then it has its own predicate its own where clause which is filtering on a predicate using not just a column from cats but a column from dogs and this doesn't make any sense if you assume that the subquery inside the other query is performed first which is kind of sensical because you would think just like in sub expressions expressions contained within expressions that you would evaluate inside out but that's not always the case with subquaries what's actually going on here is that the subquery in the where clause is being evaluated multiple times in the containing select statement the outer select statement we are filtering each row of the dogs table and this subquery in the predicate is actually being re-evaluated for each row of the dogs table and that explains how we can use a column from the dogs table in the predicate of the subquery even though the subquery itself doesn't involve the dogs table at least not in the from clause so once you understand when the subquery is actually being performed then you can understand how it works the remaining question though is whether this is a good way of getting the results because performing the subquery for every row of the dogs table sounds really quite inefficient and the answer is that in this case you probably wouldn't do things this way it's much more obvious if you simply use the columns and cats tables together and then use an on predicate to filter for the same condition of cats.name equals dogs.name this gives us the same results though actually to make it exactly the same we'd have to specify the columns we want with a name because actually we're selecting for all the columns now in both the dogs and cats table joined together which is not what we originally wanted we just wanted originally the columns from the dogs tables but otherwise this gets us the same thing being more efficient than the other really depends upon the database because databases generally try and do very aggressive optimizations such that they might take your query and then produce a optimization plan a query plan that does something quite different to get the same result so it could be the case in certain databases that these two queries actually trigger really the same internal actions and therefore take the same amount of time to perform


At the end of our lectures, we've seen a lot of writing tips that have been trying to give us. And I should mention that while some of these have to do with grammar, right? You should need to be grammatically correct. Most of the suggestions we're making are really just that, suggestions. There are situations where you might violate them with good reasons. We should try to avoid it. They're good rules of thumb. But be aware, these things are suggestions. I wanna offer another suggestion. And that suggestion is when you write in mathematics, use the active voice as opposed to the passive voice. Writing in the active voice typically makes your writing more lively. It feels more active, hence why we call it that. Also, I should mention, it typically makes things feel briefer. You can often say the same thing shorter in the active voice as opposed to the passive voice. But be aware that this is not a hard rule. It's just a strong suggestion. I mean, cause on the other hand, sometimes the passive voice can be the best composition of a sentence. But its usage should be minimized when possible. Did you see what I just did there? I used the passive voice in my sentence. There's gonna be times where you do use the passive voice, by all means. Try to use the active voice, but honestly the rule that you should be going for is clarity, okay? When you're deciding how to write something, it should be clear, right? Clarity and composition are the gold standard for mathematical writing. If you think breaking one of the rules that I've been talking about, like the active voice, actually makes your writing more clear. Like if using the passive voice, you actually believe makes your writing more clear, then break this rule and use the passive voice. These are general rules that I would suggest to you. Let clarity be your guide. What is best for your reader? So let's look at an example here. Let's take the sentence, the value x equals three is obtained through the division of both sides by five. This is an example of writing the sentence in passive voice. If we were to rewrite it in active voice, you end up with dividing both sides by five, we get x equals three. We definitely can all agree that this second sentence is shorter than the first one, much longer there on the screen. It says the exact same information. We have an equation, we divide both sides by five, we got the answer is x equals three. So we got the solution to an equation, we justified how we got it from the previous step division by five, but it's much shorter and much clearer. So this is definitely an example where I think the active voice definitely improves the clarity of your writing. Is that always gonna be the case? No, but strive to write with the active voice because generally that'll make your writing better in the long run. And so that brings us to the end of lecture 24. Thanks for watching. If you learned anything in this lecture or any of the videos you've seen, please like these videos, subscribe to the channel to see more videos like this in the future. If you have friends or colleagues who might benefit from these videos, feel free to share them with them, just share the videos with them. They will love them if you love them too. And as always, if you have any questions, feel free to post them in the comments below and I'll be glad to answer them as soon as I can.


Next question is from full view of the castle. Should I train behind the neck pull downs or overhead presses to achieve better mobility? Or is it just too dangerous? So this is one of those exercises that I was taught horse. I was actually taught as a trainer never Teach so when I first got my first certification They said never do overhead presses behind the neck never do pull downs behind the neck Totally bad for the shoulders. In fact, I literally I remember the instructor doing this the instructor stood up Got a towel so he had a regular towel and he twisted it and then he bent it and he's like This is what you're doing to the muscles of the shoulder when you go behind the neck and so I was like, oh my gosh I'm so afraid of these later on because all the bodybuilders did these exercises and I thought to myself You know, it can't be that bad. Let me try it out I first tried it out and I didn't necessarily have the mobility so I would shorten the range of motion and go real light Eventually I could do them full range of motion and then eventually I could add load and it made my shoulder mobility better Now, is this the best way to achieve better shoulder mobility? No, but I will say this if you can't do an exercise What you should probably do is figure out how to be able to do that exercise with good stability and good mobility because You're just improving your body's ability to move your and your shoulders should be able to do things with Exercises behind the neck. Oh, and now it's the only reason why it's dangerous A lot of people can't do it. So they have to get themselves to be able to do it Yeah, I'm gonna say that 99% of you should do the mobility work first and get that done And then go to movements like this and the reason although I will say I did what you did So I actually was while I was also working on shoulder mobility I was also doing behind the neck presses when I didn't really have the full mode in it started with just the bar now Here's the thing you got it if you do that case because that's totally fine You could do that you could start super lightweight and just get used to is you have to understand how the body Compensates in order for you to do that. Yeah, so one of the things and what I mean by that So when I I went from somebody who always shoulder press the front, okay Now I'm gonna start these behind the neck Well, what I noticed when I do this my low back arches and I slide you're probably pushing your head And then you push the head forward and so I would have to get in that position And then I would have to tighten my core Rotate my pelvis keep that in that position and then really slow and control you just do with the broomstick to start Yeah, so you have to you have to know how the body is going to cheat when you go to do that If you if you don't have the right prerequisite prerequisites first well So imperative like you pass the wall test you pass these things that we've sort of outlined In terms of like points of contact if you can't maintain it like it's sort of like there has to be a Prequalifier in there to be able to do because it is and I understand why certifications did sort of like put that out there Like they didn't want trainers basically jumping their clients into these because they do put you out a little bit more risk But there's a lot of value in them once you have the mobility in the strength to be able to pull it off It really does stimulate the muscles in different way Well, that's why this is so important because imagine I don't know that But I start working on that behind the head with a bar and then I had 25s and then 45s Meanwhile the whole time I've got this massive arch in my back and pushing my head forward in order for me to do it Yeah, less than ideal movement and your risk of injury now goes up way up So to me like I wouldn't recommend somebody do it's like how we talk about the barefoot training thing, right? Like if you never barefoot train like you shouldn't all of a sudden go run your your mile run every day barefoot like for the first I make start with just walking outside barefoot for a while and and start building that up before you start Well, that's why I liked to like Z-Press was it was a great one in terms of like really figuring out whether you have the thoracic Stabilization, you know to be able to keep everything all those You know to keep the bracing mechanisms in place so it protects your spine Yeah, this person should get maps performance So if you don't have maps performance like because we do the Z-Press in there we address mobility stuff in there So this is a perfect program for somebody who wants to get to a place where they can do these movements and to progress Them the right way there instead of just jumping to it and risking injury


Death on the Air and Other Stories by Nioh Marsh FORWARD by Susan Howitch What was so special about Nioh Marsh? For a start, she was one of the select band of female writers, those so-called queens of crime, who dominated the world of the classical detective story in its heyday during the first half of the century. Yet unlike her rivals, writing was never her first love. She trained as a painter, and later devoted herself to the theatre. In addition, she was a New Zealander, who, although a devoted Anglo-phile, was able to write about English life from the standpoint of a spectator, and the onlooker, as the well-known saying goes, sees most of the game. This unusual background suffuses her work and sets her apart from her famous contemporaries. She writes better than Agatha Christie, and unlike Dorothy Sayers, Nioh Marsh never commits the sin of falling in love with her detective and lapsing into sentimentality. An elegant, disciplined writer, Marsh deserves to be read and reread, not just for her plots, but for her characterisation, for her painter's eye view, and for her outsider's insights into the heart of a vanished social world. But most important of all her books provide such satisfying entertainment, amusing and civilised, but with an underlying sensitivity and compassion. They bring grace to a genre not noted for emotional depths. Nioh Marsh was not just a manufacturer of literary crossword puzzles. She was a supremely readable storyteller, who time and again compelled the reader to race eagerly onwards to the final page. An only child, she was born in a suburb of Christchurch, New Zealand, in 1895. Her father was a bank clerk, who had emigrated from England seven years earlier, and when she was still small the family moved to a newly built house in the Kashmir Hills, outside the city. This was Nioh Marsh's home for the rest of her life. For although she was striking in her appearance and popular with her contemporaries, a certain deep-seated shyness and the death in the First War of a young man who was special to her ensured that she never married. Her ability to write well was recognised at school, but her primary talent at that time lay elsewhere, and at the Canterbury College School of Art she won a number of prizes and scholarships. Meanwhile her interest in the theatre had been kindled, and in her twenties she somehow found the time to pursue all three of her talents. Living at home with her parents, she devoted herself to painting, but she was also earning money writing articles for one of the Christchurch newspapers, and when she was in her mid-twenties she had an unexpected invitation to join a touring.


You need to find what it is that you love, you know what you're truly passionate about. You need to find what it is that you're pretty good at, where your natural talents lie. And then you need to find where those two things intersect. And that point of intersection will be your strength zone. And the more time you can spend in your strength zone, certainly the more successful you'll be, the higher your performance will be, but the happier and more fulfilled you'll be as well. And everything I've ever done, basketball has been a spoke on that wheel. And even now at present, basketball is still a part of that. And, you know, growing up, I was a fairly decent youth and high school player. And I knew upon graduating that I wasn't going to be able to play basketball any further, but I still wanted to be attached to the game. So I started to develop an equal affinity for strength, conditioning, fitness and performance training. And I decided to be a basketball specific strength and conditioning coach. And I did that for just over 15 years before I made this pivot to what I'm doing now.


This is video 1 of a 10 video series, all about nursing resources and how to be an efficient researcher. Hannah Schmellen, that's me, is a librarian for health sciences and professions, and that includes nursing. Feel free to email me with any questions you may have. Now, I'll tell you what the other videos have in store for you. As you tap through the options, I do suggest watching them in order. However, I have done this setup so you can pick and choose what you need when you need it. Video 2. Go here for a super quick library tour of generally where to find what on the library's website. Video 3. Articles Plus is the first screen tab and default search on the library's homepage. This video will show you some features as well as show you how to get full text and online content. Video 4. If you are looking for books or journals, then Alice is the best place to search. This video will show you how. Video 5. This video highlights some of my favorite resources that are specific to nursing. It will also highlight some features of each of the resources and general tips. Video 6. Let's say you have an assignment that says, pick a topic that relates to nursing and it needs to be current. And you're thinking, I have no idea where to start. So this video tells you where to start when it comes to brainstorming and getting your topic off the ground. Video 7 focuses on taking your topic and how to search for it in databases. It's not the same as searching Google. So this video walks you through that transition of searching for Google to searching to research databases. Video 8. Senol and PubMed are two of the research databases you will be searching the most. So this video highlights these two resources in more detail. Video 9. Zotero will site and save all of your resources for you and it's free. But there are some technical setup things that you need to get taken care of in order to use this software. This video will walk you through all the steps to download and use Zotero like a pro. Video 10. This is just me saying hi and introducing myself.


Welcome back. So, we take a different kind of open system this time. So, we look at a heat exchanger. So, this does not really presuppose any knowledge about heat exchange. Such things are normally taught in a heat transfer course and we will not get into the intricacies of heat exchangers. We would just treat it like an open thermodynamic system. So, let us just read the problem here. In a heat exchanger, air is heated from 30 degree centigrade to 80 degree centigrade by means of a second air stream which enters the heat exchanger at 150 degree centigrade. Both streams have a flow rate of 2 kilograms per second and flow without any loss in pressure. Determine heat transferred between the streams and entropy production rate and we have been told to use Cp for air as 1 kilo joule per kilogram kelvin. So, let us see how do we approach this problem. So, one way to go ahead and look at this problem is to just draw some kind of a box here, a black box. This is our heat exchanger and we realize that there are two streams. So, we say that there are two inlets here. Let me call it I1 and I2. Similarly, there are two exits E1 and E2. We do not get into details such as whether this is a parallel flow heat exchanger or a cross flow or something of this sort. We just look at it as an open system. We just assume that these streams do not mix. So, we know that the first stream comes in at 30 degree centigrade and leaves at 80 degree centigrade. Whereas, the second stream comes in at 150 degree centigrade, the exit temperature is not given. It is given that both streams are at 2 kilograms per second and what else is given is that there is no pressure drop for either stream as it flows through this black box here. So, how do we go about solving this? So, a heat exchanger normally is used to exchange heat between two streams and overall as far as the outside world is concerned, it is an adiabatic system that is we do not want the heat to go elsewhere. It should only get transferred from one stream to another. So, we just show that this is an adiabatic system here and it does no work. So, we can just write the first law q dot minus w dot s and we realize that there are two inlet streams and in steady state, we call this m dot 1 and this is m dot 2. This is m dot 1 and m dot 2. m dot 1 at inlet is the same as m dot 1 at the exit. It is a steady state problem.  So, this is m dot 1 and then similarly for m dot 2, the second stream, if you had checked, you would have gotten a similar expression. So, you notice that if there are two streams steady, if they are not mixing, we can just write this assuming the same first law for open system and what do we have here? Overall, the system is adiabatic. So, we assume that this is equal to 0. There is no work transfer. This is 0. We assume that for both streams, there is no real change in the potential energy as the streams move from inlet to exit. It is a pretty good assumption. Put this as 0 and if the velocities do not change from inlet to exit for both streams, then there is no change in the kinetic energy.  Now, you notice that up till now, we have not talked whether the streams are made up of air or steam or some other gas or water. So, if it is made up of air, h e minus h i could be written as C p delta t. This would be applicable for air or water or any other liquid. We just have to find out the C p for that fluid. So, if this is air, then this is air. If this is water, then this would be water. If this is some oil, this would be for that oil and we assume that it does not change much for this increase in delta t. Now, if it was either a two phase system that is water or steam system or purely steam, then we would have to look up h e and h i from the steam tables and not go ahead and do this calculation. So, if any one of the stream is made up of steam, then use steam table for liquids, get appropriate C p C p and use delta h is C p delta t. So, now we have in the present case m dot 1 h e 1 minus h i 1 is equal to minus m dot 2 h e 2 minus h i 2 or we could write this as m dot 2 h i 2 minus h e 2. Now, of course, if the enthalpy of stream 1 increases that is h e 1 is greater than h i 1. This automatically means that the enthalpy of stream 2 decreases and that is because it is passing on energy to stream 1 and hence the inlet enthalpy of stream 2 would be greater than the exit enthalpy of stream 2 and vice versa. You could have as well assumed that stream 1 is the one which is losing energy and stream 2 is the one which is having its enthalpy raised.  Now, this we have C p air delta t air stream 1 is C p air delta t air stream 2 both streams are made up of air here we could as well remove this. So, we get t e 1 minus t i 1 is equal to t i 2 minus t e 2. Now, t because this is a difference I could have used degrees centigrade or Kelvin sometimes it is safer to operate in Kelvin, but I will leave it to you. We know let us say stream 1 is the one which is getting heated then it is getting heated from 30 degrees centigrade to 80 degrees centigrade. So, this is 80 and 30 and this here is actually going from 150 to a lower temperature t e 2, but we can now find out because everything else is known and t e 2 can be found out. So, this is how you go ahead and find out what is the exit temperature and if you want q dot then q dot is just m dot 1 C p delta t 1 and this is same as m dot 2 C p delta t 2. Of course, there would be a negative sign here because one is losing heat the other one is gaining heat and we can find q dot. What about entropy production rate? So, this is part b this is entropy production rate. You see that we have assumed that q dot for the entire this q dot is between stream 1 and 2, but q dot for the entire open system we assumed is equal to 0. So, for this entire black box that we drew here q dot is equal to 0 because there is only an exchange of q between 1 and 2 in between the 2 streams which are flowing here. I do not know how they are flowing, but there is an exchange this is entirely internal here, but now if q dot system is equal to 0 you know that the entropy production rate s dot p is equal to m dot s e minus s i if there is only one stream. In this case it would be m dot 1 s e 1 minus s i 1 plus m dot 2 s e 2 minus s i 2 and you notice that here there is no change in pressure I could have as well used a property relationship t d s is equal to d h minus v d p and since d p is 0 in this process we get d s is d h by t is equal to c p d t by t. If we integrate d s from inlet to exit we get c p ln t exit by t inlet this is of course integrating c p d t by t from inlet to exit we get this expression. And now you realize that in this case if we have net s dot p this would be m dot 1 c p ln t e 1 upon t i 1 plus m dot 2 c p ln t e 2 upon t i 2. Of course, in this case both the c p's are same in this case both m dots were also same. If one of the streams was made of steam then you would have to find out the actual entropy from the steam tables you would not do it as an integral of c p d t by t but you could have just found it out from the steam tables the s e 2 and s e 1 depending on the state. But in this case this is the equation you get and now notice that you can no longer use degrees centigrade. You have to use Kelvin when you are taking a log this is a ratio. So, you change 30 degrees centigrade and 80 degrees centigrade to Kelvin you notice that the exit temperature here is greater than the inlet temperature here in stream 1. So, this is going to be a positive quantity this is going to be a negative quantity. But overall if you check this will be a bigger number than this and s dot p will turn out to be greater than 0 as it should be. So, if you just go ahead and do it you will get 2 kilograms per second for both of them multiplied by 1.0 kilo joule per kg Kelvin for both of them this is m dot multiplied and then you have ln for the log of 353.15, 303.15 is the inlet stream and log 473.15 and 523.15. This is stream 2 and this is stream 1 and we can just put in the values this of course here is kilo joule per second kilowatt it would be 2 kilowatt per Kelvin and you have the 2 terms here 1 is plus 0.306 other is minus 0.201 and you would end up with plus 0.105 multiplied by 2 kilowatt per Kelvin. So, this is the entropy production rate you should get a positive number and that will be a good check. So, see what we have assumed here we had an air stream. So, we know what the change in enthalpies are. So, we know what the heat transfer between the two streams are and we can also find out the change in entropy and as I told you if one of the streams was steam or if both were steam then you would have to look up the steam tables and not go with cp delta t. Thank you.


Hello and welcome to this session in which we will look at yet another data structure whose value is a sequence and this can be called as lists or arrays sometimes also. They differ from stacks or queues in the sense that we are more powerful and there are many more operations defined on these objects. The stack and queues had some few simple operations like push and pop or insert defined for them. Lists have many more general operations defined already defined which can be used more easily and elements in a list can be accessed by their position in the list. So position is also another type whose value you can think of are just numbers or sometimes we also call it as an index in an array. So list operations use positions in the list as parameters and we will see that we can define many more operations on lists compared to stacks or queues. So list position is another type whose value you can think of it as just a number. So 0 is a position and if p is a position then there is a next position called next of p. Sometimes we also need a previous operation defined on numbers or position. Previous of 0 is undefined whereas previous of next of p is equal to p. So given any position p we can define a previous position to that except for the 0th position where it is undefined. And usually we need only these two operations for position. Given a current position we can move to the next or the previous position. And list operations will usually use positions as a parameter for the operation. So here is an example of an operation which finds the element in the list l at position p. So we call this operation as element at l is a list and p is a position and this returns an element in the list l which occurs at position p. So if the list is empty then there is no element at any position. So element at 5 of p is undefined for all positions p. If the list is non-empty that is obtained by pushing an element x in some list l then the element at position 0 is just the element x itself. So if the value of the list is push x, l the element at position 0 is the element x itself. Otherwise element at push x, l if the position is not 0 it is some next of p for some position p then the element at position next p in the list obtained by pushing x, l is the element in the list l at position p. So notice that in this definition the element position changes when I push an element in a list. So the element at position p in push x, l is not necessarily equal to the element in at position p in the list l. So at 0th position for example when I push x in l x takes the 0th position whereas the original element which was at 0th position in l goes to position 1 in the new list obtained by pushing x in the list. So here is another operation called insert which inserts an element x in the list l at position p. So insert 5, 0 x in the empty list if I want to insert at position 0 we just push x in the element in the empty list to get a list containing just x. In the empty list if I want to insert at any non-zero position then there is no such position at which we can insert so we say it is undefined. So inserting in an empty list at position next p is undefined for any element x. Now if you are inserting in a non-empty list push y, l at position 0 the element x we simply push x into that list so its value is push x, push y, l otherwise if you are inserting at a position next of p in the list push y, l next p y then we keep y at the 0th position. So this is obtained by pushing y in the list obtained by inserting in list l at position p the element x. So this essentially inserts an element x at position p and shifts all the elements right one position those that come after position p get shifted right by one. Similarly we can define the delete operation which deletes the element at position p from l. Deleting from an empty list is undefined for all positions there is no element at any position in the empty list. Delete from the 0th position in from the list obtained by pushing x from l gives the list l itself. So effectively removes the first element of the list. If the list is not empty and we are deleting from the position next of p from that list then essentially we keep the first element as it is and delete from l from the position t. So let us look at another function called first occurrence lx which returns the position at which x occurs in the list l for the first time and it is undefined if x does not occur in the list l at all. So first occurrence empty list x is undefined empty list does not contain any element. So first occurrence of x in a list obtained by pushing y l pushing y in list l is 0 if x is equal to y. If the first element of the list itself is x then the position is 0 otherwise we find the first occurrence in l of x and return the next of that. So the position will be one more than the position of x in the list l. So next of first occurrence of l comma x returns the position at which x occurs for the first time in l. So we can define functions on lists also using these operations. So either you can define functions using the standard way which is to define it for the empty list and assuming it is defined for a list l define it for a list obtained by pushing an element in l otherwise we can use the already defined operations on list and we can write more in a programming style the definition which gives a nutritive way of defining the function rather than a recursive. So for example finding the length of a list the length function can be defined as I define a variable called position whose value is 0. So remember positions are just numbers so we can assign a value to the position p which is 0 and now while there exists an element in list l at p we set p equal to next p that is while there is an element at position p we keep incrementing p till you reach a point where there is no element in list l at position p. So remember element at l p will be undefined when there is no element in l at position p and this will happen only when p becomes equal to the length of the list and so we return p. So this is the length function now here is another function which extracts a substring from a list l starting from position p and position q so it excluding the position q so it finds the sequence of elements in the list l starting from position p to position q but not including q. So again we will create a new list in which we will essentially copy the elements from the list l so set position p1 equal to p initially and p2 equal to 0 we set a list l equal to the empty list and while the position p1 is less than q and element at l p1 is not undefined there exists an element in l at position p1 we insert in s at position p2 whatever that element in l was at position p1. Then increment p1 and increment p2 as well so we will keep inserting in s will be an empty list in which we will keep inserting one element at after another at successively increasing position starting from 0 and position p1 will start from p and as long as p is less than q it will keep inserting the elements in s only thing is if say p was greater than q then the substring is not defined at all then we will not insert anything in the list l and similarly if the position q specified is after the end of the list l so that is at some point we get the element at position p1 in l is undefined then we will not consider it as a proper substring. So finally only when p1 is equal to q we will return the substring s else we will return it as undefined the substring is not defined at all. So here we are essentially using of the already defined operations on list rather than defining it using the standard way of looking at the empty list and the list obtained by pushing one element. So we can try many different functions now using these operations so as exercise we can try to write a function to count the number of distinct elements in a list. So you can do this in two way one is defining the using the standard way of defining operation define it for the empty list assuming its list l define it for a list obtained by pushing an element x in l otherwise we can also write an iterative function which uses the already defined operations on list which allows you to access elements at this different positions in the list and we can write a function in a programming style which does the same thing. You can try to see which way you find easier of the two both of them are defined ways of defining this function but some ways are more convenient than others for different functions. So here are some more exercises so suppose I delete consider the list obtained by inserting at position p and element x in the list l and I delete the element at position p will I always get back the list l. So I insert an element x at position p and delete from the resulting list delete the element at position p show that this will always give you the same list provided these functions are well defined. So if the position p is well defined in the list l then show that this will always be true also write a function to change the element at position p in a list l to x. So if l does not already have an element at position p this should be undefined otherwise it changes the value of the element at position p in the list to x. So this is different from inserting the element at x we are essentially replacing the original element by a new element rather than adding a new element to the list. So try these as exercises and we will continue further later. Thank you.


Hi, today we will see how do we perform a standard Norton Ramps Laparoscopic Distal Pantreatic Ostronectomy. The first step is to gain entry into the lesser sac Just we have to pull the stomach up so that the gastrocolic momentum can be seen Once the gastrocolic momentum is seen in size the gastrocolic momentum the first two layers of the greater Romantum to gain access into the lesser sac as you can see in the video We are cutting the first two layers of the gastrocol gastric momentum Once the lesser sac is entered the stomach is lifted up and the third and the fourth layer of the greater momentum is incised Once you incise the third and the fourth layer of the greater momentum you gain access to the pancreas now you can see the lesion in the body and the tail of the pancreas and The overlying fascia is nothing but third layer of the greater momentum Which is now cut. It is important to mobilize the stomach As far as possible this helps in good traction and hitching the stomach up onto the antirebdominal wall In this case, we were not sure of the Resection margin and hence the stomach was mobilized right up to The gastrodeodontal artery as we can see here with the red arrow That is the gastrodeodontal artery running on the superior surface of the pancreas once The stomach mobilization is done The whole of the pancreas Comes right into the vision for further dissection. The second step is to cut the root of the misentry of the transverse colon and expose the inferior border of the pancreas Now you can see by incising the root of the misentry of Transverse colon which runs from the second part of the deodenum right up to the tail of pancreas We expose the inferior border of the pancreas The whole of the root of misentry is Cut all along the inferior border right up to the tail as far as possible Underneath you can see the fascia and the deodenum. This is a relatively avascular plane And a combination of blunt and sharp dissection is performed To lift off the inferior surface and the inferior border of the pancreas from the underlying gerotas fascia You can see that by just performing the blunt dissection This avascular zone Can be easily dissected Now the next step is to understand whether the splenic vein and the splenic artery is free or not The stomach is hitched to the anterior abdominal wall So that minimum trauma Occurs to the stomach This helps in keeping the stomach away from the dissection area Also, it reduces one of one port The root of the misentry Is cut and is continued as distally towards the tail as possible Making sure that the whole of the inferior surface of the pancreas Is lifted off from the underlying fascia Covering the deodenum and the gerotas fascia slowly and steadily making sure With the help of a gauze piece That no trauma at any given point of time occurs To the tumor This is a young lady Who who was diagnosed with pseudo papillary tumor of the pancreas cystic neoplasm of the pancreas Now you can see the under surface of the normal pancreas being lifted off From the gerotas fascia Subsequently, we are also trying to assess Whether the splenic artery and the splenic vein can be separated in order to preserve the spleen However, in this case the size is around five to six centimeter and is engulfing not Not engulfing but actually In close proximity and a butting the splenic artery and the splenic vein Now we are cutting the lower polar division of the splenic artery Which took off early This was seen on ct angiography Now the splenic vein and the splenic artery are identified From the inferior aspect or the inferior surface of the pancreas In order to minimize the tumor handling One should be sure of minimizing the tumor handling Once the inferior dissection has taken place The splenic artery is now dissected from the superior border of the pancreas Now you can see the main splenic artery Running all around All along the superior border of the pancreas This splenic artery is identified Looped and ligated with the help of Hemologue clips This part of the step is performed only when you are when you are assured That the tumor is closely abutting And saving the spleen may result into A positive radial margin The remnant attachments of the splenic artery with the pancreas Is cut with the help of a vascular loop And the remaining attachments Are cut In order to separate The whole of the splenic artery From the pancreas as is being shown in the video Once the splenic artery is ligated and cut Rest of the procedure is relatively avascular The splenic vein is completely mobilized With the help of a gauze piece The tumor is retracted To be sure that none of the laparoscopic instrument perforate the tumor The splenic vein is mobilized in order To have space for the vascular Staplers to go through For the ligation of the splenic vein This is a curved tip Laparoscopic stapler Of johnson and johnson Which helps in easy maneuverability For stapling of this splenic vein Once the artery and the vein are ligated and cut This the pancreas Is lifted up In order to separate the inferior surface Of the pancreas From the Gerotas fascia This pancreatic parenchyma Is lifted off Taking care Taking care So that The tumor is not perforated At every given point of time The traction should be gentle With the help of a gauze piece Or The traction should be put At the normal pancreas As you can see now in the video The whole of the pancreas Is now lifted up And the superior attachments Along The stomach and the pancreas Are cut right up to the spleen Once all the attachments superior and inferior are cut The spleenocolic ligament And the gastro splenic Short gastric vessels Are cut And the pancreatic parenchyma is ready For division by the stapling technique Our experience of dividing The pancreatic parenchyma With stapling technique has been very good And we have not observed High leak rates This is a very important step In which The stapling is Before stapling is done the compression Is put for 10 minutes And half of the pancreatic parenchyma is divided And not the whole of the pancreatic parenchyma The rest of the half Is again compressed for 10 minutes And then again staple is fired This ensures complete and safe stapling Of the whole of the pancreatic parenchyma Along with a good margin As you can see in the video The division of the pancreatic parenchyma is done The rest of the mobilization of the pancreas and the spleen is a very simple and safe procedure This ensures complete dissection of the pancreatic osplenectomy procedure Thank you