Good afternoon and I would like to again welcome all of you to this workshop. I'll take the first part of the presentation just to talk about the metrics that's reported in the instructor report of the student experience of instruction. And then I'll turn it over to my colleagues to introduce the instructor dashboard, which is under development. And then we would have a question and answer and some activity before the end of the workshop. So next slide please. So in the next 90 minutes, we will go through what we expect to achieve. We'll talk about changes to the instructor report, the type of data that we are dealing with, which is the student experience of instruction data. And then I'll go into more details about the new metrics that is reported in the instructor report. There will be an introduction to the demo of the instructor dashboard, which is under development. And we will have an opportunity for question and answer and we will end with a group activity at the end. And possibly some more time for question and answer. So by the end of this session, we hope that you will be the participant will be able to will be have will have a better understanding of the report metrics in the instructor report. And be able to explain how two of those statistics interpolated median and percent free available can be used along with a measure of dispersion dispersion index to interrogate the data in a more meaningful and fairer way. And also be able to use graphics as simple scatter plots to explain these concepts behind the new metrics. The changes started back in 2018. And through a transition phase, we first switched from the standard deviation as a measure of variation to the dispersion index. During that transition, we were reporting the old metrics along with the new. And in the 2019-20 academic year, we switched to the new metrics. The key statistics reported and the report include the response rate in interpolated medium percent favorable and dispersion index. And this is just by the way there are some changes that were introduced in 2021 where the six university module items six questions were updated with the new modified questions. But this is beyond the scope of this workshop, so I won't be talking about this. Just a bit about the student experience of instruction data. The data is categorical in nature, but it is also ordinal. And by ordinal, we mean that the categories in which we capture the data are have a some sense of order. For example, on a five-point scale, strongly agree is better higher than agree, which is higher than neutral and so on. And at UBC, we collect this data by using a balance like a type rating scale. Now a balance scale would have equal number of favorable and favorable responses, which may or may not be, which may or may not include a neutral response. So as long as there is equal number of favorable responses and unfavorable responses, the scale would be considered balanced. So the UMI question use a balance five-point scale that's balanced around a neutral response to a favorable and to unfavorable. There are some faculty question that use a balance seven point like a type of scale again with three responses that are unfavorable, three that are favorable and a neutral response. Next slide, please. So these are the examples of the two response, the two balance scales that we use at UBC five-point. And as I said, some faculty use a seven-point scale. Both of them have a neutral category with equal number of responses categories on both sides of the neutral. Next slide, please. So we're going to take a quick look at the instructor report. You're probably familiar with this report. On the first page, you have a description of the section instructor. This is just a test run with only two students and two of them responding with a hundred percent response rate. So this information is in the dark blue. And then blue doesn't have the capability to tag or to flag surveys that did not meet the recommended minimum response rate. So we provide this table so that instructor can look to see if their particular survey has met the recommended minimum. For example, if the class has 40 students, that would be in the certified to the 49 category and 40 percent would be the recommended minimum. Does that mean if there is 39 or 38 percent response rate that the data is not useful? No, it doesn't mean that. It just means that if we do not meet the recommended minimum, then we need to look at other factors and interpret the data with caution. Next slide, please. Next, we have the six item, the six university module item, the six questions. And we have the uppercase N is the number of invited students. In this case, we have 42 in this test example. We have two that responded, 100 percent response rate. And then we have a breakdown of the responses by the five categories ranging from strongly disagree to agree. And you can point to them as it is followed by another applicable category and then the interpolated median and dispersion index. I just want to say that the interpolated median is reported to the nearest one tenth to the nearest one decimal. The dispersion index ideally should be two because of the range of it. We'll talk about that later. But unfortunately blue doesn't have that. I think it only allows you to select the number of decimals for all the statistics. At least for those ones. The percent favorable is reported below and it is to the nearest one percent. Next slide, please. So I'm going to talk now about the three statistics in more details. The first one, which is the most straight for one is percent favorable. On a five point scale, the favorable responses are those that are higher that neutral agree and strongly agree. And percent favorable would be the proportion of the responses that are higher than neutral expressed as a percentage of the total received responses. So, for example, if out of 20 responses, we have 18 of agree and strongly agree, then that would be a 90 percent favorable rating for that particular question. This is a simple statistic. It is intuitive. It's informative, but it is blunt in the sense that it does not distinguish between a four and five or between the one and two. And so that's why we need to use it with other statistics to have a better meaningful look into the evaluation. Next slide, please. The particular dispersion index, which is a measure of the variation in the data that we use at UBC. This index is actually very suitable for ordinal data and it ranges in value between zero and one. A value of zero indicate that all the students respondent rated their experience using the same category. So they are responded with agree or strongly agree, whatever the case may be, resulting in a dispersion of zero. There's no dispersion in the data. One would be the extreme and the other end. And this happened if we have an even number of responses and the respondent is split evenly between the two extremes of strongly disagree and strongly agree. So we have a very polarized rating of their experience and that would result in a dispersion index of one. In our data at UBC, dispersion index rarely exceeds 0.8 and when it does, so if we have a dispersion index greater than 0.8, usually that comes from the small sections where the minimum recommended response rate was not met. I will talk more about those statistics in more detail. So here there's actually this example of the dispersion. I just want to focus on the response categories, the first column, the count, second column, and the dispersion index rate. Don't worry about the rest of the calculations. So what we have here is we have secrecy responses and they were split between two neighbouring cells, two neighbouring categories. So in this case, 30 in neutral and 30 in agree. When the responses are split evenly, split between two neighbouring categories, the maximum dispersion will be 0.25. Let me say that red. And if we change this distribution between the two cells, the dispersion index will go lower than 0.25 as long as it is in two neighbouring cells. In the second example, we have the responses between two categories that are one category apart. So this agree and agree with neutral in between them. So they are not neighbouring cells. There is actually one category separating them. In that case, the maximum dispersion would be 0.5. And if they are separated by two categories, as in the third example, the maximum dispersion would be 0.75. So that's just a theoretical aspect of this particular measure. Next slide, please. And here we see if you can click off three of them. So the first one is an example of a lower dispersion. And we see that the responses in this particular case is in two cells. Most of them 40 is in one cell. 20 is in the neighbouring category. And that results in a lower dispersion. In the second example, we have the responses are spread across the five categories. If you look at the count column, they are spread across the five categories. And this results in a high dispersion of almost 0.9. And then the last example is the theoretical maximum when the student responses are split between the extreme values of strongly disagree and strongly agree. And that results in a dispersion index of one. Next slide, please. So before I get into the third statistic, which is the interpolated median. I just want to talk about medians and distributions in general. And we're going to follow those two examples for instructor A and B. These are the responses for a particular question. And they are ranked from lowest to highest. And we, these are actually 18 responses. Sorry, 19 responses. So they are odd number. And so the median would be the 10th response with nine responses above it and nine responses below it. So the median here is four. But if we look at the value of the median of four, we see that there are actually seven responses, you see the light blue, the fives that are higher than the value of the median. And there are three responses in red that are below the value of the median. And there are nine responses that are equal to the median. So I just want you to keep this, you're going to see this distribution again. Instructor B, the median is also four. And if we look at the distribution, we see that again, we have nine responses that are equal to the median. So there is nine fours. There are only two responses of light blue that are higher than the median. And there are eight responses that are below the median. And we're going to see how we're going to take that into consideration when we compute the interpolated median in the next slide please. So the interpolated median is simply the median with the 50th percentile and it is adjusted. So it's an adjusted median. Think of the interpolated median as an adjusted median. And the adjustment depends on the number of responses that are less than the median plus responses that are greater than the median and those that are equal to the median. So in the case of an odd number of responses, one value would be the median and we adjusted by the quantity on the right. That equation I am equal to m plus n plus minus n minus divided by two. So the number of responses greater than the median is n plus and minus would be the one that's the number of responses below the median and n is the number of responses equal to the median. So we use that equation to calculate the interpolated median. If we have even number of responses, that would be the case of equation two. And in that case, the interpolated median is simply equal to the median. And we will continue with the examples in the next slide. So these are the two instructors A and B that we saw before and we saw the distribution relative to the value of the median. So in the first case, case A, we have nine responses that are equal to the median or seven that are greater than the median. And three that are below the median. So because we have more responses higher than the value of the median relative to those lower than the value of the median, the median is adjusted or interpolated or adjusted upwards resulting in an interpolated median of 4.2. In the case of an instructor B, we have more responses that are higher than that are lower than the value of the median. We have the same number of responses nine equal to the median, nine fourths. But there is only two that are higher than the median because we have more responses below the median value. The median is adjusted or interpolated downwards. And in this case, the interpolated median is three points. So next, we're going to look at those two distribution in pictures. So this is the histogram tells us that these are two markedly different distributions. They both have the same median of four. One have an interpolated median of 4.2. The other is 3.7. And we see the associated percent favorable are 84 percent and 58 percent. And the use of this matrix in a publication that we have submitted for publication is based on a unique relationship between the interpolated median and percent favorable, which I'll get into more in details. And that's actually formed the basis for the use of this matrix at UBC. Next slide. So this is the case of equation two where we have even number of responses. And in this case, the median will actually be the average of the two values in the middle because we have even number of responses. And here in this case, it is the value between five and two. And the median in both cases is actually in both examples C and D is 3.5. And below, I give the expected range of the distribution index. So if the data is all fives and two in the first example, if this is all the data we have in this example, the distribution index would be exactly 0.75. But it is potential. There is a potential that the two, which is the nines value, could be the only two and the rest could be ones. So in that case, the distribution would be higher. And the third approach. In this case here between if all the values are fours and threes, the distribution index would be 0.25. But if we have fives and twos and ones in the data which is quite possible, then the distribution will be higher than 0.25. And we could approach one, if all the values, if the four and the three that we have in the center of the only four and three, and the rest of the data is fives and ones, the distribution index will approach one. So this is the case for the interpretation. If the two middle values are both favorable responses, let's say if the median is between a four and five, then percent favorable will necessarily be greater than 50%. If the median is the value between two unfavorable responses, like a two and a three or a three and one, then percent favorable will necessarily be less than 50%. When the median is the middle value or the average between a favorable response and an unfavorable response as in those cases, then percent favorable will be exactly 50%. Next slide please. So when in the case of an even number of responses on a five point scale where the median is the midpoint between a favorable and unfavorable response, these are all the possible outcomes. So the mid discourse could be a three and a four or a three and five, two and four, et cetera. And this will be the median or the interpolated median because they are one and the same. And the expected range of the distribution index is given. I just want you to note the last one. If the median is the mid value between a value of one and five, that means there is no twos, threes or fours. The data is made of ones and five. And the distribution index would be the maximum one as we talked about before. So given that the students tend to read their experience of instruction favorably more often than not. And this is well established in the literature. The interpolated median is actually preferred to the mean and to the median for that matter because it reflects the distribution of responses a lot better. It is also closely related to the percent favorable and by closely related, we don't mean just a simple statistical correlation. There is actually a unique and interesting relationship between the interpolated median and percent favorable that has not been previously reported in the literature. And we are actually reporting it in our publication and using it as a basis for this matrix which we have been using in UBC in the last few years. As a general rule, for a five point like a scale, an interpolated median of 3.5 corresponds to a percent favorable rating of exactly 50 percent and this is mathematically exactness for exactly 50 percent. And it divides the evaluations or the instructor evaluations into two distinct classes that are above 50 percent and those are below 50 percent. And we can see that in the next slide when we show the relationship in a graph. So this is UMI Question 5 from 2020. So these are all questions about this instructor showing concern for the student learning. By and large for all the questions, 90 percent plus of the instructors would be in the upper right quadrant. And 5 to 10 percent would be in the lower left quadrant. Mathematically, there should be no values, no dots in the upper left quadrant or the lower right, meaning that if the interpolated median is less than 3.5, the percent favorable cannot exceed 50 percent. Nor when the interpolated median is greater than 3.5, percent favorable will not go below 50 percent. And so if you go back to that previous slide, please. So each dot in this graph represent an instructor for that question. So we have the interpolated median for that. So if you point to the next one, the one next to it, this is the next one. Next to it, yes. So TZ-tash is pointing to this instructor here. This is actually campus-wide for that question. This is all the instructors at UBC. This particular instructor has an interpolated median of 4.5. If you go vertically down. And if we go across, we see that they have a percent favorable of about 66 or 77 percent between 65 and 70. And so this is how we read this scatter plot. I'll talk more about this relationship and show how the three statistics, even though we are plotting the percent favorable across the interpolated median, this page in index plays an important role in interpreting the interpretation of these results. And we will see that in more details. But next, we will see how this relationship extend to a balanced seven-point scale. And if we see here, the only difference is that on the x-axis, the pivot point of this relationship shift to an interpolated median of 4.5. But again, the data is divided into two upper right and lower left quadrant with no data in the other two quadrants. In the next slide, we'll take an example of one academic unit. And if you can click so that we can see the data. So this is one academic unit, a particular school or department. Again, this is from 2020. And what we have here is all the instructors for that particular question five in this unit. The red dot is the aggregate for that academic unit. It has an interpolated median of, the data is on the left, an interpolated median of 4.2 and a percent favorable of 76 percent and a dispersion that's moderate to high of 0.5. Now we're going to look at four instructors. A, B, C, and D. And we'll start with instructor A. Instructor A has, if you look at the data to the left, it has, for this particular question, an interpolated median of 3.9, which is about slightly lower than the aggregate of 4.2. But the percent favorable is 80 percent, which is 4 percent is points higher than the aggregate. And the reason being that it has a slightly lower dispersion of 0.3.5. So if we use the mean or the median or even the interpolated median, this instructor could be rated as being lower than average, slightly lower or lower than average. But if we look at all three statistics, we see that because of the low dispersion, this instructor actually has a higher percentage of a student that rated their experience favorable. The picture will get clearer as we look at the other three instructors. If we look at instructor C, we see that instructor C has an interpolated median of 4.3, which is comparable to the aggregate of 4.2 for that unit. But because of the low dispersion of 0.24, and that's a little considered low, they have a percent favorable of 100 percent, meaning that all the students who responded rated their experience favorably. Again, if we just use the mean on their interpolated median, this instructor would have been rated average, but there is really nothing average about 100 percent favorable responses from the students. Now we're going to look at instructor D and B. Both of them have a relatively high on a scale of 1 to 5 interpolated median, 4.6, 4.5, which would be considered high on this scale of 1 to 5. If we look at instructor D, because of the low dispersion in their data of 0.25, there is a 100 percent favorable response, meaning that all the students rated their experience favorably. Whereas in instructor B, even though this instructor has a slightly higher interpolated median of 4.6, because of the high dispersion in their data, the percent favorable is 73 percent, which means that more than one out of four of the students in this section who responded did not rate their experience favorably. This example is meant to show that when we look at the three statistics together, we will be able to meaningfully and in a more fair way look at the interpolate and look at the evaluation of instructors more so than if we just look at one and run a statistic. And this is the basis actually on which we switch to this new metrics and this is the basis for us proposing this metrics in a publication that we hope to see the light soon. And I believe this brings me to the end of this presentation and I'm going to turn it over to Alison to talk about the instructor dashboard. Sure. Thanks. I just have a quick introduction to the dashboard. It is something that our team has been working on in the last year. So mostly just cash working on building it and developing it. And we've been working on this in the last year and what we are hoping to do is get us some feedback in the next couple of months and with the goal to release the dashboard to instructors as we release the winter term one results and that is in January. So that's our current target timeline and I'll just turn it over to Stash and what you're about to see is a very still in the development stage quite pilot. We're kind of still working on it and making changes as we go. So feel free to let us know what you think and provide feedback. This would be great for us as we work on this. Thank you. Thank you Alison and Abdulazim. So I will go through the dashboard. Let me know, you can see the dashboard, right? Yes. Okay, good. So this is the landing page of the dashboard that is working in progress and the landing page has some information about the different measures and it has some navigation buttons. As you can see, this is the contact link. If anyone wants to contact the SEA team and there is also a more detailed contact here when you click in it will open a new page so that you can get more information about the SEA and there are also navigation buttons here and image so that you can click and jump into the different visualizations we have. So on this dashboard we have two visualizations and one data summary table and the first visualization is the scatter plot and on this scatter plot I will go through the different filters and the points that you can see here. So the first filter is to select campus as UBCO and UBC Vancouver and the second filter has two options for the pre and post, pre-2021 summer and post-2021 summer that shows where the UMI questions, the UMI module questions are revised and on the second we can select the year now it is selected pre-2021 summer so when we select one year it will show the respected individual instructor's data points here and this filter is for the sessions for this demo it is only winter 2 session is included that's why it shows only winter 2 and then the next filter is for the UMI questions and all the six UMI questions are listed here and for better visualization it's advisable that to select two or three maximum of three UMI questions at a time and now we selected UMI question one, two and three and when you come here the dark blue dots indicates the courses taught by a given instructor and when you hover over it shows the instructor name the year in session, the course name whether the course meets the minimum requirement the interpolated median percent favorable and dispersion index and the background light blue dot shows all courses and all instructors in the respective campus so an instructor can see how the courses that he or she taught in context with the overall UBC campus course and instructor and these red dots indicates the campus wide measures for the IM and percent favorable then here when you switch to the pre and post the question description also shows changes depending on which period you selected and here let me check some points to elaborate and give example as to what Abdulazim shows in the slides before when we take two points as you can see there is no point let me select only two UMI as he mentioned there is no point here on these two and you can see only on the lower left corner and on the upper right corner of the quadrant and if we take two points here for a given interpolated median as we go down and as the variation increases the percent favorable will go down here and this is just as an example as to what he mentioned there so the upper here point shows interpolated median of 4.5 percent favorable 95 and the dispersion index of 0.34 but when you go down the percent favorable will go down while the dispersion index is high and we can also see for another UMI question here and let me exclude the first one the same example here if we take these two points as we go down for the same interpolated median you can see the percent favorable is 76% 76% in dispersion index is 0.48 then when we go as the dispersion index increases the percent favorable will decline from 76 to 67 and let's see if we can get an example to see how it behaves in the lower quadrant let me switch to the other category and take a year in 2021 and if we can have an example here okay for UMI 2 we have points on the lower quadrant and here the behavior is reversed from what we see as we go from this point to this point you can see that the percent favorable and the dispersion index behaves the same for the higher dispersion index the higher percent favorable and the lower dispersion index the lower percent favorable then this is for the scatterplot and let's jump into the second visualization that is the trained line there is a question in the chat okay let me see okay when an instructor has more than one section or course will there be a filter for the course section on the current as we mentioned before this is this dashboard is still under development but it is possible we can add a filter here but currently it is showing all courses that are given that are taught by that instructor or the same academy for this academic year and for a given section so here it can be changed to like section session winter or summer or winter one or winter two but we can add a course filter here that it is a good comment thank you then so let's go back to the landing page in order to navigate to the second visualization so this is a trend line and in order to see the visualization here first we need to select a specific course because we are going to see the behavior of that course throughout time and we will have the same filter here for the pre and post 2021 summer then we will have an academic session here here because we are looking for a trend more than two at least two or more than two academic years needs to be selected the same for the session and for the UMI question we need to select like two or maximum of three UMI questions at a time and here the red lines show the person favorable and the blue lines show the interpolated median so you can see here and when we go to the second filter definitely as more data are added in the coming periods these lines will be a bit longer than usual so you can see here this is for the person favorable and this one is for interpolated median so this visualization so how the lines behave for different courses and different academic periods then I go back to the landing page and the last part on this dashboard is the summary data and this shows a summary of the data for the courses that are selected on the scatterplot and it shows like which period the courses the question with the full description whether it meets the minimum requirement meet or not in the three measures and it will have these filters so I think by this I will finish the dashboard part if you have any question I will bring you back to the main presentation and thank you


Good afternoon, everyone. This is a joint session of Senate Finance and Appropriations and House Appropriations and House Ways and Means. So there's quite a large group of legislators here to listen to an update from Congressman Welch. We're so happy that he's able to join us today and give us a briefing. And I know that your schedule is crazy and that you might have to leave for a vote, but we're more than happy to have you come for as much time as you can give us to help us understand all that's going on and particularly as it relates to the latest financial relief bill and what it means potentially to the state of Vermont. So with that, I don't know what screen I'm just going to put you on as the speaker and let you take it from here if you are ready to do that. Are you there? I'm here. Oh, great. Oh, there you are. Wonderful. Yeah. Thank you. I'm going to let you, everybody wants to hear you, not me, so welcome Peter and so glad to have you. Well, actually I was not early when you were giving your intro and I want some of those cream puffs. We could use some cream puffs down here. Yeah, that's for sure. Well, the chair of our appropriations committee, what wonderful rows of the world is a cream puff fan as well. So I'm going to pass that on. Senator Kichel, thank you when I see Senator Ballant this year, Senate President, first woman to the Senate, you know, you guys got a chance to get something done between the appropriations chair and the Senate President. All our money chairs are women. Well, that's in good hands. Yeah. That's pretty, that's pretty good. Yep, Senator comics my old share. I see her right there. And of course the mayor. You know, it's just so I'm stuttering around here because I'm so happy to see you. It's really, really wonderful to be with my old colleagues that I said I've served 13 years in the State House and honestly, I think about my work here and my work there. The intimacy of the relationships in the State House, the fact that everybody has to do their own work that you actually have to work it out with face to face or zoom to zoom interactions. There's an enormous benefit to that part as it is to be doing all that work. It's something that's very intimate, both in my memory of the interactions I had with many of you as we try to work out the best path forward. And also just that connection you have with the voters that you represent it's it's really, really extraordinary. And when you're in the midst and when you're in the midst of it in the early burly sometimes it's easy to forget that. I don't remember who you're mad at for what they just did, but you're going to look back at this extraordinary time where you had to help guide Vermont through once in a century event. And more work continues for this began a year ago. And I remember coming back to Vermont after we passed one of our first bills. The governor just declared the state of emergency. And I might have told the story before, it just showed we were in a different world I was on my way out to Reagan National Airport to fly back to Vermont on the 10 o'clock flight. And I got a call in the car. It was American Airlines. This is when American Airlines used to fly three times a day back and forth between Burlington and Washington. The call the person said, Congressman Welcher you still planning on taking the plane going to Burlington and I said, Well, yes, I'm on my way and they said, Well, as soon as you get here we're ready to leave. I was the only person on that big plane. That's how much our economy just went into shock when the decision was made that the threat of this pandemic so severe. And of course, that was a year ago. Now we're here today. And of course we just passed the 500,000 mark of real people in Vermont and all around the country who died as a result of this. It's been pretty devastating. And then of course you guys have had to deal, not just with the proper response in the health care element of this is really brutal. But just the economic pain and the anxiety the parents feel when they're worried about their kids, their health, worried about school, trying to get schools back open. And then you have your downtowns and your community centers together. I see Senator Westman trying to help with our farmers that are already laboring under incredibly low milk prices and have to deal with this. So there's an immense human factor here, not to mention exhaustion that all of us have I think of being just disrupted from our normal routine. And our ability to interact with our friends and with our family. We just think about the thanksgivings and the Christmases and Hanukkah all the holidays that we had it's really taken a toll.  And what's so important about the job, we've got to get the policies right we've got to get the resources back to the state. So there has to be a communication from political leaders of confidence of directness of steadfastness and respect and empathy, because we need each of us needs that we need to convey it when we have a position of public trust. And I think that if we have confidence in our institutions and have the capacity with solidarity to get continue to get through this. So I just want to say that to you as a citizen of Vermont that I really respect and value the challenge that you're facing and how you're chasing facing it really really makes a difference. I'm going to look back at this extraordinary time where you can't be face to face it's very frustrated. I'm in a similar situation, most of our committee work is on on the equivalent zone. It's very frustrating to me that I can't interact with my colleagues, but it's the way we have to do it for now. Now the good news is, there's two pieces of good news one is we've got the vaccine. We didn't know we'd have it a year ago. I think Dr Fauci was thinking maybe sometime this winter we get a vaccine has been accelerated so that's really good news and you're getting distributed. So we know the end is in sight. The second, I think piece of good news is that in fact there has been at the federal level, a very substantial economic response that has been a lifeline to mitigate but not eliminate the incredible dislocation that we're experiencing in our economy. And saying that in a general sense is not to disregard the specific folks who run restaurants or a performance space like the Flynn or catamount arts. These organizations that are in our communities that are so essential to the well being in the vitality of local life. So, that's the, that's, that's, that's but it's good news that we have had a federal response. And I think that in the cares package, you know, so far about 4.8 billion dollars has come to Vermont, some that you've managed some in the form of checks to individuals some in the form of unemployment compensation. Some in the form of the payroll protection plan that helps small businesses. To keep people on the payroll. That is really made a difference just think about where we would be if we hadn't had that help come back to Vermont. We in Washington need back Patrick and Bernie have been advocating very very fiercely that the money that does come to Vermont, especially through the state that you have a lot of flexibility. I really do believe on the basis of my experience sitting in your seats. During the 13 years I served in the state Senate that the House the Senate and the governor have a much better handle on how best to allocate those resources so the flexibility that you've been advocating to me and to burn in Patrick that you have we've been advocating the cares package had the less flexibility and we liked but we in the last December package got the deadlines extended later than I would have liked because it already had to make decisions on the basis of the laws that was then. So, that's just by way of introduction to what's up now. On Friday, I'm going to be voting here in the house on a $1.9 trillion supplemental package. And I think you probably from joint fiscal from from Steve and Catherine and others have the outline to that so I won't go through it in super detail but bottom line here is that one it's very significant, the amount of money. And that's based on the view of economists that that that our economy is very fragile in the future is uncertain, and it's better to air on the side of doing a little bit more than it is to air on the side of doing too little. And the rationale for that is that with the combination of vaccines, then the potential, the likelihood that when we get fully vaccinated we get to herd immunity. The economy is in a position to have a self sustaining recovery. But if as we're crossing that bridge on one side of the river now walking across that bridge to the vaccine. We've got to have economic aid so we don't leave people and businesses behind when we get to a fully vaccinated country. We've got to continue to provide help to individuals, we've got to continue to provide help to states and localities and we've got to continue to provide help to folks who've lost their jobs 10 million or still lost a lot of work from pre pandemic levels. So this 1.9 trillion, the elements in it as you know are for specifically directly for coded for vaccine makes it that we get the vaccine vaccines to you and that the federal government not the state government pays the cost of that supplemental support for the efforts to do the mitigation, the contact tracing on the surveillance that's part of the public health response. There's money with individual checks. So for monitors will many will get $1400 checks that will obviously be helpful to them and meeting their expenses. There's money in there to help reopen our schools there's an expense associated with that. It's really really tough to open schools, because they've got to be open safely and that requires that the schools make some adjustments and the physical space. Sometimes it affects personnel so there's money in there with the expectation that that'll be utilized to help get our schools open and open safely. I think we all all all want those schools open the kids needed and the parents need it. In addition to that will continue unemployment benefits for folks who are about to lose it on March 14. And those are folks who really have been hit hard because they lost their job or they really lost a lot of hours as a result of COVID. And we can't leave them high and dry. We have things in for rental assistance and for months been doing a great job on that. And our hope is that there'll be maximum flexibility so that the way you can use that money is to best respond to the concrete needs of for monitors, who are without income can pay their rent. A big provision in there that obviously is going to engage you for this session is the $960 million in aid that will come to Vermont in the House bill for state and local aid. This bill has under that bill, the state of Vermont would get about $600 million in our local communities we get about 300 million. This legislation has a lot more flexibility. And with our municipalities, they'd have some flexibility to say partner with a local food shelf or with a local nonprofit to try to help the citizens in that community meet the needs that are defined. You know, I see Bob Helman here. And I know how much you've been involved in local affairs and I know how much you believe in local control. And I think there'd be a lot of flexibility here with the money that goes to community for the local officials to make the decisions and also to partner with some local organizations that were trusted to help meet the needs of citizens. So I'm very strongly in favor of this legislation. I see my job here and I think Bernie and Patrick agree that our job is to try to get the resources back to the people of Vermont. And to the governor in general assembly of Vermont for you then to do that hard work of implementation in those micro decisions that are so essential to the wise in productive use of the funds that are going to come to help us get through coven. We have an incredible, incredible responsibility, because this money comes. It's not for free, you know, at some point this money's going to have to be repaid decisions. We've made a decision here that the circumstances require us to borrow it to mitigate the harm. We're going to be successful based on the practical micro decisions that you make as a general assembly. Pardon me on how best to use this money. So, I, I'm going to stop here. Just tell you the timeline. We're voting in the house on Friday. And then the Senate is going to begin their process and it's going to be that reconciliation process where it'll take basically 50 votes plus one. And the goal is to have it done by March 14. So why don't I stop there. Madam chair and turn it back to you and open it up for questions. Thank you. Please. I hope you're just need of water and that you're not coming down with something we need you there in your vote. So, March, March 14 is what you think you need some of those cream puffs. I would, I would bring them to you directly but I might have to arrange with Senator stars trucking company to get them to you. So I, I'm going to have to have people put their hands up so I can see on the bar. If who would like to ask the first question. Why don't I give the committee chairs, the opportunity so Senator and then if you have a question and then I'll move to Senator to representative answer and representative Hooper and then we'll open it up to I see we have Senator Pearson has a hand up and so Senator Cummings do you have a question at this point or if not we'll move on. No I'm fine for now. I'm still in listening mode. Thank you. Representative Ansel you. So my only question has to do with the money that's going to county government and what kind of flexibility. Is there in the act currently and is it possible for us to be able to, since we don't really have a much of a county government in Vermont if there's how or what you would suggest to us. Janet that's been an issue down here that we've been trying to work out a lot of New England states don't have much of a county government so, but a lot of the rest of the country does. And what we're trying to have is a basically a formula where it'll get down to our municipalities into our smallest towns. And that's got to be part that we believe that's got to be part of the distribution formula, so that it will be determined in advance. The flexibility I think right now is quite substantial. You know we have different situations for different towns, sometimes have had greater expenses associated with COVID than others. And the money is supposed to be spent for code related expenses, but I mentioned early on, I think one of the things that will be flexible. I mean, let's say Bob Helen in his town. They could partner with a local food show or a local organization that is doing something providing some services to folks who were adversely impacted by by COVID. So the flexibility extends not just how you use the money, it is supposed to be COVID related, but how you partner with others that are assisting many of our small towns and don't have an infrastructure to set up for the distribution funds. I'm going to move on then representative Hooper. Thank you. Thank you representative Welsh for for all that you are doing for us it has already made a tremendous difference. The flexibility is particularly important so thank you for focusing on that. I am curious about the focus not just on responding to COVID or the pandemic but I hope that there will be room for how we move out of the pandemic and to be able to make investments that help us recover more fully from this and help us recover in kind of the new Vermont as opposed to the old way that we used to do business and you know, first of all congratulations on assuming the chair, the chair position. There's two things are right. Number one, the COVID packages are really intended to help cope with COVID and the consequences of COVID are health, but also economic. So money is supposed to be related to COVID expenses and, as I mentioned that can be somewhat broadly defined, but it should be COVID related. And, you know, all of us in Vermont have seen how extensive the COVID impacts are. And this is not an alternative for say an infrastructure plan or an education bill that we might be considered things that would be necessary for us to do independent of COVID. So that I think is the broad parameter. And obviously there's going to be a lot of gray area and there has to be judgment used. The bottom line here is this is where I think you all have enormous responsibility to Vermont because are you going to do things that can be durable. You know what decisions do you make is it going to just be short term or longer term, and how you do that in a way that responds to COVID but also has a benefit beyond COVID. And this is why I am so much in favor of flexibility is that you can make those decisions better than Patrick, me and Bernie down here. Okay, that really is your job. So I'm doing all I can to get the maximum flexibility. But it's not flexibility allows you to do anything you feel like. All right, it's got to be your good judgment applied to how you're addressing the COVID related impacts and do it in a way that provides the maximum longer term benefit for for matters. That's our challenge. I have Senator Pearson, followed by representative felt us and then Senator Brock so Senator Pearson you're next. Thank you. Congress and nice to see you and and I Chris. All need to heat praise on you but I think I hope you already know the first recovery bill has made a world of difference and you know really kept us going and kept state revenue going in very, very important way. And as you talk about the next bill, we've also heard that money would be coming directly to schools. And I wonder if, if you have any details to share there is it is that part of the local money that you described or the state money or is that something coming down, coming down the pike at another time because, you know, and I would also just add I guess it is COVID related, but helping our schools and our students recover from the myriad is that the pandemics brought is not a one time thing so I'd love. I'd love to understand any details you have and could comment on. There is there is money in here to help reopen schools. Okay, so there'll be some flexibility on that. I'm not quite sure how that gets distributed whether it goes through the legislature goes directly to schools but I think I think you're going to have a role in that. But there is, and there's a recognition that if we're going to open schools and we're going to do it safely it's going to, there's going to be expenses associated with that. You know, I went to Manuski, they were, I just saw how extensive the changes they had to make they had personnel outside people taking temperatures. They had a lot of spacing within their classes. They had students separated much more. They had to have more room, and you could see there was a greater demand on personnel and a lot of those things, the practical implementation such a challenge, you know, and that's in terms of dealing with the concerns parents have will let my kids get sick will they bring home the virus. It's the, in addition to certain teachers have about their own safety. So, there are expenses but I think it's money that's going to go through the legislature but it's definitely included in this package to help address the expenses associated with code. Okay, thank you. Thank you. Yes, thank you very much Congressman for beating Aaron and for all of the help you've given us in the past we all have worked very hard on the two bills that we've received so far trying to be as flexible and as strategic as we can. I appreciate that this new batch of aid, as you say, needs to be related to COVID expenses, and I think we all have lots of places where we think that can be appropriately applied. I wonder however if you can comment on the likelihood that we have heard that there might be a piece in this bill that would have a much broader impact in terms of raising them in minimum wage universally across the country. That obviously it has a much broader impact rather than just direct support or just direct recovery from the pandemic. Can you give us an idea of how likely you think that might be. Well, I expected that will be included in the House bill. I think it will be part of what I vote on and I will vote for that on Friday in the Senate, as you know they're talking over there about a so called reconciliation process. Now we're getting into legislative arcana with with a bunch of geeky legislators. And the third meeting motion to recommit all that stuff right. So, in the Senate, the filibuster means it's super majority get anything done away around that procedurally as you have used the reconciliation process, and then it's 50 votes plus one. In the Senate, the parliamentarian who used to work for Senator Leahy, she's the parliamentarian but she is going to have to make a decision as to whether, including the minimum wage is in violation or in compliance with the burden rule, whatever that is. So, I'll come on certain I think it'll minimum wage be included in the House bill. The in the Senate bill it's it's very divisive. Democrats in the Senate support the minimum wage by and large, although Joe Manchin doesn't, and you know he'd be any one of them can the Republicans oppose it. And we don't know what the parliamentarian has to say. So, I can't predict that outcome. Thank you. I was just curious. And I know that there's a phase in but that's a level of detail that we can look at later. It is a five year phase in. Now keep in mind it's like when we did it in Vermont, there was a phase in of course in Vermont, we did the minimum wage. This is actually the last time I know it was the last time but when I was there with Governor Douglas we put in a class living adjustment as well so that you know you got this absurd situation, federally, where in fact we really don't have a minimum wage, minimum wage is $7 and 25 cents that's $14,000 a year for somebody working full time. And we just don't have a minimum wage. So, what it should be, and how it should be phased in and what its impact is on some of our businesses. Those are things that we always had to debate and appeal here when we were considering the minimum wage increase. And down here, we haven't had that debate for over a decade. So, we've essentially abandoned any commitment to a federal minimum wage. But though it is a five year phase in. We have Senator Brock and then Representative Harrison after that. So, Senator Brock. Okay, well thank you again very very much share my colleagues enthusiasm with your being here today and with the help that you've been to us throughout this process. As you know, one of the things that we've learned from the COVID epidemic is the importance of communications and particularly telecommunications. The presence of it has helped the absence of it has not and we have this tendency of almost becoming two Vermont's one rural and one urban with the funds that we've gotten from the cares act. One of the biggest problems has been the scripture in terms of having to essentially spend the money and spend it now, as opposed to doing things that are more long term in nature. As a result, it's limited what we could do. Do you have any hope that in the current bills that there would be more of a long term focus to help us do things that are good for fixing the problems we've had with COVID, but also have a longer, a longer life and also to be able to use funds that can be leveraged rather than simply spending them outright that could be leverage and providing either guarantees, building up reserves or reserve funds for organizations like Vita to use or in subordinated debt or other almost semi equity positions that could be leveraged with the private sector so that we can take the government money we have and use it more effectively and with more of a long term view in mind. Do you have any thoughts on that. Well, I do. Brandy, thank you for that. My preference is that you guys much flexibility as possible. This bill is going to have much more flexibility than was in the cares act. But the flexibility still has some constraints in that it's about coven. Now there's a lot of gray area. Because for instance you mentioned broadband. We need to have broadband. Okay, and we need it now. So people get health care so they can go to school. And so people can work right and the two Vermont you're talking about where some have broadband and some don't. We need it now. Now if you use COVID money to help on broadband. That's not going to just have a benefit right now. That's going to have a benefit for the long term. So in an area where I could see the broadband money that's in there is focused mainly on schools and hotspots as is being beneficial to deal with COVID but also being beneficial to build Vermont into a stronger community so you're going to be wrestling with some of that because there's gray area but much more flexibility in the past. On the other hand, my expectation is, after we do this COVID bill, we're going to get into an infrastructure bill. And I know all of you know that we really need to do something about our infrastructure in the States needs some federal help. And that's been a bipartisan point of view for a long time. And that kind of an infrastructure bill has to be the commitment to wiring, getting high speed internet throughout America. And my view, and this has become much more bipartisan since COVID is that we've got to have really high quality high speed internet in rural areas and we've got a future proof we don't want to give second string internet to rural areas because it's something that we have only to see the technology leap ahead, but for rural areas to be stagnant. So I do think there's going to be on this question of a minute or not, there's going to be another legislative bill that is not COVID related, it's internet related, and I hope will be extremely ambitious. This question of the public private partnerships, I always think it makes sense to be trying to figure out how do you best leverage the resources you have. And this is again, you know, you have some things in mind, perhaps, but we certainly don't have them in mind here about how that would work in Franklin County, you know what could you do combining local initiative with some federal money. My preference would be to give you as much flexibility to be creative on that as possible bottom line here is you've got to have accountability, you can't be wasting money and there's a huge risk of some fraud inside California. A lot of money being stolen out of some of the unemployment system. You know we don't have that big a problem in Vermont. As long as we have accountability, the purpose has to be to help you deal with COVID and if you can do it in a way that is going to provide some long term benefit, great, that's fantastic. We have representative Harrison. Next, you there Jim. Thank you. Yes, I'm here. Richman, it's good to see you again. I have a similar question that Senator Brock had, not on broadband, which is certainly very important, but we all are became painfully aware and our constituents became even more painfully aware that we have a legacy computer system for our unemployment. We could, you know, certainly COVID related it's the economic well being of many, many Vermonters depend on that and when the system can't handle the additional traffic. A lot of people suffer or wait. And, you know, so we could all argue that it's COVID related. However, to fix it and invest in a new system.  So, you know, it would be we would be looking in the rear view mirror hopefully on the pandemic. But we fixed it for the next issue and certainly day to day. Any idea or guidance as to whether or not that kind of investment would be applicable to the funds federal funds in the current stimulus bill. Jim, I don't know the answer to that. But what I do know is that the computer system we have in Vermont. And just how we antiquated is that's replicated all across the country. You know, our unemployment system is ancient. It just doesn't deal with sort of modern employment patterns, including part-time work, contingent labor, gig economy, all of these things that really are part of the economic reality. And the unemployment system, not just the infrastructure of this computer system, but the eligibility criteria and so I'll have to be revamped. And there's an effort down here to really try to do that. You know, in the unemployment benefits really widely vary from state to state. And the other question, the other thing is that pretty pandemic, if you were a self-employed person or a gig economy or you were from honor who plowed driveways in the winter and landscaping in the summer. You lost all your income. You weren't eligible for unemployment. You just couldn't you couldn't get it. We need to build the computer infrastructure. And I support that, whether we can, you can use the money that comes to the state to do that I don't know. But it'd be from my perspective a wise use of some funds. But if it's not then, then that's a moving issue where we have to help the states out with modernizing the infrastructure. I mean, by the way, I just want to say this, it was so heartbreaking for me, and I know for you. We passed this legislation. This was early on in the pandemic. With that $600 supplement. It really made a difference for people. I know some employers had some issues with that. But we passed it. And then people were wondering where he is. They didn't get the check. And they needed it. They had rent to. And that's so frustrating as a legislator to pass on legislation, and then it gets held up for like bureaucratic reasons and people are counting on it. And it erodes people's confidence in their government. So we've got to fix that. I'm with you on that. I have a question representative Yacoboni. Thank you. Thank you, Congressman. You may have addressed this and if you did I apologize. Do you anticipate there will be a date certain by which money to states and localities might have to be spent. I'm not seeing that right now we had that in the cares package and then we amended it in the December bill that was my legislation. And I think that's the best advice that did that. This legislation has given you much more flexibility. So the constraints it's got to be so much, it's got to be cove related in a flexible way. But I don't think we have a time certain where you've got to spend the money. You know, it doesn't make sense to spend it because there's an artificial deadline looming. I think it's a lot more bang for your buck if you decide to do it in next March instead of next October. Thank you. Let's hope it stays that way. Other questions are. All right, Senator star, and then. Senator Pearson is again, I think after you. Thanks, Peter for being with us today certainly appreciate it. I'm wondering, as you know, I've worked many years on ag issues local foods, promoting all of that. What do you think the money that's coming to the school say would help in the food part of the school say with universal meals buying local. And I don't know if you've heard this yet, but we have in Vermont dropped under 600 dairy farms. So we're getting there's more land being opened up where we could grow more food and crops and I'm wondering if, if the state money is coming just in general money to us or is it going to get some divided up like schools. State government, including all the departments or will there be some Pacific for for certain businesses like ag or, you know, first of all, I'm really sad about the bridge fire, beautiful bridge in Troy. Really sorry. Right. Yeah. That was a sad day. Oh my God it was. I think I crossed out a few times with Uncle Jack. Yeah, something. There's the significant food assistance in here. And you guys know that a lot of Vermonters are hungry. And it's invisible. It's really heartbreaking many of you have probably been to some food distribution sites where the lines are incredibly long people showing up who've never had to go to get help with food before. So there's money in this to provide further food assistance. Not specific money for the farms, but the flexibility that you had. I know you included some money for for our farms out of the allocation that went to the state before. So I think you'd be able to do that again. So the topic you're talking about Bobby, you know how do we revitalize our ag economy, obviously is crucial now with the further relentless pressure on our dairy farms. So, I want to say thank you right. Jane I'm going to, they just they call boats and we're doing, we do our votes and a rolling routine, you know we socially distance down here. Mike, I'm w so I'm at the end, but we're getting towards the end. I'm going to ask Senator Bray you have one quick question and then we will let you get we don't want you to miss your boat obviously if you have to leave you have to leave so Senator Bray. So jump right in. Good afternoon Peter great to see you thanks for all your, your help. You know, we've talked about and I think you have as well the whole notion that pandemic revealed a lot of strains that were already inherent in the system but maybe masked until the pandemic showed them to us all the more clearly. So this is energy burden and energy poverty, and we're really looking in Vermont to build stronger programs to address climate change and the costs associated with energy. So, I know that there's been a lot of discussion around things like a green new deal. I don't know if you can say anything briefly about what the opportunities for Vermont. Would it be to make progress, working with the delegation in your office. Well, it's, that's obviously incredibly important question, and I think if we do it right, it provides some economic opportunity as well as environmental benefit, but the COVID package is not focused on that. It may be available to help retrofit schools, it may be things that could result in efficiency, you know, more efficient buildings is really part of how we're going to get greenhouses down and I, I think I recall that some of the money. I guess you've got a budget item that is going to increase weatherization funds significantly, but I don't think that this COVID package will be addressing that those very very important concerns directly. So I do apologize that I've got to go across this. Now, please, please, we appreciate your time and thank you for being with us today. Peter, it's always good to hear from you. We're, we're, we are available like, whenever you want us okay because you have the hard work, the decision to make you're going to be felt by Vermonters for generation or more. And you're doing it under very difficult circumstances so to the extent I can never be minimally helpful. We're here, and you know I'm on the clock now so this is not in a position. All right. Thank you guys. Thank you Congress. Bye bye.


Speaking of that, going into the laundry room made me feel very happy, unbelievably. Because the smell of fresh, clean laundry just is awesome, right? It just brings about this feeling of summer time, whatever. I don't know what it reminds me of, but it doesn't matter. That's the beauty of classical conditioning, right? So this is what we're talking about. First off, Pavlov did not do anything with a bell.  Pavlov's dog's on a bell. All right, it wasn't a bell. It was a metronome. Or, oh, yes, like I was saying, that laundry room elicits emotions. Emotions are nothing more than responses. Sometimes physiological, sometimes behavioral, sometimes with tears, sometimes with smiley faces, right? But they're emotions. They're actions. They're things we do. We may not be choosing to do them. They may be reflexive, right? Because when we're talking about classical conditioning, we are talking about the modification of a reflex. So reflexes are not as static as what we thought they were prior to Pavlov. And some people still don't even get that. There's a lot of psychologists out there that don't get that. Condition stimuli, CSS, those are the things that historically did not produce a reflex. Coffee cups don't produce reflexes in people. Let me show you. Oh, blank, old, empty hard drives do not produce reflexes in people. Manila envelopes don't produce reflexes. And interestingly enough, all of these things I've shown you, all of them, are neutral stimuli until you pair them with something else that does evoke a reflex. Then they become conditional stimuli, right? Some people say conditioned. Myself. Anyway, so we've got this thing, neutral stimulus. This thing's a neutral stimulus. The coffee cup is even a neutral stimulus. So this is neutral until I pair it with something. I could pair it with a... Oh, I don't know. So let's just do one. This could be kind of fun, ready? Neutral stimulus. Unconditioned stimulus. Now, we paired them once. That was a trace conditioning procedure, by the way. So we paired them once. So now we have... It's no longer a neutral stimulus. Now it's a conditioned stimulus. So let's try it again. All right, we'll do it again. All right. And one more time. That's only four, but I'm getting sore. Yeah. Ha ha ha, did you catch it? The point is, is that, oh, now I'm going to flinch whenever somebody shows a laptop size hard drive to me. All right. So when somebody does that to me, if I continue to do that, all right, and again, and again, all right. Do that a bunch of times. Eventually, I'll just constantly flinch whenever I see one of these. Okay. That's because this has taken on the power of that. In other words, this predicts that an unconditioned stimulus is coming. That's how this works. When a neutral stimulus becomes predictive of a unconditioned stimulus, then the conditioned stimulus, the OCS, now that thing has a new quality to it. It elicits something out of you. All right. And what that thing is, it's a response. If this elicits a response, then we say that the conditioned response is coming out. If that elicits a response, then we say the response is an unconditioned stimulus. Kind of cool, right? The flinching, right? So the flinching, the sneeze, whatever it is, in response to the conditioned stimulus is going to be a conditioned response. It doesn't matter if it's the same response. It doesn't matter if it's slightly different. It doesn't matter if it's the completely opposite. Compensatory conditioned responses. As long as the response happens after this, then you know it's a conditioned response, right? Because knowledge of the process doesn't influence the process. You have to go through the process. Does that make sense? Just because I know that I can turn this into a conditioned stimulus doesn't mean that I have to just tell myself, oh, become a conditioned stimulus. It doesn't work. I have to repeatedly pair this with something that is an unconditioned stimulus and then I'll get this response. Then I'll get that conditioned response that I want. This process is way deep down into brain and you share it with almost every species out there. That's one of those beauties of science. That's one of those beauties of how nature works. Nature conserves. It hangs on to the things that work. Gets rid of the things that don't. So let's see. Turn it like what else? That's about it, really. So there's some classical conditioning for it. There's a ton more. I'll flip through this. Maybe I'll get another video up. Peace. Talk to you soon. Cheers. Bye.


Okay, so my talk is about how to be a factor like a boss. So my name is Michael, I'm a co-lo kung fu on Twitter. Before I continue, if any of you are on Twitter, I am preparing for this year's PHB Conf. So use this hashtag come to Asia and mention me and mention anyone else, anyone you would like to invite to come for this year's PHB Conf, any VIP or VVIP that you want them to come to Singapore, right? So this is your mission by the end of the night. When you're done, show me the tweet and I'll give you a free t-shirt. Over there, okay. Yeah, so I mentioned somebody on the PHB world that you really like to see in Singapore, and put this hashtag come to Asia and mention us at PHB Conf Asia and then show me the tweet, I'll give you a free t-shirt. Unfortunately, you're left with 2 XL and a small size. You shouldn't have stolen that. I can't lie. No, that's not a lie. Fine, forget it. Go away. Anyway, so I'll talk about a couple of things. So I'll talk about what is refactoring and why we do refactoring. And I'll share with you some common refactoring techniques that I have personally used. At least for this sample code, as I'm showing you later, I have used the same exact refactoring techniques. Is it fun big enough? You guys, can you guys see? Can I? Okay, cool. So what is refactoring and why do we do it? The HO wisdom is that when software is left alone, it will decay, right? Because use cases will change and your software, if you don't refactor it or change it, you end up having very expired software. Software that is no longer useful. So we refactor so that it makes it easier for us to... Well, we refactor code because we don't want our code to decay, right? We want it to continue to be relevant. So usually it's a change made to the internal structure of your software that makes it easier to understand, right? So when you refactor code, you want the code to read naturally. So we look at the different functions it should communicate intent. What do you write the bloody function for, right? And also for business people here, this will be very good for you because when you refactor code, so this is how you explain to your boss, okay? I refactor code so that it's cheaper for us to change in the future, right? Why is it cheaper?  You have to spend time reading your code again.  Yeah, it makes it cheaper, right? Because when you refactor code in a way that is readable, it makes it easier to understand by glancing at it, like looking through your function names or whatnot that communicate intent. Once it communicates intent, it's easier for you to read it and understand it. And then all the muscle memory comes back and you start coding away. Yeah, ideal situation. But when you refactor a code, it shouldn't change the observable behavior of your code, right? So your software is written to do certain things and when you refactor, it will make changes, make it readable, make it cheaper to make changes in the future. But it shouldn't change the behavior. You should still do the same thing. And you should also, in doing so, you will improve design of your code. When you improve the design, you also read easier and it makes it easier to refactor and change and you add new features, right? And having test actually helps a lot because having test coverage in your code will help you ensure that you have not actually changed the behavior of your code. Current times, have you actually written a code and then wait, it wasn't supposed to do that, right? Wait, what did I change? So, when you have test, it gives you immediate feedback that look, you have actually made a breaking change somewhere and this test will tell you the test has proven to you that you have especially when you have a very big software or legacy code. How many of you guys are still maintaining legacy software like .php3 or .php4 days, right? Or maybe code that you inherited from a predecessor. I'm sure there's many of you guys here, right?  So, there are four things I'll be sharing. Number one will be how do you change names? Okay, the techniques you should have is change the names that communicate intent. Remove any of the magic numbers because those are scary. One responsibility per function. Or class. That should be. It should be common sense but actually it's not. And last thing is do not be obsessed with primitives. Primitives like arrays, strings and all that stuff. I'll go into more detail when I touch that. So, the first one is about refactoring techniques. Number one, change names to communicate intent. How many of you have seen mystery variables? Like A, B. What does A and B stands for? So, how do you change them to give it meaning? You look at the implementation and you look at the data it contains. Usually, you look at the data and you're like, okay, there's somebody's name. So, what is that? So, somebody's name? Usually, you should just mean first name and last name. Name your variables in a way that communicates meaning and what it's supposed to be used for and how you'll be used. You communicate intent easy for you to glance at it and figure out what it is. Otherwise, you have to look at all the implementations that actually use it or you have to look at the data that contains to actually find out to figure out what it's used for, right? So, which is, yeah, don't do that. Mystery functions. How many of you have actually seen mystery functions? What is fool? Right? So, fool takes two arguments. So, what does it give you? It spews out a greeting A greeting. Okay. So, what is this mystery function? What is fool? What is this time for? And what should we, how should we name it to give it meaning? Any guesses? Any guesses? Say hello. You greet somebody. Yeah, so it's greeting. So, greeting from first name, last name. Yeah. Or some of my exam was a bit contrived but you know, you get the picture, right? Okay. So, change names to communicate intent. And extension to that is about magic numbers, right? Suddenly, you find in your code a mystery number, like, what the hell is this 1.4, right?  Right? So, amount in USD, you pass it at amounts and then you have 1.4 inside. It's like, what does that mean, man? Look at the function you may probably kind of have a guess. You know, what does this 1.4 means? Probably means exchange rate, maybe ask around, ask your colleague, what is this 1.4? You check to get log. Oh, yeah, okay, this guy, what is this 1.4? Okay, fine. So, what do you do? You refactor it. You change it into something meaningful, right? It has to be, yes, the thing has a really intense, right? So, you change it with a constant. You define it and then you can use it in your code, right? Also, same applies in a class. You can also lift it up into a constant, right? A class constant like this. You can just use it so, right. So, when you find a mystery number, even Ruby is do this, right?  So, yeah. I mean, what currency is the input in? Sorry? What currency is the input in this function? I assume it's Singapore dollars. Again, see, and the function is wrong then. We should be dividing it, not multiplying it. See? No test. Sorry. I forgot to write test. See? Writing test, make sure you don't change behaviour. I'm such a failure here. Anyway, so that's two tips down. So, the third technique that we use is usually when we refactor code, we try to bring all, we will try to write your functions such that each function only has one responsibility. As in, it takes in certain things, it only does one thing, and it gives you the result that you need. Right? So, with this, I'll change it. I'll use an example, an example of say a club membership register like say, you run a country club, maybe not a country club, some club, right? And you're kind of like a software guy there. You're tasked to maintain club membership register as a CSV file, right? So, something like this, Luke Skywalker is a good friend of mine. Ya.  And this is the feature story, right? So, if you do agile like I do, they usually are. So, where is the feature story? So, I want to add new members to the end of the file and if the email is already in the list, ignore the new entry. So, basically, if it's new, if it's never been there, add it in. Otherwise, if the email is already there, omitted or ignore it and don't throw anything or trove whatever, just say ignore it. Don't insert into the file. Simple enough, right? So, you go away that, alright, let's do this. You open up, you fire up your PHP storm and start coding away and, lo and behold, you got a piece of code that does exactly that. So, you have the first line opens up the CSV file, right? Open up, you read only mode, read plus, which the plus means you can also append to it and then you say, okay, loop through, find, if this guy is the same email as the guy, you return false otherwise, you put it in and you are done, right? So, and you turns true or false. It's somewhere along that line. Simple enough, right? Anyone can write this, right? Right? Okay. Okay. So, so it works. But here's a question. How many things do you think this ad member is doing? How many things? Just have a look again. How many things do you think he's doing? He's opening the file. He's checking for the whatever. I don't know why it's in position 2. And it kind of throws a return of false otherwise, it injects in the new CSV field, right? Four things. Four things, this thing is doing, right? Open the CSV, check for duplicate emails, ignore if it's already there and add if it's not there. So it's kind of like, there's a lot of things there's one function to do, right? Of course, if you rush for time, you probably just walk away and say, it works. I'm not going to care about this. But for me, it irks me that when I read it back in this file, right? What does it even mean? Why is this position number 2, right? It's like, huh? Right? So only thing here that makes sense is it's a function named ad member, okay? It's doing ad member but, you know, it's doing quite a few other things, right? So it is disconcerting. It's doing too much, right? Ideally, each function should only have one functionality as it only has one responsibility. It should only do one thing. So these four things that it's doing, we should probably try and break it up, maybe? And if you look at the code, it's not very readable, right? I mean, if you can sense that you can feel your eyes twitching and whatnot, you are in the right company because we all are craftsmen. We want to build things that we can be proud of, right? And if you're twitching, like I was when I was looking, when I wrote that code, I feel very dirty. But anyway, so let's go over onto this.  It still confuses you.  So what should you do? As I said, you should probably abstract away the details, the implementation details to fit separate functions, like opening a file, closing a file, writing to it. These are all implementation details. What do we want to do? We want to check. We want to add a new member into the list. But to do that, we need to do other things first, which means get the current list, do other list, do that. These are things we want to do. How we implement it, that's why we write functions. We hide it inside a function, right? So we ask ourselves what if questions? What if we come back and we say, I want to also check for something else, then we kind of like, shit, yeah. So if we have to make changes to the same piece of code, it will be very frustrating. And if you come, if the worst response you can give to your manager when he's asking you to make changes, it's not meant to do that. That's not an acceptable answer. So four. So what do you do? Step one, what are different behaviors? So first of all, when you open a file, what do you do when you open that file? You basically pulling together the list of members, the current list of members. You also identify that how do you check email? It's not about email, it's about checking whether that person is already in the list. That is what your, that is the behavior that you need to abstract. This is the behavior that you need. Checking for email address is just an implementation detail, right?  And now if it's already there, it's kind of like a reverse of two, right? It's just a result that you get from checking if a member is already in the list. And number four is add if it's not. So no, it's just about adding a new member to the list. He's just adding it in because I already know I checked it in the previous step. I'm just adding it in. I'm not going to check whether it's not in the list or whatever. I'm just going to do something that injects a new person right? So these are, you've broken it down to maybe three separate functions. Three separate behaviors that you want to kind of maybe extract out, right? So next thing you do is you you keep the function that it is. So as the refactoring step, you don't change the current, the actual implementation but you try to pull out the stuff that you think it's trying to do. So you break it into separate functions, right? So the things that it's trying to do, maybe you pull out or we call it extract, to get list of members into a function, right? So the act of opening the file, reading every single piece of record inside there and maybe pushing it into an array, right? And then just returning it, right? I'm sure there are some CSV libraries out there that can do this but I'm using just call PHP functions right now. So I have implemented something that that's just one thing, a function that just gives you what does it give you? There's some members. That's correct. So it's all I need to know, right? You can write test around this right now. You can write a test and say, I've just given this file, I should get like five records because I've a CSV fixture that gives me a fixture file which gives you five has five records inside. Maybe, right? So it's how you could write a test that they write. So a test with a test a function that only does one thing is very easy. Your test is the earlier function you're writing test, you're like, oh no, you got to check for this, you got to check for that, you got to check what if it's not there and you end up with a very long test. So breaking it up into smaller functions also help you write smaller test which is more readable. So first, extract the get list of members which is basically opening file blah blah blah and give you the array. Just give you an array. Second thing you do is extract the check imaginary my imaginary function which I actually just wrote gives me an array of members and then I assume I create a new function right now that kind of checks whether this person is already in the list. I don't really care what is inside this new member. I just know I'm passing in a new member object or in this case it's just an array. Array with some data inside. So whatever the main function gets, and I also from another function where I get the full list of members, I also pass to this. So this function it needs to know two things. It needs to know what is existing list of member and the new member I'm trying to add, right? So there are two things it needs to know and from these two it can basically compute the implementation of computing whether this guy is in the list is a mystery. It's an implementation detail which your boss will tell you. But in your function, in this one function, right? You wrap your implementation inside this one function which does one thing only. What does this function do? Check whether that person is in your list. So it gets takes in two arguments, it runs through it because it's an array which I'm not sure why I'm using number two, but somehow the guy who pass me the CSV file had the email address as a third column, right? So I put little comment there because this is the email email view, okay? Ya. So basically it just takes the list, loops through it and basically compares and find that if it's already in the list I'll just return false and early return and then return return true if it's in the list otherwise it returns false which means it's not in the list, right? So naming of the function is also very handy because the function name, right? Well, just communicate. Can you? Ya. Ya, it also tells you what kind of it kind of suggest you what kind of data it returns, right? Looking at the function name the is the is in front is kind of like kind of how we have is now you know, is a you know so it's kind of like also giving you suggesting to you that return the return data is a Boolean, betul? Ya, so that's unfortunately we kind of question mark in the function name so you know it's like, you know just another whole other story so we hint we hint to the person using this with the function name and we prefix it is and third thing is we take the add new member to the list it also break it up into the separate functions implementation is very simple just take the new user just insert it into the file, right? of course if you look at this full-on again you say add member to file what file are we talking about maybe I could refactor this to also include the file name I'm actually injecting it to because but you know that could be future refactor on the hindsight probably I should have put the file name as one of the arguments but anyway just separate separate discussion so now you have three functions that actually basically does the three behaviors that we talked about, right? first is retrieves the full list of members second one basically checks whether this person is in the list and then the third function is basically just inserting it into the into the file three separate functions that do three discrete things so one, two, three and each of them has one responsibility so once we have that we go back to our main function add member we open it up and say hmm let's refactor so we take the new functions that we have and we just inject it in here so for example getMembers is the first one we wrote gives you the list of members and we pass it into a local variable then we also make this return we also make this check something is this member in the list it returns true our it returns true when the user is actually already in the list and our return false to the whole thing I'll say I will not inject this person I will not add this member it is so I return early here but if it's not in the list I'll just add the member to the list and I'm done and then implement the implementation remains the same or rather the usage remains the same and I'm just passing in an array and then I have not did I change so question I ask of you is did I change the behavior of this function no right the function remains the same so when you do refactoring only focus on code that doesn't change behavior changing behavior changing the sorry make changes that doesn't change your API basically your function how is used don't try not to change it your behavior of a code try not to change it but internally the internal structure just re-jicket around to make it more readable and cheaper to make changes in the future because so see from a long function I've refactored and then this function is now so readable it's just like how many lines 1, 2, 3, 4, 5 5 lines of code that wah so nice and it reads like English right first you get the member it's a member in the list if it is if it falls otherwise add to the file from just reading this you kind of understand oh more or less immediately you understand what is this function how is this function implemented the implementation detail is somewhat obvious to you because it shows you the behavior but then the implementation detail you have to drill down further to actually see what's going on but again that's like so the implementation detail is abstracted away in a different function and you can just dig in and see you can see so we're happy the function works so the boss is happy then after 2 months he comes to you again and say avoid ah cannot so it tells you that we're getting too many duplicates in the list because I want you to check the name or so I want you to check that the name is not already in the list if it is then ignore it because currently we have all being duplicated in the list so it's very stressful so he one stressful boss it'll stressful faces so people with the same name ah with different email addresses are also being added to the list so they want to prevent this in the future so this is the what his feature change actually mean so it's the bug that is found so let's look at the code change so this is from here on I'll show you an example of how we have since we have refactored the code 2 months before we look at it again with fresh eyes we have not seen the code in 2 months again we look at the function that we can quickly look and we basically extracted out the main function that is displayed in that file right I can show you the file as well if you want so the file is line refactored okay cool so the refactored file is here so if I do a command shift minus it basically collapses to all the function names so first of all it gets get member is member in list add member to file and then finally the add member function which actually does the actual implementation right so looking at just the function names can you kind of guess where should I make the code change is member in list you guys so smart awesome okay so from this so where do you think you should make the code change we have identified is member in list it's pretty much you need to make the code change this is where it's actually being used because if it's not returning the right response it would basically let the let the let it go through and you basically so we need to check full name here so this is the original function that we have seen so we have one command there that says email field got it so there's something else in here so you can do a va dump inside and run a couple of things oh why is in this array ah okay the position one is position zero is the first name position one is so the first column is first name second column is the last name so this is kind of where we need to make a change so this is re-implemented code in ideal situation you also have test you also have test for this function so you have to go back and write and change the test now this test I want to also inject someone with the I pass it someone with the same name so it's a bit the behavior the behavior in this code change is a bit different from the email because email just one field so just is equal with with the first name last name you also want to check that it's actually you know if it's not it's not it's not it's not it's not it's not it's not it's not it's not you know if it's not first and last it's actually not exactly the same then you do something else so the implementation is a bit different but again these are all implementation details right your function communicates an intent your intent is to not is to check whether this guy is in the list and the way I check the check make the comparison is the implementation detail username it also in a further idea situation you may also extract out this two thing I can foresee that if we have more fields in the database in the CSV file you probably this function will probably grow right so maybe it's also good to maybe take this opportunity to refactor a little bit maybe create a new function that says is email there or like is name the same or something like that and why do we do that when why do we refactor make it cheaper the big changes in the future and more readable of course and also get paid ya see for freelancers it's actually a good thing when you refactor your code when your customer come to you and say I want to do this oh it's going to take a long time and you charge them extra you actually can do it just one day not really ever you can I mean you can I mean because developer happiness is important to me to everyone ok so what we learn from looking at this whole example today readable code for the win so we like code that readable that reads like English someone like English right and we also learn how to break up a long function into separate functions and each one with its own responsibility just one is responsibility per function and also makes future code changes easier to make because you know we have broken it up it's logical logical pieces of the puzzle that we can just poke and change if we need to make changes right it's not like a one huge function that oh no legacy code if I make two lines of change here where it break everything you know the kind of thing so it's scary ya so refactoring of a code is important and it's also important that you don't make changes that affect your API your current your current implementation of a code shouldn't be affected so there's technique number 3 there's technique number 4 refactoring so do not be obsessed with primitives why is this akan datang next one I'll talk about this okay so I'll share you a bit more about this next month meanwhile the sample codes are actually up there you can just take a picture of this understand this so it's a github github.com code kung fu refactoring PHP demo if you peek into the code right now you actually see the slides already up there and that's all I have any questions that's all I have for this week so next month we'll talk about the last refactoring technique really no question just want to add one point to that one of my mentor my career taught me that every time you copy paste code think of refactoring so every time you copy 50 line code from one place to another place try and understand if this should now become a function and extract it out if you can because often people don't do it just wanted to add that as well that one of the reasons you should refactor is to avoid copy pasted code or rewritten code because if you find bug in one place you end up ficting them at six places actually fix it only one place and the bug still remains ya so if you ever have a copy pasted code you know that's a bad thing ya but because it's also an opportunity because if you do copy and pasted code it means the cow tells you that these two places where you copy and pasted code there's some similar behavior and there's an opportunity when you look at these two code and say what are the similarities and what are the differences so once you figure out what are the similarities you can pull them out into a main function and then you can take all the differences and implement it separately differently so that's an opportunity you will see copy pasting of code it's an opportunity for you to find out where are the similarities and what are the differences and you know suffer that thanks any other questions or comments ya refactoring that you just did earlier if the file had like million entries the code will still work because nothing was loaded in memory but after the refactoring you're bringing everything into memory it won't work oh maybe I might break it might probably break but there's someone someone did tell me this before right friend of mine once said that performant code is usually never pretty right a very performant piece of code is never pretty so so somehow and sometimes it's a balance between pretty code and performant code code that reads well and you can understand and change easily or code that performs very well for that moment or for the thing that you need it for but I personally would put more emphasis on making code that is readable because eventually you'll be the one that has to maintain it of course performant code that is also readable that's like the holy grail and sometimes it's a balance running out which is what it is and of course to that question about why am I using CSV because it's easy of course if you want to look at in more detail you probably want to re-implement it as a database MySQL to make it more easy to manage performant That would be something I actually will talk about next month My clients Great Any other questions? No? Great So that's all I have Thank you So next we have


The national youth leader of the all-progressive Congress, Dario Israel, has commanded supporters of the APCR, Damawa State, especially the youth for their resilience, despite many challenges in the state. He gave the commendation during his two-day visit to Yola Damawa State capital to commiserate with the ravaged communities in the state. According to him, being an opposition party in the state is now frustration, but that will not hinder their success in the 2023 general election and cordon members to continue being optimistic. Damawa is among the most hit by floods due to the overflow of a dam in the Republic of Cameroon, which led to the loss of many lives and the displacement of many communities. Amino Sulaiman, Executive Secretary of Damawa State's Emergency Agency, described the level of the damage of the flood. I will see to the success of the visit that I assure you sir, and whatever it is required of me in APC, I will read you anytime. And I have made mention that we will do APC from top to bottom, inshallah. And we will give PDP a very good fight. The national youth leader, Dario Israel, says the visit which is at the instance of the presidential candidate of the APC, Bola Tinibu, is to donate cash as well as relief materials to ameliorate the hardship of the flood victims. You know, it is challenging to be in the party when that party is in opposition, in that particular environment, because they have benefit that you don't get access to. In state that has governors, the state chairman will usually have official cards, maybe one or two, but in state that has no governors, there's no even hope that the party will have a party boss. So it takes genuine faith and intention to remain in that party, even in the face of this night from the ruling party of that state. And so for you to stand by the progressives, for you to stand by a party, your progressive Congress, and not be swayed by all of these other things, as you have said, as you come and say thank you to all of you. He therefore assures that Bola Tinibu is a better candidate who has the capacity to solve the problem of flooding and other challenges confronting the country. Even yesterday, we were able to recover two dead bodies in Demsa. So this brings to a total of 51 people on our record that lost their lives as a result of this flooding here in Adama State this year. And then we have 71 persons that have sustained different degree of injuries. We have about 80,000 hectares of farmlands estimated to have been destroyed. And then over 171,000 being affected. Meanwhile, a stakeholder of the party who is also a candidate reiterated the commitments to put in a good fight against the ruling party in the states.