Hi, welcome to CCTV Channel 17 Live 525 Preservation Burlington Show. Preservation Burlington is a non-profit 501C3 organization and our mission is to preserve and protect the historic architecture and livability of Burlington through education and advocacy. I'd like to thank everybody for tuning in this month and I'd like to thank my guest, Mary O'Neill from the City Zoning Office. We're not zoning anymore. I know. We're permitting and inspections. Permitting and inspections. That's got a nicer ring to it. But that's not what you're here for, right? It doesn't roll off the tongue. I know. We see each other every couple of weeks since I'm on the design advisory board and, you know, us preservationists have to stick together. And speaking of which, so you're going to tell me about the work that you did with the Burlington Electric Company, I mean the Burlington Electric Department, because they were working towards their net zero policy and how that pertains to all of our historic buildings in Burlington. Well we had a meeting when David White was our director, so that's a number of years ago, 2019, around the same time the mayor adopted the net zero goals, net zero energy to reach these goals by 2030. So in December of 2019, we met with Burlington Electric and the scope of the conversation was, you know, how can we deliver this message that can offer some design guidance, maybe some good examples, in the context of energy efficiency, energy conservation and weatherization. You know, can we work together on this? Of course our concern remains, you know, we have so much of the city that's listed as historic on the state or national register, and what will this mean, what can this present for changes to our historic building stock. So that's where we started in December of 2019. We brought, I'm very grateful, I should back up and say that I applied for a grant for, through our certified government program, of which you are aware. This is a partnership we have between National Park Service, the State of Vermont Division for Historic Preservation, and the City of Burlington, that if we have... Certified local government. Correct. And that allows us, because we are one of those, that allows us to apply for these funds to help us with projects. Exactly. Yes, thank you. You know, I speak about this so often I forget that people don't understand what a CLG is, but we have, since 1991, Burlington has been a certified local government. We have received in excess of, I want to say, a quarter of a million dollars in funding from them for projects that have totaled almost half a million. So it's been a very successful program with us in exercising projects. So I applied for a grant to try to create this design guide. And right off the bat, Burlington Electric Department was a partner with us and said, you know, well, we can bring an intern on and we'll do the research on what other communities are doing. And so we had our first partner there, subsequently they hired someone, also as an intern, to continue the research. And so I should say we're very grateful to the National Park Service for being an initial funder for this. Now that's where the grant funds come from, from the National Park Service, right? And then so BED was, pardon, coughing up also. So they were contributing to- They partnered with us, yeah. We had the initial seed to get going. Burlington Electric was able to subsidize what we did get from the grant, so we were able to grant match. And it was enormously helpful because the project, as most projects occur, take more time, cost more money, and in this case, involved more people. But we got such a quality project out of it that I think it was a success all the way around. You brought a lot of talent to the table to figure it out. So from those initial conversations, and then BED came involved, and there was, you said, one or two interns also helping with the research. One subsequent to another, Abigail Ahern was the one that kind of carried it too far enough that we could give it to a professional design group. And we had volunteers that were just extraordinary, and folks that are doing the design work, doing the construction work, doing this implementation of building science, and they were happy to join us. I mean, we had Jesse Beck from Freeman French Freeman, Rebecca Grannis has her own company, Heather Clark is involved in building science, Tom Visser from the University of Vermont. We had a contingent from Burlington Electric, including Chris Burns and Bob Boland, and Catherine Lang, also a registered architect who works quite frequently with historic buildings. So we had folks that came with a body of knowledge and experience, and all very, very anxious to help. All heavy hitters. All of them. I don't know why I was in the room. Yeah, right. Okay. So anyway, that aside, so what was the, I mean, was it early on you've decided the format? I know I saw that there was a podcast that was developed over this, right? We did a webinar, a training webinar. It captured the attention of the National Park Service, which I'm quite delighted, and it became ultimately a remote option for the National Trust Conference, which was hosted last fall. So we did get some national exposure on this, yeah. Cool. So what were some of the findings? How do we get historic buildings to net zero? Well, again, it's like in this context, how do we achieve thermal comfort? How do we improve both the livability for the occupants and the physical elements of the building while reducing our energy consumption and just plain being more comfortable? So I'm guessing no spray foam. Well, I can't say one way or the other, actually. We did establish some goals. Know your building. Understand completely what your building is. What's the use? Is it residential? Is it commercial? Do you have people going in and out? Is it a masonry building? Is it wood clappered? Is it post and beam? So getting that, zeroing in on first, what do you have? And then second, the recommendation is evaluate the performance. It can be a blower door test, it can be thermal imaging, it can just be experience. Some people came to us and said, I'm always cold in this room. This is one thing I want to address. Establish that baseline. Find out what you have, find out where those weaknesses are, and then once you have this information, determine goals. It might be just something, like I said, I have air infiltration here, I'm cold in this room, I want to address it. Or if you're anticipating a more major renovation to incorporate improvements at that time when your building might be under construction. Yeah, it's disturbed anyway, so what can you do to increase your efficiency at that point? Setting goals, then afterwards evaluate your performance. Did you get to where you wanted to be? Maybe you want to just spend less on your fuel or your heating costs. Maybe you're aiming for, you know, even reducing the wind. You know, the wind is making my house cold. The guidance document even addresses landscape improvements that have to do with how your building is shaded, how it's protected. You want to have deciduous trees on the west and on the south to provide that shade in the summer to reduce the heating or your cooling need in the summer months, you know, conifer trees on the north to provide warmth. Sort of back to how we used to plan for buildings, like way back in the beginning before we had to really worry about systems inside the buildings, right? Everybody's wondering, where's the sun coming from? How do I want to face the building? Exactly. What's going to shield me from the wind, the north wind in the winter time? I mean, those are inherently sustainable things that we don't even think about now. And luckily our historic buildings have already considered them a lot of times, right? Exactly. In the part of the evaluating your building, you can pick those things out about, you know, window transparency and daylighting. I know my house is over 200 years old and it faces south. Most of the daylighting comes from the south. I mean, that is an inherently sustainable element that you would want to protect and ensure, you know, so things like that. So when you're factoring in for, again, back to the catchphrase net zero and I'm not going to pick on it or anything, but you know, we don't want to spend any energy and we don't want to emit any carbon, you know. So did you or did the conversation get to factor in embodied energy? And you know, is there a goal, like I've been on projects that are like Champlain College's Perry Hall, it's a lead platinum project. We retained historic windows, we added storm windows, we did high VOC finishes for the woodwork inside, but that was, that we cap and traded with the zero VOC other finishes at these, you know.  And evaluating what the effects of each alteration is. How do you get to platinum, lead platinum, when you're keeping these old components and then what do you do?  But so was there a lot of conversation about that with this group of heavy hitters? Well, we talked about what an energy retrofit is, you know, it's not blowing out all the windows, replacing the roof and padding the outside with thermal panels. In the context of this guidance document, an energy retrofit can be either modifications to what's there or additions that include systems or alterations specifically to increase the energy efficiency. So within the context of historic buildings, and by all means, this guide is good for anybody. You don't have to have a 100 year, 150 year old house. A lot of it is common sense. We're going to look at these building components. So looking at roofs and doors and windows and walls and insulation. And then we get to the mechanical systems and they are common sense actions. And again, this isn't intended to move us entirely to net zero. The guide is actually called a path to net zero. So we're going to begin and this is going to be methods, a methodology, process and strategies to get us towards more comfortable buildings, healthier buildings, more comfortable occupants and less energy use. So it's a mindset and it's like you said, you called it a guideline. It's just that. So, you know, because you can hear these things and be intimidated and say, oh, I'm going to start looking at what I have to do to my historic building or my old house, just an old house and go, too expensive and push it to the side. Well, isn't that the first thing? I mean, that we typically hear is, oh, I live in an old house. I can't do anything, right? And of course, that's not true. Of course, of course, it's not true. What are these baby steps that we can do that are heading us in the right direction and if there's an opportunity? I know I replaced my oil boiler with high efficiency boilers when Vermont Gas offered, it was just a perfect timing. They offered just enough funding towards it. See, it was the right time to do it. Again, it's the timing and the planning and the long run. The guide, as it was completed, offers a reference section at the end. But and it can be for engaging a building scientist, someone who works regularly, whether it's an engineer or an architect or a people that can analyze these issues like the building envelope. But on the point I was going to get to about, oh, these changes can be very inexpensive. And easily done. And they range up to, depending upon what your appetite is, more complex and ultimately more expensive. Some folks are diving in headfirst into geothermal. And they can be many splits on the outside, or they can be entirely closed loop vertical in the ground systems. So I mean, like any mechanical system, there's going to be low end and high end.  And there are references for additional help, if you want to inquire. So two questions. One comment, like you mentioned, architects or engineers. And I wanted to just say that, yeah, I mean, my personal experience is it's money well spent. And it's not really as expensive as you would think it would be. We brought in engineering ventures to look at our carriage house before we over committed to a build out. We want to make sure everything was stable, what we could do. We had some ideas. We want to run it by them. And it was a couple $100. It wasn't that much to have somebody walk through with me and give us some recommendations. So that's a really great first step. And then, of course, I forgot my second point. But I mean, you reiterate the part that this is part of the investment. You're getting professional guidance. You don't want to blow your money on something that's ill advised. If you have moisture problems, you certainly don't want to trap moisture. You want to make sure you have ventilation. And it's these types of professions and disciplines that have the experience and the know-how. You've seen those mistakes. Implagable. They must live with those mistakes. Yeah, yeah, absolutely. Maybe you wanted to close that vent off in your attic. And they're going to say, oh, no, no, no. You need that circulation. So this doesn't happen. So that is a critical, critical first step. So where do people access this? Can they come down to the permitting and inspections department and pick up a copy? You know, I wish. I'm a paper person. I still miss library card catalogs. But it is available on the city website. In at least two places. But I know under permitting and inspections, there is an electronic copy there. If somebody wants a paper copy, I'm happy to share it with them. If they want to email me, I'm happy to forward the document. It's a little more than two dozen pages. But beautiful, clear images, and a nice section on references at the end. Yeah, yeah, and I'm sure they can get on the BED website, too. I think BED carries it as well. They were partners with us, and they're just as proud of it. I'm sure they're pretty excited about anything that moves in that direction. What you think is an electric company, they wouldn't want that. They'd want everybody to spend too much money on heat and electric, right? Well, there's a great vision here towards electrification. How fast we might get there, I can't foresee. But again, this is just encouragement towards let's take care of your building, let's take care of you, let's make investments that will reduce energy consumption. And that's really the path we all want to be on. Right, the goal, for sure. I mean, you think back to the 20s, they had electric trucks delivering stuff for Macy's and Wannamaker's department stores, right? And they had, you know, and then I remember when I was a kid, a lot of the new houses that were being built had all-electric heat. And then energy things going back and forth, it became expensive, and they got abandoned, and then they added oil tanks. We inherited some of that. Our last home was a gold medallion home. And I don't know if you'd ever heard of this program. No. In the 60s, gold medallion, when energy was super cheap, houses were being built all-electric. Everything, everything electric, all appliances, electric. There were individual electric heaters in every room. And some homes had coils in the walls and in the ceiling for electric heat. Oh, it was, you know, it was marvelous. And then electricity got expensive. We had, actually, our doorbell plate had been erased. I think probably the people had had enough. But another gold medallion home next to us still had the doorbell cover. And it said, gold medallion home for the energy conscious. And my neighbor quipped to me for the energy unconscious because electric heat was so expensive. So even the way we were able to get into the home was nobody wanted a home heated with electricity because it was too expensive. This was in the 80s. So some things are coming back. And I think we're getting smarter about it. Yeah, it's a really big complicated history and conversation about what and why those things occurred. But yeah, I think coming full circle, it's like I kind of joke that eventually when I have solar panels on the roof and a windmill in the backyard and everything's electric, I'm not going to have to worry about insulating my house better because who pairs? We'll just have the retina scan in my eye. It'll be perfect. Well, on the old maps in Burlington, you can see there were windmills in the village of Burlington at that time. Joel, our friend Joel Banner-Baird, who used to work at the Burlington Free Press, had asked me if I'd ever noticed that. And I said, yeah, there were, in fact, wind turbines in historic Burlington. In historic downtown Burlington. We'll bring them back. Yeah, I think we should. Yeah, yeah, yeah. So it was a fun project. How long did the whole thing take? So you started talking in 2019. As I said, end of 2019, the conversation began through 2020. We finished the document in spring of 2021, and it was posted online in the fall of 2021. That's pretty good. Yeah, it was a pretty good time. But it was the folks that were on the advisory committee were meeting regularly, providing comments. We were doing edits. Ultimately, we engaged CX associates, Ava Line, and her partner were very, very accommodating to get the final, you know, a lot of it is the tweaking takes a lot of time to get it into a document that's readable, comfortable, legible, pleasant to use. So it was a good project. Yeah, yeah, you had enough really bright people involved that, because that is the hardest part. It is. It's pushing out a document and then looking at it. And then you're like, OK, the next person reads it. And you're making tweaks and tweaks and tweaks. And but it's a fun thing. I hope people will access it and utilize it.  Because it is one of those things where that's, as you know better than anybody, you know, the stumbling block for historic homes is energy efficiency. You know, we've talked about embodying energy for so long and other things you can do. So it's nice to partner with somebody like Burlington Electric Department so that, you know, people sometimes might roll their eyes if you or I say it, because they know we love old buildings, you know. But when the people that are focused on the energy consumption of the city, and you know, it adds some credibility to what we've been saying and thinking and, you know. Sure, sure. Agree, agreed, yeah. That's great, that's cool. So what's the next CLG thing you have coming up? We haven't quite decided yet because of the timing. I mean, I think I know what the project is, but we're going to be looking at rewriting Burlington's preservation plan, which is outdated. The last one was done in 2000, so we're more than two decades past. We want to align it with activities of the Office of City Planning so we can, you know, carry this next ball altogether. So maybe in the fall, we're looking at a grant for that. Oh, that's pretty, that's good news and pretty exciting. I know it's been a long time. It is good news, it's, you know, like everything, it has to fit in with the other projects and the other timelines of other departments. So this will be a pretty big lift. Right, right. So we're going to need help. Coordinating and getting enough people involved in different departments to weigh in. And happily the projects that were identified in the 2000 plan, we call it the daily plan because Pam Daley was our consultant. Nearly everything has been accomplished. A lot of survey work, analysis of the five sisters neighborhood, that was a 2007 project. The neighborhood between that runs from university, terrace, we call it the Prospect Park, north, middle, and south. It pops out there at the south end of the city limits. That was done over three years. We have all of that surveyed. Some looks at North Avenue, the addition got a short look. So we've done a lot of the work that she recommended. In a shorter period of time, we have then the 20 years that has passed, the 23 years passed, we have, I think, four or five surveyed districts. We're hoping to forward them as districts when we get a chance. It's taken so long now, they'll probably have to be resurveyed. Yeah, it's a long process. I mean, we would work with UVM grad students or somebody who would do the surveying or resurveying or examining that. We probably would hire someone. Hire someone. Yeah. I expect the project will take longer than some of the programs at the UVM graduate school. Yeah, that's true. Yeah, if you have them for two years, it's not enough. They can't hand it off.  Everything changes. So that's just trying to keep up with that. Yep, yep. It doesn't mean they're less important. No, I know. But like you said, finding the time frame and the bandwidth and the room on your desk for a project and, you know. And to time that with a grant application. Yeah, yeah, exactly. No more grant projects for me. Yeah, so you can't leave. You can't leave our review committee. You have been there longer than I've been there. No, I have not. You have. Yep, you were there. You were there when I was hired in 2004. That can't be true. It is. So as Joan Shannon's fault. You still can't leave. She asked me if I would be if I'd help out and beyond that. So can you give me an update on the trades conference? Oh, sure, sure, sure. I had, yeah, you touched. We talked about. Are we good? We covered everything? Yeah, I think we did. I was going to talk about another thing related to that. But we'll start with the trades conference. That was Providence, Rhode Island. Lucky. We all, it was, I've got some funny anecdotes about that because I went down completely unprepared like I normally do. I just drove down and had to find a place. But it was Monday afternoon sort of introductory and then some cocktails and everybody gets to meet. And myself and a bunch of tradespeople and people involved with historic preservation and concerned about the amount of the labor pool. Which is a problem. Which is a problem. And they said, the thing I liked right away was they said, it's not a niche profession of profession. 75% of all buildings are 75 years or older. So most of the American building stock is really old and with specific trade needs. And those trades are aging out and retiring. So how do we encourage and work with students and young people today? And what kind of programs are there for them to learn? There's Bennett Street School. Very expensive. There's two or three around the country that do a great job. But they're not really focused. They're not pumping out students. And it's not gaining enough widespread recognition. So that's what the whole thing was about. So myself and I got this survey, I filled it out and I sent it in and they kept me updated. And they compiled this initial summit to talk about what information they brought together. It's preservation Maryland. It did most of the heavy lifting as far as creating a curriculum, communicating with other trade schools and other things around the country to pull together what would be a curriculum. They worked with the National Park Service as a partner and now they want to take this information, they want to disseminate it and they want to help groups and organizations around the country that are interested in creating a trade school specific to the historic trades. So that's what the gist of it was. Our buddy Judy Hayward was down there. I caught up with her and it was great. When we got back, she sent me a quick email just to thank me. We had introduced each other to some interesting people and she wants to get together again and talk about things that we can do. And wherever that, for Vermont. It's just one of those things that's been on the back of my mind for a really long time. I want to stop working and I want people to keep doing good work. You know, I hear that from you and we have joked about it. Also another colleague, Sally Fishburne, has said to me, she hires people and they don't stay. And she said, I just wish people would want to do this because there's so much work. And she too says, I want competition. I keep getting calls from towns for town hall work and church work and major building work. And she said, I don't have any competition. I need more, we need more people. We need more people in the trades. And something, it's a similar verse I've heard from you. I've heard it from my friends that are mason, stone masons, and historic preservation masons. Again, there's a handful of them, spread real thin. Window people, we all end up getting the same RFPs and stuff and then you go on site and we're all like, do you have enough time? Nope, nope. I don't have time. I'll loan you my scaffolds. Okay, you know what? Yeah, right, exactly. If you do it, I'll give you a chance. Here, I'll give you everything you do it. I'm out, I'm out. So, right, and we've all, so we've had that conversation. I've talked to folks at YouthBuild, talked to folks at Job Corps. Those are specific kids. Whatever their educational needs are and challenges, but I think, I don't care where they're at, as long as we can introduce them to something that's a viable career. And it's a never-ending supply of work. It's good work that people enjoy. I ran into some people down there in Rhode Island who started Window Restoration in Cape Cod as a second career and love it. You just go on about it. It's nice to hear people go on about it because when you've been in the game for a long time, you can get a little bit cynical about things or like, oh, it's never good enough, but people are excited about it. So, that's what the gist of it was. So, we'll see. Follow up talking with Bob McCullough at UVM, about a hands-on component to the program. That'd be great. Yeah, just, we'll say. Like I said, I want to just stay home and read. Somebody said, oh, you'll always have a job, you love woodworking.  Yeah, yeah, gotcha, gotcha. Mary, thanks for coming on the show. It's my privilege. Again, it's always, I see you, not enough, but plenty. And it's just always fun to have you on the show because, you know, you're like knee-deep in all this great stuff that the city is trying to do. And I was bragging about it on Preservation Oaks podcast that'll be coming out soon. Asking all about Preservation Burlington, our TV show, what we do, and what the city does. And it was great. So, I was talking you up on that. Everybody, thank you for tuning in to CCTV, live at 525 in the Preservation Burlington show. For more information on Burlington history, our tours and events, or to get a marker for your historic house, go to preservationburlington.org. And you can see all the updates on our home's tour, which was a record breaker this year. Thanks everybody.


All right. Hey, welcome everyone to our course summary of Sailor Academy CS 105 Introduction to Python. If you haven't been following this series so far, feel free to go down in the description below. We'll have a link to all the previous videos we've done where we've done a recap for every unit of the course. Of course, if you haven't done the course, you should go over to sailor.org. Check out the course in full. You can come back, leave comments, you know, get to what we can. I'll make sure to put links to the course, links to our discourse, and links to Replet, which is the course, which is the program that the course has been using this whole time. And that Dr. Sack will be using probably in this video to help describe some stuff. But without further ado, Dr. Sack wanted to take it away. Again, I'll make sure everything's in the chat and everything's in the description if you need any links. Dr. Sack, how's it going? Oh, great. Thanks so much. Appreciate that. I'm going to try and get into Replet right now. So this is interesting. Would you like me to put a link in the chat? Yeah. Well, no, you know, I had something like set up. I just want to make sure, oh, here we go. Okay, it's a little laggy for somebody. Sometimes, you know, Replet lags. But anyway, I think while this is trying to find itself, I'll come over to the webpage just to let you know where I'm going with this whole thing today is there are 10 units to the course. The first unit just has to do with introduction. And I made the decision to go with the web-based IDE. But there are other ones out there that you should probably look into installing because a lot of people try and communicate via notebooks and so forth. And there's just so many resources out there for Python. It's really a very popular language. And so once that's all set up and get through the basics, then talked about different kinds of operators from arithmetic, relational and logical. Then unit three was just talking about flow control and loops and so forth, basic built-in data structures. And then at that point, it became sensible, I think, to at that point become sensible to really talk about functions without lists and strings and so forth. You can show little examples and so forth. But I think once you start to introduce lists and strings in the context of flow control, then it's sensible, more sensible to talk about interesting kinds of functions. Then a little bit more into Python built-in data structures. Talked about handling files, doing string searches using regular expressions, a very important topic, exception handling, if you want to go out and do this for a living. And then ultimately getting into just some introductory, very introductory, very rudimentary, very scratch-the-surface concepts in object-oriented programming. And so trying to get the higher view of things, I think the most important aspect of unit one really was just understanding really simple stuff like what a print statement is, how to identify the variable type. My experience has been when students get into like a unit one situation, there are two important concepts, I think. One is just the notion of an assignment operator, the fact that if for certain data types, if I go ahead and say A is equal to 7, and then I rewrite A as being, let me just make sure I'm sharing this, and then I rewrite A or recompute A as being able to A plus 4, and then say print A. A can only hold one thing. And because of that, the assignment operator is destructive and intentionally destructive, so that when you're done, you don't see the 7 anymore, you see whatever the old value of A was, which was 7, you add 4 to it, and you get A back out again. So I think at the introductory level, some students oftentimes get confused about what the assignment operator does, because your brain doesn't work that way. If you had to, you'd be able to memorize the number 7 and 11 very easily. In fact, I was just out of 7 and 11, I got a cup of coffee this morning, but anyway, I don't know why, maybe that's why subconsciously I picked those numbers. But the point is that you can remember the 7 and the 11, but for one variable, in this context, you've got one number inside of that variable. Now if we get to this, there'll be more, but I'm just saying that this notion of overriding, this notion of having an old value and overriding it to get a new value, now like I said at the introductory level, that takes a few iterations for students to kind of hook into. But once you're beyond that, I think the other part of it is when it comes to floating point notation, again, everybody has different math backgrounds, and so there's some students who may not be a thousand percent comfortable with certain floating point representations. And so in this sense, you might be comfortable with C is equal to 0.001, clearly that's a float number. And so that's fine. But I would say that to really grasp or key into, because in the course, I actually created information that was designed to have you actually review scientific notation. To really understand floating point numbers, you've got to understand scientific notation. And so don't run away from that, I guess is what I'm saying. For Unit 1, when the scientific notation portion is brought up, I want you to feel comfortable with that. Programmers have to feel comfortable with numbers with whatever context things are put in. And then finally, just again, whatever your preference is for string representation, some people like double quotes, I like single quotes. But that's your preference. It's just various basic kinds of data types so you can get up and running. Then once you're comfortable with floats and ins and bool for logical, actually I don't introduce bool until we get to relational operators because that's where they make the most sense. That's really all there is to Unit 1. I didn't mean for it to be overly complicated. I wanted to be a nice stick your toe in the water, very easy examples where you start to get comfortable with numbers, comfortable with representations, comfortable with the fact that for the computer's sake, not for your sake, you don't make a distinction between an int and a float and a string.  But just because of the way data gets represented on computers, we have to make the distinction between those data types. And that's what's most important is that you have to understand the type of data that you're dealing with because they mean different things. If I say in this instruction print a plus 5 and over here I say print d plus 7 if I do it like a string, they're going to mean different things. In this case a plus 5 is going to be 11 plus 5 and that's going to give you a 16. But over here if I say d plus 7 in the context of strings, this is an overloaded operator. It's an operator that can be used in many different contexts so that if I wanted to concatenate or append a character to a string, you can see that the 7 gets appended to the string value. So again there's the basics of just learning data types and then there's the gymnastics of learning different operators and then learning how to navigate through different methods that might be associated with a given data type. So that's what I think Unit 1 was about. Unit 2 with regard to operators and arithmetic operators and relational operators, even into the course, if we just pop into the operator section, the ability to construct arithmetic expressions really, really depends on you understanding these most basic operations plus minus, multiply and divide fairly straightforward, exponentiation, a number of ways to do this in Python. In the math library, in the math module, there's a POW function that will take, and that's typical of most languages. Many languages have a power function and some languages will give you like a carrot to x-bench. So you have to be careful with this one with regard to what language you're using. In Python, my recollection, again I'll have to double check this but we're going back, but I think the power function in math just basically uses the double star that's for free as part of the syntax. So I don't think there's anything deeper, but I'll have to go back and double check. Anyway, it's your preference. If you come from another language where you're used to using the power method, then by all means, if you're just starting out and you'd like to have a simple operator where you could raise things to a power, then this is the way you would do it. And then the other integer operators. One is integer division. This was introduced in Python 3 because I think a lot of people, such as myself, were just getting a little bit miffed at how the division operation was working in Python 2. So there are differences between Python 2 and Python 3. That's why this is a course in Python 3. And so there's a specific operator for integer division, which basically says, do the division and take the integer part, whereas this is integer division. Tell me what the remainder is, modulo, whatever divisor you're using. And there's a lot of fun ways to use this operator. Maybe I'll bring this up in a second just to remind you. But if you take something modulo 2, you can use that to decide whether or not you have an even or an odd number, for instance. There are lots of applications for arithmetic operators. Your job for this course is to make sure that you are clear as to what the order of operations is typical of what you might have learned in an algebra course, because you have to, and I've seen this happen when students start programming, they get very careful. They get very careful about their programming. So they start adding parentheses everywhere. And it just looks chunky to have a simple expression that needs like nine sets of parentheses, because they want to be sure that the operation that they're computing within the parentheses comes first. But if you really start to get comfortable with the order of operations, then there's no need to use 10 pairs of parentheses in your expression. So that's the PEMDs. That's the parentheses before exponentiation and then exponentiation between multiplication and division, and then multiplication and divisions occur before additions and subtractions. The only reason I learned PEMDs was from my daughter. I don't know how I knew this. I think once you start to do, all I know is that when I started to do algebra, it was just natural for that to happen that way. But some people need acronyms to remember stuff, and that's totally fine. So maybe in your math background, somebody taught you the acronym PEMDs. And that's why I threw it into the course, because I was just trying to relate it to something may have seen before. Once you get beyond arithmetic operators, then you're going to get to relational and logical operators. And when you start playing around with these and you start mixing together expressions, just to give you some idea to do something like this, again, the reason I put these parentheses in here is simply just to, for your eye, for the reader to understand this is true. But the question is, do we really need this? Do you need something like this? And the answer is not, because if you go ahead and look at the order of operations, that the, what doesn't like about that, everything should be fine. Oh, I got to find A and B. Yeah, sure. Good. Yeah. That's why I'm teaching the course. That's why I'm the teacher. You know, something like that. NSC also, so it doesn't like that. So choose C for C4, right? So then, so this would be false. And so the question is, do we need these? And the answer is no, once you start to get comfortable, you just go for readability. And your eyes start to scan across things like this, that you'll recognize that, excuse me, that the relational operators are taking place before the logical operators. Why is that? I'll get to that in a second. So sometimes you're putting parentheses in for readability. Sometimes you're trying to help the person that's reading your code, you know, see structures that are less obvious, you know, in terms of in terms of reading complicated expressions. So that's really one reason for using parentheses beyond the order of operations. And so sometimes I'll put parentheses in for readability, for instance. And that's important. When you do this stuff professionally, you want people to be able to read your code. So often, unfortunately, when people start writing programs that can have thousands and thousands of lines of code, the notion of readability somehow goes up the window. But you don't want to lose that. You're always trying to communicate what you're doing to a reader to make them as easily understand your code as possible. That's a good rule of thumb. But anyway, but the parentheses can be taken away. So I have a different point to make now. The parentheses can be taken away. Because if we come over to the order of operations from lowest to highest, we'll see that parentheses, you know, are always going to come first.  Then you get into, you know, the PEM, this type of thing, multiplication, division, so on and so forth, in addition and subtraction.   So this basically says going from highest to lowest, from the bottom up in this diagram, some people make their tables from highest to lowest. This group decided to do it from lowest to highest. Just be careful when you're reading about stuff like this. You just want to make sure you know what the order of the precedence is. But this is relational and these are logical. So when you come back over and you look at an expression like this, you can see that the relationals are going to be resolved first. And then the AND, which is a logical operator, will be resolved second. So it's not, you're not saying A less than, you know, because you could, in principle, you could interpret it as something like this if you were reading from left to right. And you could say, well, B and A will be evaluated first. And then somehow A less than this expression, less than that, you could read it that way. I don't want to confuse people by drawing into something your brain wouldn't have done in the first place. But you don't know. Coming in blind to a course, if you've never done this before, you wouldn't necessarily know whether you're reading from left to right or if you're evaluating one expression over another.  Now, when it comes to the logical operations, remember, you've got to remember how the logical operations work. The OR only is zero if both operands are false. Okay, the OR is an operation between two operands, and it can only be false if both operands are false. Otherwise, you have to get it true. The AND is kind of a little bit different. The AND can only be true if both operands are true. So in order for this AND to evaluate to a true, just as a review, the A less than C has to be true. And then the A less than B has to be equal to true. Let me shrink this a little bit just to put this back and make it look normal again. So just as a review, the A less than B will evaluate to either true or false. Is A less than B? The answer is false. Now, and A is A less than C. The answer is false also. But what if I made C a 16? Okay, just to remember, 416. That A is actually less than C, but it's not less than B. So what should this? You should be able to predict what an expression like this, by the end of the unit, you should be able to predict what this is going to evaluate to. It's going to evaluate to a false. Why? Because in order for an AND to give you a true result, both A less than C has to be true and A less than B has to be true. They're being evaluated first because of the order of operations. The relationals are going to get evaluated before the logical. That's what the table says. And then you ask, well, is A less than B? 8 is 8, B is 5. So that's false. A is less than C. Yeah, 8 is less than 416. But if this is false, false and anything is false. Why? Because the only way an AND could be true is if both of those results are true. So A is less than B. So that's not true anymore.  So then in those cases, I would get true. So one of the things you want to leave the unit with on logical operators is to have those Boolean functions burned into your neurons. You need to know them upside backwards and forward. So you need to know that the OR can only be false if both operands are false. So maybe if I made A equal to 1,000 just as a review and to call this an OR, okay, then now A is not less than B. And A is not less than C. So now I can get a false answer. Okay. But if I made A equal to, so clearly A is less than, but if I made A equal to a 6, then in this case, I'm going to get it to be true. Why? Because A is not less than B. So this is where I get A is not, but it is less than C. So I get a true over here. So even though this is false, false or with a true is going to give me a true. So it's very, very important that you have a quick way of evaluating expressions. And so you can use the tables in those units as a crutch, or you should immediately learn that OR can only be false if both sides of the OR are false. And AND can only be true if both sides of the AND are both simultaneously true. And that's kind of how I would say the two overarching important concepts from leaving the arithmetic, logical, and relational operators are the order of operations, the order precedence, very, very important. And then in addition to the order precedence, just understanding how those logical Boolean operations, computer scientists, programmers know those tables, and they know how those operations work. So you need to know that. You need to have, you need to understand that. Because why is this being done? Well, the next unit goes into conditional operators. And to understand conditional operators, you have to be able to write down conditions that are going to evaluate to logical truths or falses. So when you construct your conditional operations, then the logic behind it works itself out because you understand the expression that you're constructing. So that's why the relational operators are introduced. Just to give you the 30,000 foot view, it wouldn't be sensible to talk about unit three. It wouldn't be sensible to introduce conditional operators, I'm sorry, conditional expressions, if, else, LFs, without understanding relational and logical operators. Because 99% of the time when you're writing if statements, you're invoking some type of a logical condition. And if you have that logical condition, you've got to be very adept at formulating what that logical condition is, which will necessarily involve complex combinations of relational and logical operators, and potentially arithmetic operators as well. So that's important to know. So then going into the if LFs, then in your, in the text, if I have it over here, in the course, you see pictures of these kinds of flowcharts. So flowcharting is something that's very important for you to be able to do on the back of an envelope. Again, as I said before, I always tell my students, you don't have to become a flowchart artist. You don't have to become a flowchartist to be able to write flowcharts. But you need to be able to have a way of writing down the logical flow of your program so that it makes sense for you to actually write the program. Sometimes you'll have to, again, if you do this for a living, you're going to have to work out different logical conditions. And you may have to draw yourself diagrams to make sure that you have the logic straight. So for an if statement, the key thing I think for students to get once again is that if you have an if conditional expression based upon some logical condition, and then you have some code that's indented, that's inside that logical condition, if the conditional expression evaluates to a true, if A is greater than B, if A is less than B, or D is less than C, and this or that, I mean, this could get quite involved, that the if statement, if it is true, that group of instructions will execute. And if it is false, if this works out to be a Boolean false, then it will not execute. And once again, this is a concept that I think students sometimes have a little bit it's weird, right? It's like you've got code in your program.  I've got instructions A, B, and C, and instruction A executes, and then instruction B executes in C and D in all perfect sequential order. Now you encounter this kind of different situation where you can have sequential code, but it may not that block of code may not execute because the if condition worked out to be false. And basically the program control jumps over that, if you will, it branches over that, and it never gets executed. And so, so emotionally, you know, students have to kind of begin to deal with the fact that they've got code in their program that may never execute, you know, but you have it there just in case the condition is true. So that's different. You know, this is where this, in my opinion, this is probably one of the most important units, units three and four, because the because you've got to learn how to handle logical conditions. And in addition, we'll get to loops in a moment as well. Very important. But so, but, but this is a good picture to keep in mind. The next picture is the if L if case, I'm sorry, the if else case, where, where are you? Because there's no extra if you're the if you're going, if the if statement is true, you're going to execute one set of commands. And if the statement is not true is false, then you're going to execute another set of commands. So, so this is an important picture to show you that if one condition is true, you're going to do this. The other condition is if this condition is not true, basically, then it will do that. Okay. So, so else is like everything else that wasn't part of the if the conditional statement were a less than b, then, then the else would necessarily mean that a has to be greater than or equal to b. Okay. So, so it's kind of like the logical, the else is like the logical complement of the rest of the universe of logical possibilities outside of what you specified in the condition of expression. And then finally, you can go on forever with this, what you need to be able to do is that is that if the if statement is true, there might be something some other condition that you're working for. Once again, it's important to understand that once you execute one of your L ifs, you're done, you don't consider anything else in the L if list, you can have 25 L ifs, right, you can have so many different other conditions. But once you find the L if that is first encountered in the program, okay, you find a condition. Then, then beyond that, once that once that group of commands is executed, you're done, you leave that whole if clause, and then you go on to the rest of the Python program. So very, very important when you can when you construct these structures, because, you know, oftentimes, again, I see students at the beginner level, when you have a series of five, six, seven conditions, and there may be some potentially because because somebody's just starting out, there could be a logical overlap between condition three and condition five, because of the fact that the L if checked condition three first, and ran the block of code with respect to that L if you don't get to go back and execute the other L if block you're done at that point. So that's important to understand that there are blocks of code that absolutely will not execute, you know, they will not execute because those logical conditions either weren't satisfied, or even if they were, there was a prior logical condition that was encountered first, and then that group, what that group of commands was executed. So just very important to understand the architecture behind if L if and L statements, because again, they can get they can get really involved, you know, and they can have they can involve a lot of logical statements. Another thing that isn't was important were loops. Okay, so for loops, as I said before, here's what I think I just want to give you a 30,000 foot view and maybe I'll just do a quick example. Let me show you. So so in unit three is the most important universe I feel in the course, if you're just if you've never programmed before.  You really only start to begin programming when you get to unit three, because unit three has the most important components of a component of a true computing language, and that is you've got you've got the if conditionals, and which is an application of the relational operators and logical operas, and then you've got loops that are going to be doing operations over and over and over again, and those are really the fundamental components of programs. I don't care if your programming methodology is procedural, object oriented, when you're trying to get a computer to do something, your program consists of a lot of loops, and it consists of a lot of if, else types of statements. And so it's imperative that you not leave unit three without really embracing without really embracing, you know, what that what that means. So, so, so for fun, you just as a quick example, you know, with like a, and it let's do like a for loop and say for for i in range, for i in range, you know, five or something like that, just just just a quick review, you just want to show you this, and then maybe we'll do is we'll just print i again, not a very interesting, and sometimes what I ask students to do in fact I'm probably going to ask this on an exam question tomorrow is what all what I ask them to do is could say convert if you understand for loops and while loops convert, convert the while loop into into, I'm sorry, maybe convert the for loop into a while loop, and you can always convert a for loop into a while loop, you may not be able to compute a while loop back into a for loop if there's not if counting isn't even some form of counting isn't involved. But I could say something like, you know, while I is less than, and if any of you know any of my students in the course I'm teaching it's a different language, but don't tell me I'm asking this question tomorrow unless they're watching this video right now. So I'm just kidding.  So, so the the notion of a for loop, right, the main thing about it is that is that for the for loop, you have to say where to start counting, you have to say where to to stop counting, and then you have to say, you know, what the increment is. Okay, so up here when you say I is in range five, range five is counting from zero to four and steps of one. And so, and it's going to go from zero to four. So the condition here is that we're going to keep on incrementing this index up until we're looping until I is incremented from zero to four. Once we increment to five, this condition is no longer true because I has to be less than five to stay in loop. So the way a while loop works just as a review is that you only stay in the loop while the condition, the logical condition is true. In this case, we're asking the question is I less than five, it's less than five stay in the loop, if not, you know, go home and get on to the next thing. So, so I'll just say maybe print, you know, done here just to, you know, just to indicate that this is finished. And if we run something like this, something you're in this junk here, if you run something like this, and just to separate this out, you know, like this, just so you can see it in all its glory, is that both of these loops are going to print out the digits from zero to four. So, so the point is, is that if you're counting, you should be able to go back and forth between a while loop and a four loop. That don't really indicate if you understand how the loop works. You can't necessarily always go from a while loop to a for loop, because as I said, the logical condition and the stuff inside the loop doesn't involve a counting index of some kind. Yeah, you can kind of rest a little bit sometimes, but who wants to, you know, use the while loop, that's what I'm saying. But I think all I'm trying to say here is that, is that in order to really understand what the for loop and the while loops are doing, you should be able to jump seamlessly back and forth between these two chunks of code and understand exactly what they do. So that's that's the most I want to say about unit three. And I'm probably harping on this, probably for the for a good bulk of the time in this summary and review, because my position is that you really, really honestly have to understand these structures to become a program. There's just there's just no way. There's no way, you know, sometimes students, I feel miss the connection between just learning syntax and learning how to program. The key to starting a language to understand, I don't care what line, I don't care if it's English, or you know, some, you have to learn the syntax, and you have to learn the grammar. But once you understand that it's meaningless, unless you start putting the words together to accomplish some task of some kind, all then only then can you call yourself a programmer, because now you're taking those structures, and you're putting them together to do something interesting. That's what that's what programming is. So there's learning the language. And then there's actually learning how to program. And I believe personally that that unit three is the most regardless of the language, any language that you ever learn, you've got to learn how to put those structures together in ways that are efficient and sensible and so forth. Okay, and then after so that's enough about unit three, I've talked about, you know, that's my diatribe for the day. And you'll just have to look at that. Okay, um, then when we get to now when we get to unit four, which is on lists and loops, this is really, really, really where we can be applying the concepts of lists to loops and so forth. And what I tell students at the introductory level is that is that you should always, if you leave a course, you should always know how to perform a running sum. So so I hop on that a little bit, you should know how to compute the minimum or the maximum of a list of values, you should know how to how to find a value on a list by what's called a sequential search, they're more, they're more, they're a very efficient search algorithms out there. And this is this isn't the place to discuss that. But minimally, you know, you should know how to to perform a running sum, you should know how to find a min or max, and you should know how to find stuff on on lists of stuff. And if you can, because computers are really good with this, if you can perform some type of a sorting algorithm, depending on what your appetite is for nested loops, you know, this is another good one also. So in any introductory course, I never ever ever allow students to leave the introductory course without knowing how to do it, at least three, if not all four of these, because this is this is, you know, a 105 introductory programming course. And what you got to recognize is that computers are really good at certain things. They're really good at sorting stuff, they're really good at searching for stuff.   So a lot of what you see me doing in the in unit four just has to do with constructing lists, and then integrating them with with loops, you know, to compute stuff. And and that's sensible. That's a sensible thing to do.  So at some point, I'm sure, you know, I don't know exactly what the example was, you know, I tried to maybe show examples like this in the course, I'm sure, where where you see applications of loops. So maybe I create some list of numbers in this case. And with lists, again, you've got the left bracket, the right bracket, we talked about building lists, we talked about constructing lists, adding elements to lists, using the dot append method. But once we go ahead and build the list and do all that stuff, then the application, you know, might be to to write loops that that sum the values on the list. Again, there's a sum function to do this. But as we said, if you start mixing these these the summing instructions with if statements and relational operators, that sum function goes out the window, it can't do everything that that, you know, you would want a sum function to do, you've got to, you might want to extract out only the values that might be greater than zero out of the list. And in order to do that, then you'd have to be able to edit edit code that looks like this, but but minimally fundamentally, you know, to sum a value sequentially is that you have to start off with an initial sum equal to zero, and then you successively add all the new values to the old values and then you update. And then you can do this implicitly, or you can do it explicitly dependent upon whether or not you have a use for the index. So in this case, you've got a for loop that's cycling through all the values iterating through all the values and be it's creating a range variable that where I is going to iterate through all those values from zero to the length of B minus one. And then remember, lists are ordered containers. So the way that since they're ordered, that means you can use an index to access those values, the zeroth element, the first element, the second element. But if you have no use for the index, then then you can sort of implied implicitly cycle through all the values just by writing code like this. So so which formulation of a loop that you would use to access values within a loop depends upon depends upon what the application is. If you have no use for the index, then you probably don't need to write code like this. You could write code like that. And that would be fine. Both of these, both of these, both of these chunks of code accomplish the same thing. And of course, like I said, the sum function is there, because this is exactly what the sum function does. But again, if you only wanted to, if you only wanted to filter out the values that were greater than zero on the list, for instance, then you'd have to integrate if statements into these sections in order to say if the value is greater than zero, then contribute to the sum. And the sum function doesn't do that. It doesn't do that for you. So this is why it's so important to understand how the code works. This is what makes you a programmer. Not this makes you a programmer as well. It's like, oh, I just used some, you know, obviously you'd use in the right context. But understanding basic algorithms like summing minimum maximum finding stuff, which are all in the course, by the way, that's what's going to make you a real programmer. Okay. And so, so like I said, to see lots of exercises, you know, that ask questions along these lines, because, because this is what I believe a 105 student is capable of learning. And then once you learn these, then you can go on to more interesting, more interesting algorithms and structures, you know, through which you, you know, you can use. All right. Then unit five goes into functions. So now in unit five, you know, we went and elevated, well, a few things really, we went and elevated all the goal of the goal of unit five is to elevate everything that we did in the previous units, so that you integrate them into functions. So with something like this, if I if down in Maine now, I say, maybe, well, I understand. Okay. Let's do it like this. I'm just going to really cut to the chase because the whole you what you should be able to do, let me put it this way, what you should be able to do at the end of unit five is you should be able to I'm just trying to save myself some typing time that I'll, I'll just type it up over here. Okay, so and just back to this, I've got other examples that I apparently come back over. I'm getting myself lost. All right, here we go. And what I'll do is I'll just quickly integrate this into a function. So everything that you do in in you in the previous units now by the time you get to unit five, you're able to take this code and you're able to integrate it within a function, let's say. So definition, and I'll call it f example, for example, it'll have some input be just to save myself some time be as local now. So it's a local variable. And then what I'll do is, is return this so that so what I'm doing very quickly here, you yourselves should be able to do at the end of unit five, which is basically to take to take any, any script that you've written to compute something, and then put it in the context of a function. So if I do something like this and say, well, this function is going to do what? Well, it's going to sum the values on the list. That's, that's the 30,000 foot view of what you want to get out of module five out of unit five, is that you want to be able to take any code, any chunk of code that you've written that accomplishes something or compute something and put it in the syntax of a function. So now you're all experts at the running sum, you should be able to take that code and chop it and drop it into a function. What's a function? Well, it's going to get, you're going to have the death line, the definition line for DEF define it. Here's the name of the function. Here are the inputs. In this case, there's only one input. The syntax for the function is left parentheses, right parentheses for all the inputs, the colon operator afterwards.  And then we're returning s, that's going to be the sum. So if we go ahead and run this, now we compute the sum via a single function. Why? Well, because, because in a real program, you might have need for this code to reuse it over and over and over and over again.  And that's what I really, so this is, this is your introduction to procedural programming is that you're writing a procedure, you know, or a function to accomplish some computation. Okay. And that's, that's what you want to leave with a 30,000 foot view. By the time you get to unified, you're able to take all the applications and, and convert them to, you know, to function, basically, anything that you've written previously. And what else? It's 1013.  I want to, I want to bring out the fact that, that you can use notation just very, very quickly. I want to say about slicing, because I had to race through this also, I remember having to race through this. But, but slicing is using this colon operator, basically, to index several values on a list at a time. So in this case, what I'm saying is, is that A is being constructed, maybe I'll go from, from list value two to five. So when you're slicing, just like for the range function, you'll have an initial index, a final index, a final index, and then you say what the step is. So maybe I'll go from, from starting at, at index zero to maybe element five, and I'm going to go in steps of two. And you'll see here that what happens is that this is element zero, that's element one, that's element two, I'm sorry, zero, one, two, three, four, and five, right? So this is saying go from, from element zero to element five, element, element five is eight, but if I add two, I'm going to go too far. So I'm only going to process elements three, five, and seven, because that's what this is telling me to do. So the slicing notation basically is used to grab multiple elements from a list or tuple or what have you. And, and the syntax usually is start, what the stop is, and then what the, what the index is. Here it says go from element zero, I apologize, to element four, because the maximum, it's the maximum, as Python always is, because you start counting at zero, it's the maximum element minus one. So this is element zero, one, two, three, and four. Okay. And so that's what gets printed out. And there's other tricks that you'll learn within the course. You can have negative indices, you're allowed to use a negative index to indicate the end of a list. So that's, that's nice to know as well.  So there's a good connection between slices between slicing and negative indices. And again, that's an important part of lists as well. All right, let's go on to to dictionaries now very quickly. So dictionaries were just more of the same at this point when you're constructing dictionaries at this point, when you construct constructing sets when you're constructing. So the tuple was the generalization of or change in the list. The tuple is like a list, except it's a constant, it's still an ordered container. Okay, it's still an ordered container. So you can still use indices. What you can't do is that they're not mutable, you can't change tuples. So tuples and lists have their place. If you understand lists, you naturally understand tuples, the only thing that you can do with tuples that you can do with lists is change the values. Then moving on to the concept of unordered containers, sets and dictionaries are unordered containers, they don't have an order into them, meaning that if you fill them up with data, you can't predict sort of how Python is choosing to store them because there's no order. So sets are performing or for performing set operations. And when you're performing set operations, it means that you understand set operations. So, you know, whether you do or you don't, it's kind of irrelevant. But one of the things that you should be able to relate back to is stuff that you may have done in introductory math courses where you learned about unions, where you learned about intersections, where you learned about possibly set differences, but definitely unions and intersections. When you take the union of two sets, it means you're taking everything in set A, everything in set B, mixing them together. And then Python doesn't have duplications. So, you would remove duplications. And to intersect, basically, you're asking the values that are commendable to A and B. And if you're subtracting one set from another set, then you're removing a set from another set. So, that's kind of like, you know, in some sense, it's like, well, I'll leave it alone. And so these operations, I think, are very important because they'll relate operations that you're interested in. If you have a set of things, and you wanted to know whether or not there was an element in that set, it's very easy to use like an in keyword to ask the question, is E in the set? You know, and like I said, unions and intersections are very common within like database operations. They're sort of the basics behind a lot of what one might do with regard to databases. So, it's good to know set operations. And that's why they're in the course. The next thing was to go ahead and move one level up. The problem with sets, well, they're not really a problem. It depends on the application, is that you can't index them. And the way that you can index sets and tuples, I'm sorry, lists and tuples, because they're not ordered. And but dictionaries are kind of the answer to what if I wanted to index a set, basically, I guess that's probably the best way that I could put it. And if you want to, if you wanted to index the set, you know, then maybe with something like this, just to show you how to initialize. So the dict keyword will be one way of initializing a dictionary. Or you can just do it by hand and do it this way as well. It's up to you, depending on what the application is. But in this case, you'll notice what I'm doing here with a dictionary is that you've got keys, and then you have values, you have key value pairs, the syntax is using the colon. For every value, there's going to be a key. So the dictionary uses the left squirrely bracket, right squirrely bracket notation, just like you would for sets. But it answers the question, well, what if I wanted to have an index for a set? How would I do that? Is that possible? And the answer is yes, it is. It is because what I can do is use the left bracket, right square bracket notation to say here, I'm interested in the second element. Well, the second element would like for a list would be an index, but you can't have an index for an unordered container, but you can if you have keys. So this notation with the left square bracket, right square bracket is not an index, but it's just asking you what the key is. You choose the key. The key can be anything. It can be a number, it can be an integer, it can be a string, it can be a character. And once you have that key, if you wanted to use it like an index, in this case, it almost looks like this is an index, but it is and it isn't. But it answers the question, if you had a set and I wanted to index it, how would I do that? So that's a nice way to use dictionaries. And then there's a whole host of examples in the course for writing structures and loops for cycling through and iterating through dictionaries based upon either the keys or the values, because a lot of times what you're doing with dictionaries is you're searching, that's why you have the dictionary because you set up the keys so you can find stuff. That's exactly why you're doing it. So there's tons of examples for using the keys to find values or to compare dictionary keys to see whether or not there's any overlap or uniqueness and all these types of things. So the dictionary kind of gives you in some sense the best of both worlds. It gives you an ability to index into an unordered set via the key and then it also gives you the ability to have set like operations. And that's why they're kind of in the same unit together. And I want you to see the bigger picture for those examples. And then Unit 7 is about file handling. So just a quick review of file handling because sometimes you might not just have data that's constructed within a program. So you want at least an introduction to understanding how file handling works. And basically what that means, so you'll see examples like this kicked around in the course that we said, well, for file handling, you've got to always got to remember an operating system has to do three things. It's got to be able to open and then it has to, you might either read or write to it, you're trying to edit, and then finally you have to close it. You have to close it.  And so you can see here, there's an open command. In this case, I'm planning on writing to a file. In this case, I'm planning on, and then I can actually close it and then open it again for a read and I can read it and do something like this. Assuming that replete doesn't see our AP out. Oh, there it goes. Okay. And so this means that I've created this file, remember there was the file window over to the left where the file gets created for you. And you can save that, you can download it. But this is kind of like your local disk drive, I guess, is the files, when did you can think about it like that? And so this set of instructions has written to a file, saved it, closed it, and then reopened it so that you can read it again. So a lot of the unit is just the gymnastics of learning how to create files, how to write data to those files, text data for starters, and then read that data or append files, and just kind of have that gymnastics of going back and forth. And all the methods that will be associated with reading and writing to files. And again, it's part of your arsenal of programming because you can't always assume that your data is going to be contained within your program. And it's not going to be. In fact, it'd be very common for you to have files sitting out on disk and you have to read them or write your data so that you remember them. So that's an important part of the course. Then moving on to other really, really kind of important topics. If you want to, if you really want to explore your ability and you really are interested in computer science per se, there's a beauty to computer science about algorithms for searching for strings and so forth. Let me come back over here. Every once in a while, you get a refresh replete. So I'll come back to that. So what I did was I tried to emphasize the, you know, in terms of writing code for regular expressions within the course within the regular expressions unit, it's good to become familiar with these special characters. And, you know, just tons of examples that we have for using these, because this is the meat. This is the, this is your vocabulary for writing regular expressions to do, to perform string searches.  I think there's an example, if I remember correctly, the way that I set it up was actually the text for Moby Dick, which is just, you know, a novel and attempting to sort of go through there and perform string searches within that novel. Because that's usually, this is why you're doing, you know, these examples in the unit are onesy twosies, but really the way that you use these is that, you know, you're interested in going into a database to find somebody with an address or the right phone number or, you know, what have you, some characteristic within an enormous database that you don't have the time, you know, you would never want to do something like this by hand.  And then the next part of the course again gets more practical. You know, this would be good for like interview type of stuff where you, you know, if you're really interested in getting like an introductory programming level position or something like that, you know, probably one of the things that I think a lot of people miss, you know, in academic circles oftentimes too often is that, you know, you're right code, but then you never have to test it. You never have to be sure if it works or not. And the whole point of the, and I'll come back to this with a final example, because I'll link this up to object oriented programming, but your code has to be bullet proof. It has to be able to work when you're not, when you don't know what the user is going to do. So your job really, if you're going to be a pro at this, in addition to creating test cases and obeying certain basic software engineering design principles, is that, is that you're going to have to have a way of trying to anticipate the types of errors that occur. And like if I were interviewing somebody for a program position, I would be interested in their understanding of algorithms and code and what their experience is. But, but I would really, really be interested in, in if they, if they understand how to make code that when other people use it, it's not going to blow up and explode. Because you don't want that to happen. I mean, again, there's just so many examples of companies that, you know, you get what I'm saying. And then, and then finally, and that's enough about that. Oh boy, I could spend another, couldn't I, but I'm not going to because, all right, anyway. And then, you know, lastly was the, you know, was the set of object oriented, oriented programming examples. And what I tried to do was to bring out to kind of mix together things, because I think this is, this is the major deal is, oops, I'll get my indentations right here. That's thanks. And they're still in lip. So here's an example, I feel, okay, I feel is the, is the real step in for, for recognizing the power of, you know, of an object oriented program. And the, the idea is, is, is the reason that I have a question like this, and I forget exactly where it is, but I know what I was, I'll let you know what I was thinking was that the real art to constructing exception handlers is, oops, I got my notation. The art to constructing exception handlers, okay, is, I'll try to accept that, I apologize. The art to constructing exception handlers is, if I can get my co construction back here, I got to do this in like two seconds, I just really want to fit this in. Let me come up here, it's going to take a couple of seconds. I don't, I don't, I'll leave it, I want to run this, I'll see if I have time to do it. But I want to make, let me make my point, is that, is that when you constructed exception handlers, that, I keep on messing up my indentation here, sorry, is that, is, is, is, it is an object, exception handlers are inherently object oriented, where you get to create your own exception handlers. Okay, and what that means is that, thank you, is that you as part of your object oriented construction, can construct handlers using object oriented techniques, and that's not really a point for this type of a course, it's introductory. But I tried to give an example question of, of, you know, how you might begin to approach a problem like that. And in this case, what I'm, what I'm trying to exercise, or at least try and show you, is that within these definitions, you can, you can invoke your own exception handlers, okay, you can actually invoke your own exception handlers. So in this case, what I've done is I've taken the init, if you remember, the init is a magic method that's going to automatically run to, to construct this rectangle class, let's say. And, and then what happens is that when you get your values of X and Y, that the try is going to try and set up values. But if you have negative values, they'll be initialized to these, to this set. And then you can have like an else, which says, well, if there is no error, then go ahead and do this. And then finally, you know, if there is an exception, then go ahead and run it like so. So what was I trying to do and show in this example, is that is, and I'm trying to figure out where the issue is here. I got some type of indentation thing going on here. Is that, is that I'm trying to show you that you can integrate, for instance, a try else and accept it within an object, within a class definition, so that if you attempted to run this, that that it would ideally catch the errors. And so, so it's 1030. And, you know, like I'm just kind of wrestling with, with the time now. But, but my point is this is that I don't want you to see Unit 9 as being separate from Unit 10, that really the next step beyond that is to sort of be able to integrate those two together, so that you're creating classes that actually can, can handle errors as well. So with, with regard to object-oriented programming, the key, the key ideas were that you want to know how to define methods, you understand attributes, you understand inheritance, there's a little bit about inheritance and how to have parent classes and child classes. And then like I said, with one final example, I think this may have been on one of the quizzes, is that I try and get you to sort of match together, you know, what you did in Unit 9 with what you're doing in Unit 10. So it's like 1032 right now. I don't know if anybody has any overarching questions, but I just want you to be able to see the bigger picture so that, so that you can, you know, walk away from the course, being able to, you know, understand a little bit more about programming than just, excuse me, and then just syntax. So are there any questions or is there anything, because I'm in sort of, this is like a fire hose, so yeah. No, I think it was good. I haven't seen any questions in the chat. I know it's a little past time, but if you have any, anything you need to go out, I have a meeting at 5.30, I got to get to. So if you have any last points you want to make, feel free. Yeah, not necessarily. Like I said, I just, I wanted students to be able to see the bigger picture, which is, you know, I think, as I said before, Unit 3 is very important for programming. And then as you begin to build upon that, it seems like there are these pieces that, well, how would I integrate file handling or how do I integrate regular expressions? Where do I, you know, and it seems like there are just these, you know, these kind of offshoots. But I would say that, you know, by the time you get to the object-oriented portion of the course, you're kind of seeing how to write methods. You're seeing how to write functions. You're seeing how to mix together different structures so that this is what I wanted to do. And that, and that, I'm trying to talk and do the program at the same time.  There's a lot of power in these units that we just don't get a chance to exercise because they would be subject matters for a more advanced course, but you have an immense amount of material to work from. And I don't want you to kind of lose the bigger picture of what it takes to sort of become a programmer. There's a mixture of understanding a little bit of math, you know, you need to know some math, you need to know about numbers, you need to know about data processing, you need to know how to handle files, you need to, and when you mix all these things together at the end of the day, it means that you really have learned how to program. So I hope that that's really the transformation that I hope that takes place at the end of the units. And it doesn't take that long to make it happen, honestly.  And even less time, if you were very committed, you could do it within a couple of weeks. And then you'd be able to answer very, very basic questions, like even interview questions, you know, that somebody might ask an introductory level programmer. Again, you wouldn't have all the data structures and the algorithms and stuff. But just if you're saying, you know, I'd like to try my hand at doing some basic programming, that you have enough to actually do that, believe it or not, when you leave the course. So that's all I hope everybody enjoys it. I hope that you learn a lot. And that's kind of, you know, that's it. That's all I have to say. All right. Well, thank you very much, Dr. Sack. I think that was great. I hope everyone got a lot out of these. I know I know more now than I did before. So I feel I'm sure people who are smarter than me and working harder than me or I've learned a lot from this. So again, everyone, thank you for joining us. Dr. Sack, thank you again. Of course, everyone, make sure you check out the course at sailor.org. Again, links in the description below. And thanks for joining us. And if you're taking the course, good luck on the final exam. Yeah. And just, and you know, I want to thank Mike so much.  You've been the best second set of eyes. And I just, I can't thank you enough. You're great, really. All this technical stuff happened because of you. So none of it was me. Well, now I'm all embarrassed. But thank you very much. And again, good luck, everyone. Again, thank you again, Dr. Sack. And we'll see you.


Take you back to last year the Baltimore Ravens were playing the Buffalo Bills And it was toward the end of the game and in the Ravens they end up losing in very Raven like fashion It was a very frustrating game a very heartbreaking game because it was a game that they had and then it was a game that they gave away But at that game after that game as a matter of fact Marcus Peters He was very heated very upset. He's very frustrated And he was getting into it with John Hubbaugh and it was at that moment with so many Ravens fans They felt like that was the beginning of the end Because while he did remain the Baltimore Raven for the remainder of the season a lot of Ravens fans were like Oh, no the Ravens. They don't forget John Hubbaugh. Oh, he don't forget So they didn't expect him to be back And then when you watch him last year a question that I had because obviously last year was rough on Marcus Peters Was not himself. He was not the worst cornerback in the world But he certainly wasn't the Marcus Peters that we know and love Also a question that I had was was it because is it because he's declining or is it because of him just being Back from the injury him not being fully recovered yet mentally So I guess this year we'll see because now he has officially signed with his new team the Raiders And let's read the report that came from Jordan Schultz. He said breaking Marcus Peters is signing with the Raiders per sources a four-time all-pro selection and 2015 defensive rookie of the year Peters is from Oakland where he grew up rooting for the silver and black I'm a raiders fan at heart. He once told reporters and I mean now I mean you made it to the professional level So whoever cutting that check you're gonna be a fan of them at heart But no, I do respect it and I appreciate Marcus Peters. I love Marcus Peters for his energy I love him for that just his demeanor I know a lot of people that's what rubbed them the wrong way, but I appreciate it now It was it could be a gift and it could be a curse all at the same time It could be it could be a gift because it could get into opponents heads It could get uh his teammates Marcus Peters teammates hyped up like, uh, yeah, we got Marcus Peters We riding with him, uh, then on the flip side, it could be a curse because It does come with some 15 yard unsportsmanlike penalties You're gonna get those you sign Marcus Peters if he's on your team It's gonna happen But hopefully Marcus Peters can get back to being the Marcus Peters of old now He'll be a couple of years removed from his surgery a couple of years removed from the injury So I do hope that he does well With the Raiders he'll be getting to play it Well, I can't say he get to play at home because they're not in Oakland anymore They are what lost Vegas. So they're in Nevada. So the Nevada Raiders, but anyway Marcus Peters is officially Gone from the Ravens a lot of people did wonder if he was gonna be back A lot of people wanted if he was gonna return But the door is officially closed on that now Something on the bright side that somebody pointed out to me a couple of months ago They said with Marcus Peters When he leaves the team Within a year or two, they end up going to the Super Bowl So he got traded from the Chiefs to the Rams Chiefs went to the Super Bowl He got traded from the Rams to the Ravens Ravens went to the Super Bowl It's Ravens turn It's Ravens turn So we're going to the Super Bowl, baby. If it ain't this year, which it should be It's gonna be next year. So I'm ready y'all. Hey, make sure y'all stay tuned again Subscribe subscribe to the channel. So you don't miss miss none of it. We're gonna be celebrating like crazy. But anyway But shout out to Marcus Peters though, man Uh Marcus Peters somebody who brings a lot of passion to the game Uh, he brings a lot of energy to the game and you need that you need people like that Because if everybody was just walking around being all mundane if everybody just walked around just sitting there just quiet and whatnot Your team would be I I think that the team would be full of a bunch of people who just didn't care If they won or lost they just didn't care and Marcus Peters is somebody that shows that he cares He don't want to lose. He don't want to get beat. Uh, he don't he don't want none of that So he shows that he cares uh with his Just his emotion Um, so I think it's a great thing that he shows us sometimes it can get a little out of control But a that comes with the territory Um, but hopefully the Raiders are getting the good version of Marcus Peters The better version Marcus Peters and the Peters that's going to bake plenty of plays for them. So we'll see how it goes Uh, I'm gonna be looking forward to watching him play. Uh, I'm gonna be having a little eagle eye on Marcus Peters Or maybe I should say a little raven eye on Marcus Peters to see how he does this year team keep it clean I appreciate y'all make sure you subscribe to the channel leave a like on the video And just like Marcus Peters is when it comes to being about some more raven officially now We out


What's going on guys it's your boy dpj here today with another destiny video now I don't really do gunsmith videos but about a month ago probably a little longer I uploaded a video talking about an amazing pool shrapher called the Ludemiller D now this was before they patched where they actually applied a buff to this weapon where it would shoot quicker now this I believe is one of the only year two slash year three weapons in the game besides the spare change that can two bears kill headshot people the weapon is incredible and like I said they buffed it so it shoots faster than what it normally did now if you guys do want to check out the video I made on it where I'll show you guys this thing in action click the link in the video description but the reason behind me making this video is basically because the gunsmith has brought this weapon this week so I suggest you guys go and pick it up now now I already have one so I'll show you guys my one in a quick second but I've actually brought another one which I'm waiting for I'm waiting for that perfect roll of handmade stock counterbalance and something like glass half full because that's the roll you want to look out for something like that also it's got a PDX 41 which is pretty decent too it's another one I'm waiting for as well these two pool shrapher from the gunsmith are incredible weapons now the foundry orders like I said the Ludemiller D this is the one you want to pick up for damn sure if you've got the space get this weapon and hold out for a perfect role and like I said as well the PDX 41 sewers is an amazing pulse rifle too now I'll show you guys my ones of these and they're just amazing PVP they absolutely tear shit up now this is my Ludemiller as you can see I've got crowd control counterbalance and hand-laid stock now this is a great road I'm really twisted but I'd prefer something like glass half full here or something else crowd control it's okay it's not the worst perk but I would prefer something else that's why I'm holding out for another Ludemiller D now I'll show you guys my sewers this thing just it's like it's just a headshot machine it's like bullets don't want to miss we've got perfect balance counterbalance and rifle bow which gives it incredible range as you can see this is just an awesome weapon too but like I said it's got both of these weapons this week so if you've got a spare Glimmer make sure you pick them up but if you haven't gone grind you've got until Saturday this coming Saturday to grab these package orders before they disappear and you won't see them again for another couple of weeks maybe so yes be sure to get this Ludemiller D is one heck of a weapon and like I said they've buffed it now in PVP so it shoots faster than what it normally did and it just tears shit up two burst headshot kill it as well and that's why I say if you can get this role with counterbalance and hand-lead stocks to make the stability good it just it's just a headshot machine and like I said two burst kills you can't go wrong but guys hope you enjoyed the video do drop a like I do appreciate the support and I'll catch you guys on that next one