So, good morning everybody. This is Houseways Names and it is Thursday, February 17th. And because it's Thursday, we're going to spend part of the time on education finance restructuring and Emily is going to run the meeting. But before we launch into that, let me just see if anybody has any announcements or questions about what's going on today. Caleb isn't feeling great. So he's not going to be with us today. I don't know if he'll be. Hopefully might join us, but he may watch instead. So whatever, whatever he does is fine. Anything else anybody has. I think that's here because you see his glasses. Yes, we'll be here. Okay. All right. Thanks. So we are back in education finance restructuring with Deb and Catherine and Julia and Jim again. Thanks for coming on this journey. So we're going to last week we looked at the numbers for what transitions would look like for communities if we were to implement the transition. So we're going to go back to Deb again to talk about some more details of what moving to an income based education tax might look like because she's been able to model the numbers. I think for the first time, she's been able to model the numbers. And this week, and the week before that we talked about moving to an income based education tax. As could be as part of the transition. It could be a separate conversation. However, you'd like to work it in your brain. And so it's pretty fun and interesting to look at. And so with that, I'll really just turn over to Deb. We have documents on our site. For her to talk us through and I'm excited to look at some of this all modeled out. I think about it. Deb, the floor is yours. Thank you. I'm Deb Brighton consultant to joint fiscal office. So we covered before sort of the basic gist of changing what we're calling what represented for her as I called that income model. But actually, we've decided to call it the resident education tax. Just so that it's clear when we're talking about the education tax and that it's separate from the personal income tax. And so what so all that I'm going to show you is the change in what is now the house site portion of education finance and so that means I'm going to show you charts only involving that change holding everything else constant and that at this point, we're applying this only to replace the house site tax. So therefore it's only on owners, homeowners. Eventually we would like to apply it to renters to but we don't have enough data to figure out how to do that at this point. So, Deb, can you before you jump into that, can you share when you say holding everything else constant. Can you share some of the bigger things that are held constant when we're looking at this. That's helpful for me to sort of see where this fits into the big picture. Okay, so all of the money going into the education funds is the same. All right, we haven't changed the non residential tax or the sales tax or the lottery or any of the things that go into the education fund. We're only taking the same amount of money that's currently raised on the house site tax and rearranging it. We also ran this without changing the education spending in any of the districts and we're similarly raising the revenue based on a yield. It's the same principle that we have now that every district would have this access to a common tax base, essentially. But in this case, the, the link for the taxpayer is between adjusted gross income, as opposed to the value of their house site. Thank you. Okay. Yeah, I have a question just before you started you said something about not including renters yet is that mean that they're not in the model or that the recommendation is that we do this but don't deal with renters. They're not in the model yet. And so the recommendation at this point, the bills that have been introduced are to just change from the residential house site tax to an income tax and then to look at extending the tax to renters and then also having a rental credit. They're not in the bill. It is in the bill to figure out a way to get there, but it is not in the bill to change the renter portion at this point. I'm going to probably shouldn't ask this right now but I'm wondering if you, if you are going to be showing us anything that shows us, like, if everybody in a town had the exact same value house. In a town and no renters versus a town where some people have high, high, you know, have a whole short report of, of people living at renters to 50 houses, you know, $500,000 houses to just see how that plays out. I'm just wondering about that. Carol, can we see. Is it okay with you if we see what we have and then see how we still want from there. That's a good idea. Okay, be sure. Yes. But I'm just saying that. Write it down because those are really, I want to make sure that we. All right. Thank you. Just a moment ago, you, I think I heard you say it was not in the bill. And I was wondering, is there, are you referring to an actual bill in the Senate? Or did you mean something else? There are two bills. I've, I'm more familiar with the Senate one, which is 212. And the house bill is 388 maybe. I'm sorry. I don't know exactly the number. And I don't, I don't know for, I'm not thinking of this as working off a specific bill. I'm thinking of this as sort of building out models to see what it looks like and then figure out what details need to be open in or out. Yeah. Yeah. I just want to make a point about this first graph that's on the table right now. That yield is, it's not an apples to apples comparison necessarily what we do now with yields for income because the income yield now. We divide the yield into the district per pupil spending, and then we multiply by two. So, so this is not really so in the other system we multiply the quotient by two. This one we don't. I love that that makes sense to you. Yeah. If you're comparing it to the current system. It's like a yield of twice that amount really. That's an important point to me. Can you explain what Scott was saying or expound and what Scott was saying. Well, he's exactly right. And I think that if you looked at the yield and saw that it was so low.  It's very close to what the income yield is currently. So the rates are very close to what the income rates are. And while they made currently, and why that may seem like, oh, that's logical. We're doing exactly the same thing. I was sort of stunned because I'm sorry. Maybe it's Caleb. Sorry, we're having zoom. We're having a zoom moment. Just a quick question about who's trying to come in. Oh, it's Caleb. Okay. Caleb's going to join us via phone. So there's a second of transition. Okay. Well, just give us one second. Caleb. Hi. Hi, sorry, I was trying to mute. Yeah, we're glad to have you. And we've just started. So you haven't missed much. And so we're on the very first page of the charts that. Deb has shared with us in our honor committee page and she's about to take us. Start taking us through them unless someone else has framing. Okay. Deb, back to you. Okay. All right. So on the first page, just on the top is showing that we're calculating the rate exactly the same way that we currently do. We take the spending per pupil. We divide by the yield.  The difference is, as representative Beck pointed out, that we're not dividing and we're not multiplying by two, which we do under current law. So it's just straightforward. And so it still works that different districts will have different. Rates based on their spending per pupil. Why do we multiply the income yield by two. Because Ian's ago. We had a base rate, I think it was a property rate of $1 10. And we sort of needed to set up an income rate that was kind of equivalent. And I actually couldn't remember this, but Jack Hoffman told me that he thought we set to percent. Because we kind of looked at what lower, let's see what higher income households were spending as a percent of their income and decided to set it there. And it miraculously, we're coming out with a very similar yield now, and the rates would be very similar to that. But it was never calculated based on the total population, the 2% was never calculated based on looking carefully at the total population and making sure that they would bring in the right amount to fill the, the Ed fund. So it's something of a, it was a good guess. I can add a little bit there to when that 46 went through. There was conversation about that item that topic. And we, it was decided to leave it times to because that left the income yield and the property yield it close to the same level. Yeah, and we thought oh my god if we have one really low and one really high that would make our incredibly complex system even more this not understandable that it is already. So it's a way of having them look comfortable. Yeah, they're not really. So anyway, but it was more. Let's see arbitrary at the time. And so the yield now is calculated to bring in exactly the right amount into the Ed fund. And luckily, they are pretty close. So, so the chart down at the bottom is just to illustrate two points about what happens here. One is that you see that the height of the bars is different in one district and another, depending on the spending per pupil, the same way that it is now. The other thing that's important to notice is that all the way through through every single income category along the bottom, the height of the bar is the same in within that district. In other words, the, the rate as a percentage of your income is going to be the same for every person in within that district, except for the people making less than 50,000. That's where we have sort of a ramp up to replace the circuit breaker. So, going to the second chart. This is basically just showing you where there's a change then between the resident education tax and current law. And so what you see is the purple bars of the resident education tax. And we're looking at the tax. The percentage of income in each of the household income categories. And as in the first chart for the resident education tax, it's flat. Everybody's paying the same percentage of their income, but current law, you can see is not flat that people were paying a different percentage of their of their income. When I'm looking at current law, what I'm looking at is the net tax that people paid on their house site. So what is happening in current law is that first you pay on your property tax and then you get a credit afterwards based on your income. And it only goes, it's sort of, and it has these various bumps in it, but anyway, by about 135,000 or so 140,000, you're not on that system and you're just paying based on property so that you can see at the higher incomes. Paying on property is ends up being a lower percentage of your income. Then it would be if you were paying on your income. Okay, that makes sense so far. I just have a quick question. Why is there that little bump between the 850 and 900,000. This is actual data. And so there can be strange things going on like numbers. Yeah, just somebody has a really low value or I should also point out that we were I'm showing these as household income category. We collect household income data from people who file for the credit. And our idea is to change to just a gross income. So we don't have a household income. File number for people who have high incomes now, unless it just happens that their software filled in that she so where there isn't wasn't a household income. Number filled in and where the AGI is greater than 135,000. I substituted AGI for household income here. But where you see those blips, it may be the actual somebody actually had a very low house value or they filled out the form incorrectly, something like that it's just it's the actual data coming in there. So thank you. Janet stole one of my two questions. The way I'm reading this chart, if the purple bar is higher than you are paying more at that income level. And so, you know, as as your income goes up, you're paying more than you would be for the property tax. But why not at 50 to 100,000. Are we gonna be asking those folks to pay more. He's like exactly don't want to make paper. It'll make sense. It'll make sense later. It'll make sense on the slides from now. Okay. Great. I hope that's clear later, but I will look into it if it isn't. Okay. We'll come back to chart two after chart four and see if. Okay. All right, so going on to chart three. And this is just showing you the difference in the in the median bill in those categories, which is pretty much what you gather from looking at the other one, except that it's the differences. It looks like a perfectly straight line when you're looking at his percent of income when you actually look at the median bill then you start to see, you know how the bills are going up. And so you see a lot of places where the purple bar is much higher than the red bar. So, I think it's sort of important to zero in on where the population is. And since most of the population is in the lower income categories. Look, take a closer look at that on chart four. Okay. And this is just showing you the same household income categories but current current laws the red line. And the resident education tax is the purple line. And it's showing you the median tax bill, and it's in smaller increments. So it's $25,000 increments so that you can see a bit more about where the discrepancies are. Deb, it's the lines swap. It looks like at around 75. And then swap back again. Red is current law. Yes. Yes. And then swap back again at 100. Can you talk us through that a little bit. Yeah, I guess I would say their current law is lower below 50,000 income. And that's mainly because Well, a couple of things, but one is replacing the circuit breaker with a ramp down. So there aren't those steps, and there isn't that cut point of 47,000 it just is more gradual. And also, using AGI instead of household income means that household income that we use now adds things in to it that are not an AGI, like for example, disability insurance, things like that are added in so that AGI is lower than household income at the low end, where you have those kinds of additions to household income. And then I would say that they're basically the same. There are data anomalies, but they're very, very close until 90,000. And you know that at 90,000 that's where you suddenly in current law have a cap on your house site value. So, since most people at 90,000 have a house site value that's slightly higher than that cap, they're paying based on income plus that excess amount in their house. House site value. So that's why the red line is higher, starting at 90,000. And then by about to 225, it starts going the other way. That's the point at which the resident income tax would be higher on average than current property. At that point is just property, you're not paying an income under current law. And that little dip that's right there at 75, what that is, is people that are eligible for the credit, however, their calculated property tax is greater than their calculated income tax. And so they pay the property. And that's what that's, so they're eligible, but they're not getting anything because of their property value. But it's slight, but it's that's what it is. Yeah. So, all right, so then. Wait, yep. All right. I remember way back a long time ago, before I was on this committee and there was a proposed income tax for education on one of the things that the committee stumbled on. But Ottoman being a prominent voice was capping, whether or not to cap the income tax part of this proposal at a certain, you know, that is at a certain high income level. And, and I don't know if we want to go that way or not. But someone is going to ask us in the committee or outside of the committee and I think we should at least be prepared to discuss it. So, I'm just throwing that out on the table. Do you have. Well, you've modeled. That often comes up. And I ran these for not having a cap on income. I did at one point run it with a million dollar cap on income, just for curiosity. And also you'll see later right. Maybe I can save it for the very last slide, but thinking there's also a question about volatility in high incomes. And so there were two sort of two reasons to think about capping it. But the model, the stuff that I'm going to show you now is not kept. You're right. It's a discussion that always comes up as soon as anyone talks about this. Just on the other hand, Deb, did you consider or think about a more progressive structure rather than essentially is a once you get over 50, it's a flat tax. So the tax structure commission debated that for a really long time and thought simplicity outweighed going to brackets. And part of the reason for that was we wanted to maintain local control. If we maintain local control. And then had brackets it gets a lot more complicated. So anyway, the short answer to that is that the tax structure commission talked about that quite a bit and opted for simplicity. And so in this modeling that I'm doing it's it's a flat tax. Thanks. I was going to ask the same question. And then I just lost my second question. Sorry. So we're ready to move on to the fifth for you. Yeah. Okay. So I had a few charts in here just to show the shares of filers the shares of taxes raised to see sort of a sense of our people paying their first share that's really the question that comes up a lot. Sorry. I'm sorry I remembered my question. I still with all of the modeling. I think I understand that what you used for the modeling was household income because that's what we have. And I'm wondering what happens in the translation from household income to agi in terms of tax rates and various other things because they are different. Different partly because of the number of people you count in the household so anyway just wonder if you can help us with that. And maybe maybe you did use agi and some of this it's yeah higher higher incomes are pretty much agi because people don't fill that in. And the, there's a pretty good link between agi and household income. After, I don't know, maybe 100,000 income. But below that, because of the different all the different things you have to add into household income. It's, it's much more variable. And because Well, you've seen the form. It's very error prone form. Yeah. So there are some of it when you get in and look at the data. Household by household and maybe I should say the agis is by household also. To the extent that the people are identified in the form that's sent in. And so for joint filers, of course you get it. But you're also asked to talk to file other people in the household so we've gotten those linked by spam. So can I get clarification on that so if you have in that, if you, you're married couple and you have an adult child living in your home, you're including the agi for all three of them. And this, this model. Is that what I thought, heard you say. Yes, it's based on the filing status you're doing it by some, some, something that sort of in between agi and household income. Right, we're taking that declaration form. And that has the SSN of other people in the household. And the tax department linked that into the correct span. It's not perfect. And first there's the household declaration where you have to actually claim the right people, same as we do now. But then once that happened, the tax department was able to locate that other filers information. So, I guess I'm trying to understand why you didn't use the construct that use of over 100,000 why didn't use that same construct below 100,000. Let's see. So we have household income. It's that complicated form that's filled out by people who want to claim the credit now. And so, if their household income is greater than, or if their income is greater than 135,000. Generally, they don't fill out that form. So we don't know their household income. We do know the agi for everyone who's filed an income tax. So, and so I'm wondering why we wouldn't just use agi to model this across the board. Okay, so I thought about doing that, and it makes current law look crazy. There's a mismatch between agi and household income at the low end. So, I decided to go the other way, which makes whichever you use in the x axis makes the other one look less sensible. But anyway, I decided to go the other way, because household income is what we know now what we're using now. It's what people will understand. And most of the people are within the income category where they have filed that. George. But I thought part of the reason to do this was to get rid of that complicated, difficult household income form for people. I thought that was the codes that to the agi for everybody. It definitely is. But the only reason I'm using it for comparison is because that's what we have now that's our starting point. I do have some charts afterwards to show you how this works with agi. And of course, it looks great. But these are more to show you how it's comparing with current law. Okay. So the chart five is just showing you. Maybe I misunderstood. I thought the proposal. I thought I heard you say that the proposal this bill out there or whatever is to link those agis and a household but is that what you, is that what you said, because so, or is that just what you're using for the modeling. That's just what I'm using for the modeling. You don't have to add them together. Yeah. Okay. So right part of the problem is comparing with something that's very complicated now, and figuring out the fairest way to do the comparison. I want to summarize what I hear you saying and you can please correct me. So, in order for us to understand how this concept on the table would compare to current law, and sort of people's experiences of current law, you wanted to have something that people see tried to construct something that looked like household income rather than agi for the purposes of comparing the two. But the proposal on the table and the actual impact in people's lives is on would be agi and just agi and just file or just whoever files. Yes, right. And so we'll then look. We'll look at individual filers that sort of experience the individual impact and we'll be looking at charts of that in a little bit. Yeah, great. Okay. Okay. So, chart five is just showing you where the people are. Okay, and this is to help us figure out how we're shifting, like who's paying and who isn't. And you can see that, even though the chart show those really high purple bars going way off to the right. You can see that there aren't very many people way off to the right. Okay. So, chart six is showing you what people are raising, essentially in those income categories, how much what share of the total house side education tax is being raised by those different categories. The red bars current law, the purple bar would be what would, how it would change under the resident education tax. And I see that in current law households with incomes less than 250,000 in aggregate pay more than 85% of the total house side education tax is raised and that would drop under the resident education tax they pay only about 75% of the total. Can you call us for a minute there that's the way of thinking about that is taking my brain a minute and maybe other brands met. The way of looking at the same thing is in chart seven, which is trying to overlay those two charts the two previous charts. So you see the gray bars in the background are showing you the households as a percent of total you can see where they are. And then the lines the two lines are showing you the percent of the total house side education taxes paid by under paid by the income category. So the red line is showing you the percentage of the total house side education taxes paid by each income category under current law, and then the bluer purple line showing you how it would change under the resident education tax. It's so so high the purple piece on the residential education and a million and more is that did you take a snapshot in time of people are people selling their businesses and that's where you get so much income tax there. That was report. At the far end. So, well, I should point out, it looks like it just went up at the far end, but basically, the chart would have to go way way out to the right if you kept the same increments of $50,000. So, it really, I can press them all into one category, but basically it would be along the very, very, very long tail. Like goes way out. And then there's the purple bar. And what would it just say what that line with a long tail means. I'm sorry, I'm not envisioning it what would the picture of it look like very, very, very small but goes all the way along. So which means. Yeah, very, very few people, like a lot of increments with no people in them. And then a few people way at the end. But I think the question is the number of households that fit into that. It's someone that I'm thinking a lot. Yes. So if the table, if this chart was sort of had the same categories as you went out for if it went out sort of to infinity instead of putting all of the final categories into one. Are you saying that it wouldn't go up at the end it would just stay flat on forever. Essentially, they're going to be paying the same percentage of a very high income at the very end. But this, what this does point out when we're looking at the shares is that people making more than a million dollars will pay much more under the residential education tags, then they're currently paying. Yeah, I just. I'm thinking of a farmer with a land or a family business who decides to sell in a year. And they almost have to become a resident of another state so that they didn't get hit with an income tax income tax and then, well, just, I'd like to hear about that. Just what what happens in that case. Maybe. Can we hold that until we get to the, the last chart which we're getting to the high income person and the volatility question. I think it fits in with that. Thank you. David has a question. Yeah, just before we leave chart seven. Yep. Just had a moment to look at that before we went back to chart six so a chart seven. 50 to 100 income category. Just as an example here so if you should I understand this. They represent 40% of households. And under current law are paying 30% of the total and under under the proposal that you've modeled it would be 27% something like that. Okay. Yeah. And then for the next group. It's a lower percentage. Okay. Good. Thank you. I'm flipping through but not finding it. Is there a chart that shows the number of households in each category. Because I put the percentages are helpful and interesting but to me it makes sense. How many households we're talking about 220 households total and what's the distribution along the income line. Okay. So total number of households by income category. Yeah. So you've got great charts showing increases and decreases and percentages but not the aggregate number. I'm just curious what the numbers are in each category. Yeah, okay. I can do that. I have a harder time doing the aggregate numbers, just because I pulled together three different databases and and I had to get a match on all three before I can use them so it ends up not being the total. I'm going to calculate that for me before he can do that. You've got, you've got the share. You've got the share. Yeah. One category I can do the totals. Okay, share and figuring out the number is so. How tens of a percent. How many households is that. It's a big spreadsheet. No, I mean, you just want a number for each of those income categories. Okay. I would also wonder, are those, and this gets to where I was, I'm trying to figure out something. It's are the 220. Are they always, are they often changing how steady are those actual households, those 220 households that always the same or is, is a half of that a sale of a business or something. That's what I'm also interested in the volatility question. Not only of the US in a way. Okay. One second. Sorry, Caleb, I don't, I just want to make sure you know how to raise your hand and you can get the number there. And so if you're not, feel free to text me or source up. I can only ask him to actually. Great. So, Caleb, if you need anything, we see you there and I just want to make sure you don't get lost because I find participating by phone really challenging so just want to offer that up. Deb back to you. Okay. Moving on to the next two charts together eight and nine. Okay, so chart eight is I've changed now what we're comparing this to and we're comparing it to the share of AGI. Okay, so we've got the height of the bars that share of the total household adjusted gross income in the state of homeowners. And then the purple line is showing you the share of that. The share of the total education taxes raised based on the share of the AGI. And you can see it's a perfect fit, because that's the design of the program. Okay. And then nine is showing you the same thing but adding in a line for current law. So it's showing you the shift in terms of as a percentage of AGI between current law and the resident education tax. Does that make sense. I hope. It does. We're nodding, but you can't see it. Okay. And then is just a list showing you the number of people, the share of the households basically that would see higher and lower bills, and what the median difference would be. And you can see there's a lot of movement. You know the lines, make it look as though you know it's pretty smooth, but in reality there's a lot of movement back and forth. And you can clearly see the pattern that the residential education tax would be higher as your income goes up. But in the lower categories there are plus and minuses. A lot of it has to do with the difference between AGI and household income. You know how that's calculated or not. I have a very basic question, median decrease and median increase are those dollars. Yes, yes, sorry. Yes, and that's where. Yeah, and this is where again it would be nice to know how many households are going to see an increase and how many households are going to see a decrease in each income category. It's kind of surprising that even at the lowest number, there's a significant number. If it increased for some people. Yeah, even at the lowest income. Yeah, they're on their on what they're spending. Basically what we're $200 for the median increase for less than 50,000 who have a decrease would be more than that. But if there's only three people in the increase category and there's 500 in the other, that's going to tell a different story it just doesn't. I don't get a picture of knowing the number of households. Well you do have the share of the total households in each of those categories so that you know that 200 to 250. The bill is going to be lower but it's only 1% of the population. You know so you can get a sense that way. Okay. And so I can, okay. Sorry, David.  But I guess I have two questions one for the under 50 and one for the 50 to 100 income categories. I'm just confused because they are currently treated differently. And it sounded like they would still be treated differently. Until that 50,000 mark. But, but I guess then, once you get over 50 I'm also confused about why, can you explain why there are people who would see an increase here, just conceptually. You know, let's see. The reasons that I can think of is that there's a difference between their AGI and their household income. And it's between what the tax department shows as the AGI of the people in the household and what was reported on the household income form. That's the biggest thing that I can find. It feels very counterintuitive. George, do you have a. Yeah, I just want to make sure I'm reading this right. If we took the share of total households and added up all those percentages and those columns that would be 100%. Yeah, so there's 49%. And 51% in the each column. So the total is up to 100%. Yes. That would say that more people in the 50 to 100 range will have an increase in taxes, then we'll have a decrease. And that shows on other charts. Yeah. Yeah, I mean, that points that blip that Emily noticed that's those are people that are, they don't have high income, but they have high income relative to the property value. That's who that is. I think you're right. Yeah. At the other end you get some people having a decrease with over a million dollars of income. It's kind of, it's surprising that person has a massive house. And the million dollar plus, you know, some people getting a reduction. Yeah, that person has one big. Let's go find that single person and their single house. David, do you have something else for today? Well, maybe, maybe the same logic applies to the under 50,000 income. Why that group also has half, almost half of the households would see an increase. Is it because they're paying right now based on their home value property value. Yeah. So is it, is it a function? Is this sensitive to district spending? And some way. Is that. I'm not here. That's part of the model how it wouldn't be. Yeah, no, I don't think that's it. There, there is another piece in here under 47,000. We have that $15,000 exemption. And if people take that rather than paying on income, it must mean that they have a very low house value and they've just subtracted 15,000. So, and that would be the better deal for them. So, so it's the same thing that representative Beck said, but an added twist is the $15,000 exemption on top of that. So how low it knows. How low is someone's house site value have to be to have that work in under 50? I don't know. Okay. I'd have to, I realize I should go through and try to characterize why the people are in these different categories. I did run some statistics on it and found that the correlation was the biggest explainer in terms of just playing the data and not data errors and differences in in agi versus household income. The biggest explainer was the ratio of household income to house site value. Okay, that would make you shift from one to the other. But I will try to look at this more carefully to figure out what are that, you know, sort of categorize. What are the reasons you do have some weird things that happen down here. It's like what are people will will take all their income out of some fun for three years and then for, you know, they're showing no income for the number. I mean, there's some, there are some strange things that happen down in this area. But again, knowing the numbers helps because you can explain away some that way, but you can't explain away a lot. Yeah. All right, so I know that what you wanted to do is figure out how this fits into your discussion. And, you know, how this would work in an individual town. And I think that was representative Odey's question before, you know, how does this look at a town level? And so in the very first chart, we showed that everybody within the, in a district would have the same percentage of their just a gross income going into this. The very first chart on the very first page, you mean? Yeah. When we were talking about the yields. The very first page. Okay, so, so we know that. And then we know that it would differ from one district to another district to spend depending on the spending per pupil. Okay, just as it does now. And so. The change really happens within groups. With within income categories in a single district where they all have the same. Rate as a percentage of income, but it will change their bills differently. So chart 11 is an actual town. And the rate goes up very slightly, like 2%. Over the current 3%. I think it is. And it just shows you what's happening into different. Taxpayers in different income categories within that district. Yeah. Yeah. The other models that we looked at assume that spending is the same everywhere. They're not sensitive to spending decisions. This is, this is the first chart that we've looked at the. Attempts to link. Local spending decisions to the tax impact. Is that right? Well, the very first chart was. Very first. Yes. Everything else was looking at the averages. Everybody spends the same. Exactly. So I really understand impacts you'd have to, you'd, you'd want to, you'd want to connect them to actual spend this, what Carol is getting at you'd want to connect it to actual spending in a district and see how that rolls out. Right. But pretty much. It would be the same in any district. Because both your current spending would be higher. In high spending district. And you're. Spending. Well, it would be the same. Distribution is also just different. District by district. Yeah. And I would add when I think of the distribution of household district, district, I think one thing that could happen a lot district to district is the mix of folks who have. Higher incomes and low property values and people with. The inverse of that. And high, high. Low. Yeah. All of those things. Everyone of them tells the story. That's right. That's right. When Jake runs that chart, I've seen it. Yeah. There's a whole lot of people whose house value is two to three times their income. That's your middle class. And then you got the outliers. And there aren't very many of them, but there are enough of them that. They distort the picture. They do. Yeah. That's right. And so that's exactly what was that. That ratio was exactly what was the biggest. Determinant. Of where you see changes. Is that ratio of house site to. Income. And so, you know, I think that in terms of. What you're looking at with waiting. You're looking at. Essentially adjusting. Tax capacity. By. For each district from district to district. And what this is doing is looking at adjusting. Tax capacity, essentially. At the individual level. Within the district. So. In a sense, it's, it's determining your. Individual tax capacity based on your AGI. And the tax capacity of that district. Depends on its AGI and a spending per pupil. So it's more individual changes rather than. Affecting your. The way you're defining tax capacity. By rates. That wouldn't change. But within a district. It would change for individuals. Okay. That makes sense. Okay. So, I mean, I guess the bottom line is that high spenders will be high spenders. The yield is very similar to where we are now. So that essentially. The tax capacity, the way you define it. By your rates. Wouldn't be different. District to district. Within a district. There would, it would be changed. Because it would be based on the. Adjustive gross income of people rather than the combination of the property value and adjusted gross income. And so the last two charts. Are. About this high income people. And that gets to. The volatility question and also to representative Masson's question about. Should we kept the income somewhere? And I think that. What you have in the very. High income categories. You have a lot of sort of one-time events. And. Selling a business, something like that. People may be in that category. One year or not in that category any other year because. They just had that huge capital gain. And so. It's a big volatility question. Particularly for the income tax. Personal income tax. And, but I think there is a difference. Between. Taxing. That high income category. And. Selling a business, something like that. People may be in that category. That high income category. Under this kind of a system in the end. Doing it under the personal income tax. One is that. The personal income tax. Is bracketed. And so. If you have a capital gain. That in one year. It would push you into a higher bracket. And so. It would make people have often said.  And then they would presumably pay a lower rate. If they paid over 20 years in this case, there's just one rate. It's not bracketed. So it doesn't make any difference whether that came in one year, whether it came in in 10 increments over 10 years. And so. Another is that the income tax is considered. Volatile. In terms of. We set our budgets and we don't know what the income tax is going to bring in. To meet that budget. By the end of the year. The property tax is considered. Less volatile because. We set a rate. To meet the budget. And so. In this case, for the resident education tax, we would do the same thing. We would set the yield in order to meet the budget, rather than just keeping the old constant and then having to hope that it brought in the amount that we estimate. A third thing is that we would use. We have basis on your prior year's income. In other words, right now at this time of the year, when you're filing your income tax, you would use when you went to your school meeting to figure out what you're going to. Pay in school taxes next year. So. Well, we haven't. Tallied up all of the. 2021. AGI yet. We do know. Whether there's been a pandemic or not. You know, we, it's, it's not a complete unknown. It's a total AGI. So we can make a much better estimate. As to what happened economically. So we can make a much better estimate on it. And. And the third thing is that we would have a stabilization reserve. But anyway, the two charts are just showing you what the total AGI. Was from 2011 to 2020. And. The second. Sorry, they're two 12s. Anyway. I'm sorry. I'm sorry. I'm sorry. I'm sorry. The second 12 is showing you. What difference it would make if you capped it. At 1 million. So you took off the most volatile portion. I don't. I guess I do. I'm trying to overlay the two in my mind to see the differences. I did this. Why is it different? There must be more. I don't know. I don't know. I don't know. I don't know. I don't know. Okay. No, this is what you're waiting for. So do you have. Yeah. I just need that. Just what I'm looking at. I get the words, but I don't. See how it translates to this picture. Can you explain the capping again. Or a little bit more. Explain which part. How you capped it and what it did when you capped it. Oh, okay. Okay. So if your AGI was over a million. We didn't count it. Essentially we counted your AGI up to 1 million dollars. And the amount of that was not, was not included. All right. So in each year we knocked out. We didn't. If somebody. Had. An AGI of say, say $5 million. We didn't knock the person out of the picture. We just knocked the extra 4 million out. I got, but, but I'm looking at things that say 20 million. So I don't understand. $20. Oh. Yes, thank you. It's not 20 billion. It's 20 billion is the aggregate AGI. And if you look at these, this is each year. What happens when you knock it out. Yeah. Yeah. Sorry. Thank you. Yeah. All this tells me is there's more volatility in the income. It's over a million dollars. Sure. Yes. Yes. Which I think that's what we've known. But that's a nice structure of that. So. Approaching a million. Sure. Yeah. I think. Yeah. I think we need to wrap up especially to give some time for, I believe two of our members are. Being nominated. At the joint session. Who's that? Is that a 1030 and a 1015? I don't know. It's 1030. Okay. Okay. Great. So I'm so glad because I had. I have time. I feel like ways of means is really going to get famous today. So we do, I'm sorry, we do have a couple more minutes. Does anyone, we've been through any one of any questions about these two people. Carol. It's just, I'm wondering. How. Taxpayers. And. I get that it's driven by local spending. But. How it looks for. Attack. Could a taxpayer making a certain income in one town with the same spending. Have a higher income tax than a person in. In another town with the same spending. Based on. What. What the housing looks like in those two places. Whether they're winners and those. You know, the, the different. The comparison between current law and this proposal. Will look different in different times, depending on that. But once it's in place, it's going to be exactly the same. Same income, same rates. If the transition will look different. Same income, some rates and tax. So. But there might be a. One town might have more property value. So those people might be. They're different. From the current law to where they end up. Different from it down there. Less expensive. The transition may be bumpier. Or maybe smoother, depending on what the current circumstances are. But that's not. It's not the size of the school budget from school to school. It's the size of the S. Spending from school to school. That would make the rate. Yes. Yes. So the. It's also the relationship between a kind of property value. Yes. At least to get going. And I'm saying once. And I'm saying once this happens. And if, you know, say 10 years out, everything's in place. Every district with the same at spending. And the same income would have the same. Would be pain. The same. The same. The same. The same. The same income would have the same. Would be paying the same every person in all those places. We've paying the same. But that doesn't mean that. If two districts could have two different. Budgets. And the same at spending. So just like today, it's spending that drives the tax rate. Not budget. Spending. So. Yes. We're equal. Or maybe we won't have. Well, I'm not assuming we will. For unintended consequences. What, what could the, what would people start moving around from. You know, I, I finding low. I'm just asked the wondering. Go ahead. So the question that I keep trying to, one of the questions I keep sort of modeling. Through, but I haven't figured out what the right question is. Is whether we're really confident that we can. Allocate the income to the right district. And I'm not sure why that seems challenging to me, but I'm, but we're not. I'm. Living callous, but, and my property is in callous, but I'm not used to thinking of my income as being callous income. And I understand that it is. So I'm just trying to, I'm trying to think if there's a. And if there is what it is, and I just, because it's a whole no concept, we've never. We've done household income, but it's rooted in a house. And so anyway, I just raise it because I've just never. I've never felt entirely. Confident. And how that's going to work. Well, because people have incomes from very different kinds of. Situations and also move around a lot. In particular, if you're talking about renters, it gets to be more challenging to move more than once a year. But then if they do move. How does that, if they, if they, if I got, if I lived in callous and for half the year and Montpelier for the other half of the year, where does my state house salary get allocated. For the purpose of figuring out which tax rate I pay on. I guess maybe it's a simple way to ask the question. Well, right. Do you want to try to answer that? Well, there needs to be a rule around it.  I mean, we have a rule right now for which. For property tax. Complicated. That's entirely rooted in the property. And we know where the property is. Yes. Could you repeat that? No, because it was. Well, I could try. It would be a different sentence. Well, so I, I own a house in callous. I work. I get my legislative income. Whatever income I have. Not income. I earn in callous. And then halfway through the year, I sell my house in callous or. Third of the way through the year. And then I moved to Montpelier. And Montpelier and callous have very different spending. Pretty close people. So which rate do you apply to my income? Do you apply a blended rate? Or do you apply the. Where I lived on April 1st. Or April 15th, which is a filing deadline or sort of what is it? And, and given that what happens to those decisions. Because they might start to matter. I guess. Yeah. I'm less concerned about that, Jen. I certainly get your question. As I am about. Looking at church nine. People in the bottom two lists. Someone's Texas going to go. $15,000 to $30,000. Whether some of those people. You know, Might go to Florida some of the time anyway, we'll declare residency out of state. And I wonder how that figures. I mean, we certainly in years past had. Former tax commissioner.  Analysis, whether we agree or not. People. You know, moving out of state. And I. As, as we. Understood in the past. They're very few tax payers in very high categories, but they pay us substantial amount of both income tax. State treasury and pay a substantial amount of. Of this tax. So. I'm. Need to arm ourselves with this information we can get. In order to understand. The repercussions, I guess. And it could be that the consequences of being a resident or. Not being a resident would be that much higher. And how you use your property and whether you rent it out and so on. And what those rates are, but I'm curious, Deb, do you have an answer to the question I asked about how you decide which tax rate applies. I think our, our thinking was that it's, you come down to make up a rule. That you are a resident based on. A certain time period. And that the bill is set after town meeting, and it has to be paid. And so if you move. To Montilier. In the middle of the year, you still have to. Your original full bill has to be paid. If you want to work out something out with. If you want to work out something, you can work that out. If you want to work out something, but he's moving into your house and they're going to pay some of the. Your property tax bill. You can work that out. But basically the full amount of the bill has to be paid. And you're responsible for it unless you've. Made arrangements with somebody buying your house. And it's based on the previous year's income. Oh, we know. So. It's a known entity. It's a new entity. It's a new entity. It's a new entity. It's a change. And, but we sort of gone halfway there by. Filing your household income. And having that homestead declaration. And basically we don't have that piece with the renters. But at least we are. We have gotten some of the way by. I guess I could just reflect on that for a bit. So the current system is rooted in a house, which has a fixed location. Other than the trailers that we're going to talk about someday, probably, but. But the, if I'm a taxpayer and I've moved, I've long ago given up on callus and I've been a month earlier for nine months or whatever it is. And now I'm going to pay. I'm going to pay a tax bill that supports the callus schools. And it's a year plus since I've lived there. And I just, I'm just trying to think about. Explaining that to people and. Sort of how. How that gets. Received and understood. I am. And we have to, we have to wrap it up, but I will. I think. Dev used the phrase education of residential education. Tax, I think, and that's how I. I've been sort of imagining it is that sort of, it's the rooted in the residential. And so I think of it. Similar to how the property tax were brewed someone in a spot at a point in time. And this is just, the way income is just the mode that we used to calculate it. It's not that. It doesn't sort of travel to where, where your bank account. But we should stop and take a break and go to the floor. And nominate our two wonderful ways and means members to be trustees. And thank you. Thank you. To all our members of the city. We are really grateful to be here and nominate our two wonderful ways and means members. To be trustees. And thank you.


Well, my name is Niko. I'm a dev developer focused on front-end development and work-dress, obviously. I'm self-employed, which means I spend an unhealthy amount of time inside a little room, I call my office, and I write custom themes, custom plugins, and all kinds of web-based software. Well, today I'm going to talk about progressive web apps, a subject that I think will be the next big thing in web development. And I've structured my talk around the three most important questions, obviously the what, the why, and the how. And I'll just start with the first question, the what, pretty easy, what is progressive web apps? Well, the answer is not that easy. I had my first talk about progressive web apps around one year ago. Since then I had some talks about the subject, and on each talk I completely changed my definition of progressive web apps. The reason behind that is I'm not very happy with the naming of progressive web apps. Because that indicates that it would be a product, like a website or a web app. There you have some differences to tell whether it's a web app or a website, or a product like an app. I always feel like that should be a product, and in the end it's not, because a progressive web app is just a website. It's as simple as that. It's based on HTML, it uses CSS, it uses JavaScript, and it runs inside the browser. But there are new features, new browser features, so I'd call it a website plus. And the fun thing is that was my very, very first definition of progressive web app. I made a quick turnaround through all kinds of definitions, and now I'm just going back to that very first basic definition. So why do we need something new? The web is great, right? We have this global network of servers. They're all talking to each other, they're all connected with each other. We have browsers, which means you have standardized scripting languages that run everywhere. And in the end, somewhere on the planet, you can publish some piece of content, it could be a blog post, it could be an image, it doesn't matter what. And the minute you publish it, I'm able to access it, I'm able to read it. Or we could create web applications, very powerful web applications that run everywhere. That means you can run that same web application on an iOS device, on an Android device, on a desktop PC, on a macOS, it just doesn't matter. And that's pretty cool, and that's already happening right now. We do have the capability of those web technologies. But then you have apps. And in that case, I'm talking about all, let's say, operating system-based software. And that's cool as well, because we can access the full potential of our devices. But in the end, we do have to write the exact same application multiple times. You have it maybe for Android, you have it for iOS, you have it for Windows, and you have your macOS. That's just four times exactly the same application. That's insane. Why would anyone do that? Why would anyone create native applications? There's reason. And that's because 87% of the time, user spends on his smartphone, he is inside native apps. That's 87%. That's huge. Because in the end, we all are web creators in some way. Our designers, our web developers, our content creators. And that means we all need to share those remaining 13%. And in the end, that means that the mobile web is there. And that's not just a number I came up, or I made up. That's from the COMSCOR report in 2015. Well, that's pretty bad for all of us. Luckily, there were some very smart people at Google. They were looking at native apps, and they were looking at mobile apps, and they were looking for what are the main features, why native apps are so much more popular than web apps. They're forward, they're fast. That means once you've downloaded them on your smartphone, they are there. They can boot up immediately. There are no network requests you have to do, or that's in theory. They are integrated. Why is that important? I like to compare it with the living room. You have stuff you use on a regular basis inside your living room. That's limited space, so you have just a small amount of stuff you use on a regular basis.  You could use anything, but that's just not inside your comfort zone. Everything we have inside our comfort zone, which is integrated in our smartphone, we use on a regular basis, and that's why it's important that those native apps feel like they are inside our comfort zone. They are reliable. That means that even if you don't have any internet connection or a bad internet connection, there is still something happening if you click on our app icon. So that's not what you have on a web application normally. And they are engaging. We can send code notifications to the native app, and re-engage our users to our app, let's say. So they were thinking about those five four words, and they were thinking about a next generation of web applications, and they called it progressive web apps. The biggest part of my talk was how do we achieve that? I was talking about new browser features, and that's one feature that's the web app manifest. And it's pretty, well, it's pretty basic. It's just a chasing file that contains some information about our website. We have here, we have a name, description, some colors. We have a display mode where we can decide whether it should be open in full device or we could still show the notification bar, we could use the browser, the browser bar as well, we can define the display mode, and you can set a whole bunch of icons in different sizes, in different formats, and the device can just pick the icon it needs. So in the end what we have here is smashingmagazine.com, which is a progressive web app, and let's say I've read that, or I've seen that article on Facebook or Twitter, I visited their website, and as soon as it matches the browser progressive web app criteria, I will see this little prompt that asks me, hey, that's a progressive web app, do you want to add that to your home screen? I can click it, and then it's right next to all the other native apps. We have this smashing magazine app right next to Chrome, it looks integrated, it looks just like a native app. So basically that's all the code it takes to make a website into a progressive web app. If you want to add it to your home screen, yes, that's really some kind of, one line of HTML, one line of JSON, we're done with the other home screen. The next time I open it, it looks for, as I said, the display mode, so the URL bar is gone, and it just takes the whole size of our screen, and it really looks like a native app. That's pretty cool, and even if you open our task manager, it's there right next to Slack, which is a native app, and right next to Google Chrome, and that's funny because Google Chrome actually powers the progressive web app, and it's still in the task manager, it's right next to the native apps and Google Chrome. That's the app to home screen with our manifest. Then we have a new thing called the service worker, and that's the actual magic thing. Because when you have a normal website, you have JavaScript files. You have some, maybe you have this theme, JavaScript file, we have a plug-in, and there's core JavaScript files, and the latest versions of JavaScript are really, really powerful. You can do a lot with them, but they have one problem. As soon as we close our website, all those files, all those, let's say, apps, they've just gone, they're dead. We can't do anything after that. So the service worker here is as well, is a JavaScript file. It's plain JavaScript, but it lives inside a different scope. It lives somewhere between the website and our device, and it lives there forever. You need to close the website, you need to close the browser. It's still there, and it can still listen to events. How does it work? Pretty simple as well. We can register it using Navigator Service Worker Register, and then we can just put the path to our service worker file. You can wrap it inside a feature detection, and then we have our service worker. As I said, it's plain JavaScript. It's event-based, so we have the installed event. That's when the browser first visits the website, it sees, oh, there's a server-circle, and it installs it. Then you have to activate the event that's happening after the server-circle was installed. And the cool thing is you have a fetch event, so every request goes through the service worker, and you can play with that request. Another cool thing is you can use ES6 because as soon as I know all browsers that support service workers also support that new JavaScript version. How can we make our website reliable? We have the same example as before. We have a website that's connected to the internet, sorry. It makes a request, it gets the answer and displays the answer. That's simple, and it works. But what if we don't have an internet connection? You will see that network connection error. In Chrome, it's the download store. It's a pretty fun thing at the first visit, but it gets really annoying and you don't have any internet connection for a longer period. Now, with the service worker, we have, first of all, we have the service worker that's between the website and the internet. And we have something new, that's the application storage. And that's very important because even if you don't have any internet connection, we still have a reliable source where we can put content and we can take content from that source. So we still have something to interact with and we have that source, that application storage. In the end, what we can do is we can, as I said before, every request goes through the service worker to the internet, comes back and then we can decide what do we want to do with that request. We can take a copy and put it inside the application storage and we can pass it to the website and we will display it on the website. That's cool. Now, with the internet connection, we can, we will see here, oh, there's my internet connection, there's a problem and we can look right here if we already have that content stored and that our application storage. And we can just take that cash source from the application storage. So having no internet connection is still pretty bad, but we do have a pretty solid fallback using service workers. When I prepared those lights, I was in Italy on the camping site and, well, in 2019, I was still in Europe, I did not have no internet. I had Wi-Fi. I had camping site Wi-Fi. Sometimes better, sometimes nothing, but on regular it was pretty, pretty bad and actually that's worse than having no internet connection because having no connection is at least honest because there is no connection, you don't get any content, you won't see anything, you get better. Having that kind of unstable or just a slow internet connection leaves us there staring on a white screen and loading, loading, loading and maybe eventually we will have something to display it, maybe not. And there's a very cool term by Jake Archibald and that's Wi-Fi, but it's just not honest. How can we get rid of that? That's the same scheme as before, but now we can make our website faster, actually faster using progressive web apps because that service worker is just JavaScript and we can play with that. In the end we can take or we can create a different caching strategy. In that case, when the website makes a request, we can look at the application search and if there is already something in there, we can just take that source instead of the internet so there's no network request and that is really fast because it's on our device already, it's already there. So there are no network requests and the cool thing is we can decide for each request we can decide whether we want to go to the internet and get the most recent version or we want to have that cache code strategy where we take this version from the storage. That means for static files like CSS, JavaScript or images, it makes sense to take the copy from the application search because that doesn't change on a regular basis but for dynamic stuff like HTML documents, pages or JSONs or REST endpoints, it makes sense to first look at the internet if there is a new version. So we can play with those kinds of strategies. The next thing is engaging. Being able to send push notification is not very new. We have the web notification API that's already there for years, I think, at least in Chrome and that allows a website to show push notifications to the user. The thing is we have seen before as soon as I closed the website all our crowd script is dead so it doesn't make sense to show push notifications to someone who is actually using our site at the moment. So having a service worker, having that infinite or that reliable thing inside our browser allows us to send or to trigger a push notification from the network to our service worker to the subscription endpoint and that service worker can then take that push, it can pass it to the device or it can display the notification on our device and then re-engage our users with our website. So it's cool because it works even if you're not using the website right now. And having that feature is very cool because if you think about not our regular news sites if you think about Twitter, Facebook, e-mail clients those are all applications that they don't necessarily have to be native apps but for them it's very, very important to be able to show push notifications. So that feature is awesome, it's very powerful but remember with great power comes great responsibility. Who knows what that is? Yeah. Nokia. Nokia. Okay. That is a browser permission request and it's not an easy to use extension of your user interface because unfortunately most of you will feel like that, right? Yes. The problem here is I've already seen so many websites that using that in a wrong way because I said that's a browser permission request that's like a camera or a microphone access you would never show a camera access right on the first on-load event that's just nobody would do that, right? But here with that push notifications permission I've ordered that there are so many pages that just throw it on the on-load event and they think well if you show it on the first time maybe someone will click yes but that won't happen because if you think about that you read an article on or you see an article on Twitter or Facebook visit their website that's the very first time you're visiting that website you have no idea how often they will send push notifications about what subjects they will send push notifications nobody would allow that but still at the moment that's a very bad or let's say that's a we call it an anti-pattern in user experience that's happening a lot right now so we have our progressive data because it's fast because we have our cache for strategies for static files it's integrated with our app to home screen functionality it's reliable because we have our application storage and it's engaging because we can use push notifications awesome and there are a lot of very good examples like Pinterest or as well to delight they're very cool progressive web applications but the thing I always ask myself is that possible to use those features for any multi-page application or for any WordPress application and that's why I created our own website as a progressive web app so you can add it to your home screen it works offline and you can receive push notifications but as you can see here it's a very decent option in footer so if you want to you can you can click on it and then it will ask you if you want to allow push notifications or not and it won't ask you just to update what kind of push notifications do you have or would you put there in that case you would receive push notifications for our blog we have blog posts maybe every six months or new projects and what about other websites what kind of push notifications can we receive if we say accept instead of decline all kinds of push notifications you're completely free if you as a developer you can send all kinds of push notifications you can send every five minutes a push notification that says hi I'm there but it can be really annoying so the developer and that's why it's a powerful feature because if you allow that you allow the website to spam you with push notifications so that's why it's very powerful and you should be aware when and why and how to ask Slack users also Slack users it okay in a browser so that makes sense as well because if you have a notification you can have a push notification and after that I created a plugin called Google SuperPress and there you can add all those features as an add-on enhancement to any existing website and I think that's pretty cool and when I created that plugin it was when I published it it was the first progressive ever plugin first fully featured progressive ever plugin and back then that was no problem but now we see a a growing number of plugins that use progressive features of themes that use progressive features maybe the manifest is something that should be managed by this theme and as soon as we have multiple modules like themes and plugins that all use those features we very quickly will have conflicts let's take the manifest file there can only be one manifest file per website if you have a theme and a plugin they both try to register a manifest file that will at least one will fail also the service worker if you have multiple service worker multiple fetch event listeners you'll quickly have some conflict between them luckily there already is a solution that's a feature plugin by XWP in collaboration with Google and the idea here is to bring standardized ways standardized APIs so we as developers can use those APIs instead of registering our own files let's take the manifest file my plugin registers a new manifest file and if we have that plugin in core I can just hook into that API and add my values to the already existing manifest file that's very important I was able to contribute to the discussion from the very beginning on and I also did some commits to the code and the cool thing as far as I know verpress is the only CMS at the moment that is working on a progressive web app solution for the core and that's a very important thing for the future and I think every CMS especially every module based CMS needs to have some kind of progressive web app implementation for the API so that's it from my side thank you very much for your attention and I think we still have time for some questions about 30 minutes for 30 minutes great what would be or is there a solution for the pop-up that hey I want to send you push notifications obviously the user doesn't know what kind can the developer put their more information like these are the push notifications that I'm going to send you if you accept or that can be put on a separate page then I guess on the website that if you are able to send you or what would be a solution for this because I think lots of users simply decline but they don't know whatever as far as I know there's no way to add more information to that prompt but the thing is how do you handle that prompt as I said it's a browser permission request and if you want to you should do those steps before you show the request and if you go to our own website you will click on the push notification then there's the pop-up explaining you hey we send push notifications I don't know why we do a blog post when we do a blog post something like that and then you can click activate and that's when the prompt is triggered and at that time it's clear for the user oh okay it's about that it's a page well I can allow it but if it's right on the online event so basically the developers at the moment most of the developers are using this in the right way it's like the google map or the geolocation request that's something if you are on the home page and you have no map or anything and you show that prompt the user will think well why do they need that I just decline it and the same thing here it has to be clear why they give that access before you show the prompt okay thank you that's our idea so two comments first one is this year at working bureau it was the first year when they created a aggressive web app where you could check all the talks and you could choose some of the talks and build your own agenda that was very useful because there are three tracks plus two workshop tracks in bureau and you just don't know I need to go now here and there and then you just see your own agenda like compiled perfect use case or you have multiple stuff on your device already and you can just create a device based information yeah it worked awesome, wonderfully and the second comment about how to make that pop-up appear more user friendly and I just think I draw some inspiration from do you remember all those websites who are forcing you to install an exit file to infect your computer like they are starting to download they start to download your exit file and they are displaying a page with html showing you an arrow please click on this file here then you will have a pop-up we need to confirm this well that's a bad purpose of course but we can I think we can draw on that inspiration and build an html page which will actually show an arrow inside of the html saying hey if you press on this button pop-up will appear there please click on the but that makes sense if you denied the request once you want that prompt will only show up once and if you blocked it it won't show up again and then you need to find another way that the user okay I blocked it before because they had a bad usage before but now we need to let's say find a way that the user actually allows it and then you have that arrow that shows you hey here in the browser settings you need to allow you need to allow it but that makes sense if that prompt is blocked by it maybe we can check from the code that it was blocked and change the graphics it was blocked for the first time this is the first time display one graphics saying hey prepare pop-up will appear here please click here this is how this scammy websites work I think we can learn from them yeah which plugin will you use your own plugin or the one that's coming in WordPress core the thing is it's not yet clear what the scope will be of the plugin in the core my personal opinion is that core plugin should be very basic so there should be maybe those core APIs are very important and maybe some fallback solutions as well but at the moment it's not clear how far that plugin will go or how far those core integration will go will you be able to send push notifications by default in WordPress core I don't think so well I don't hope so so it's still the core should provide the APIs and the plugin should do stuff on top of that and my plugin has a lot of things on top of that you can choose caching strategies for each file type send push notifications so if we started using your plugin you would in the future then also update to support those new core features it is already compatible with the xwp plugin I think that works at the moment and I'm not sure I think they will update the version that we did some days but I already implemented those I'm already working with those APIs one minute left so if I go turn the song on mobile device it's possible to receive a notification when the application is closed right we are all working with iOS because when I create an active application I need to create a certificate among the developer then upload it to a fire bed or mobile server something like that because the web push web notification API is not available on iOS I have no idea if and how that would be available that's the biggest problem at the moment the other features they work on iOS what is the last question is there a village to what kind of data can be saved on that like Google maps I'm really not sure about that there is a limit I've read something about each application can only use half of the available space on your device and there you also have limitations and I'm not sure if there is a standard defined yet and it really depends on the device depends on how much space you have on your device ok thank you very much


Hi, everyone. Welcome to the North America virtual keep count today I'm going to give you a deep dive on the six scheduling and Little bit on myself. My name is Wei Huang. I work at IBM I'm also the culture of the six scheduling so today's content is Separated into three parts and at each part we want the content is delivered to the exact audience so we separate them on to different personas from the Kubernetes beginner to some scheduling expert So we want to that the content to be delivered so that the specific audience can absorb easily Okay, the first kind of audience we are targeting those regular users who just write and Deploy their applications on to the Kubernetes platform. So for them, they just want to know some schedule of basics so that they can use the schedule of Features efficiently and correctly and also they want maybe want to do some basic job shooting to identify whether the issue is belongs to schedule or other components and For sure, they don't want to go too deep into their schedule into those So for them for that is to answer them what you would stick schedule does so in one sentence keep a schedule just find all the pending parts and as on the part of to the most Best fit now, so that's it and in term of API perspective so the pending means the know that doesn't have a Spec download name field set is empty. So you can see from the picture and then Scheduler will Go through some internal logic And we'll find it's the best and know for the incoming part and then assign the part to the note in this case then spec download name was sent to Can work it too. So this is a basically schedule it does and with that being said There are some things I need to mention that which keep a schedule it doesn't do which Often may stand stood by the users like Kota enforcement This is a thing that the admission plugins does added the part of creation time instead of scheduling time and also spinning up and skating down the replicas of Department is the job of catching a manager because they are responsible for Managed number of replicas meets the desire number and also it's the cubelite responsible for evict the running paths maybe because the What can it has running out of memory running out of desk and such and such so I left a few of the Common mist and standing that people would think that this thing belongs to schedule, but it doesn't So understanding this will help you better Identify the issues whether it's belongs to schedule or not and the next we will give a very high level introduction about the scheduling flow the most basics so Once up schedule gets a part it goes through Internal scheduling cycle the schedule will schedule the part one by one and one schedule cycle can be divided into several phases the first one is called filtering so filtering tries to Answer the paths hard constraints. It's like answer your question like as a user I need my part to be scheduled to another which has to give him up to get by marry or I need my part to be scheduled to another which so that to code the existing with some kind of path So this kind of requirements. I call them how to come they must be satisfied and all how Constraints are ended it not all and in terms of the hot constraints, they are usually I think 99% of the cases are from the past back which are specified directly by the user for example the pub request and The the pub affinity so notice there Here the primitive starts with required. So if you Read out some term starts with require is usually the hard work on because because it's required and some other primitive use other terms like the pub project spread feature use A constant strain to identify this is a hard constant that if the constant cannot be satisfied Then do not schedule this part. So you can usually tell from the literals meanings to tell whether it's a hard constant and or a soft the constant our later mention this is Important because only hard constant only Unsatisfying hard constant will make your part into pending status and Next phase so suppose you have 100 Nails and the only 10 nails has passed the filter phase then we go to the next phase called scouring So scouring in contrast of the filtering are best efforts So that I try to answer some question like I Prefer my power to be scheduled to a node which has SSD But if that node doesn't have it doesn't matter. I just want Scheduled to try its best that they'll do this kind of thing. So based on this soft the constant Each filtered node filter means that node has passed the filter filtering constant those filter nails will get a score and we aggregate those score and and finally pick up the highest score and Asign the power to the node which has the highest score. So I won't highlight that in terms of software constant it doesn't block scheduling your power is just describe a relation of Preference I prefer my part to be scheduled on to some some note and Maybe there are some software constant conflict with each other. So it happens so that and The software constant has have two sources. The first one is from the power spec you can identify some software constant in the power spec like part of the node affinity and The primitive starts with pre-ford blah blah blah blah, so this is software constant and usually it comes With additional parameter like weight so that can give the user a Customized weight so that I favor this constant more than other constant software constant and also some features are using other Primitives which are usually self descriptive like When the power cannot be satisfied, I will still schedule it anyway So this is a software constant and there is another kind of Software constant which are not specified by the user instead usually specified by the cluster enemy Upon the scheduled startup. So they are called I call them implicit scheduled config so there are sort of Scheduling policies like the default policy tries to Use the node which has the list and located resource as possible so that It will try to make the cluster the utilization balance Rather than being packed or the pause to one single note. So this is for software constant and You may think about think of a question that what if No node can satisfy all the cost hard constraint in the filtering phase. What should we do? so We have a special phase called preemption. So preemption is only triggered one There's no node can satisfy the hard constraint and it will See whether there are low priority Candidates which can be sacrificed can be Preempted to make room for the high priority part if this is possible a schedule will go Print the low priority pass to make room so that the high priority part is schedule both so in terms of API you have to define the priority class And the specify their value the higher the value the more important the priority is and In terms of the path spec you'll define the spec dot the priority class name and correspond to that prayer priority test Which the schedule we are on there in the long term All right, this is pretty much I think in day one a regular scheduling user needs to know about the basics of the schedule and You just need to learn that scheduling has Basically three phases filter scoring and preemption and If you see a party see pending status first ensure that the path spec dot no net is not set So that is in the scope of scheduling which are trying to schedule the pattern to the node and Also use keep control describe that part check which constraint hard constraint is not satisfied Okay, so the power in payments that has to check those kind of go through those simply capturing steps but if a part Can't be scheduled, but it's not the desired node that it is scheduled on to There is usually something wrong in the scoring plug in scoring face maybe some default Scoring policies that given by the cluster and mean doesn't fit your clothes You need to check with them or you do some debug to see why one Score policy is way higher than the other. So this is basically for record users All right for day two We are talking the audience as cluster and mean or DevOps So the goal here is a little different. So you are not only satisfied of trading schedule as a black box instead you want to know more about schedule internals and to get to know some configuration back best practices and Also and stand how the scheduling Behavior car related to internal we call the scheduling plugins So that you can make the most of schedule and expose them to the end users And of course, you don't want to write additional code. No matter is a scheduler extender or plug-in. You just do Make customize the schedule with the official schedule image So the first thing you can look into is configuration So configuration as time goes changes a lot in the recent Kubernetes releases and the first thing I want to mention is that Don't use command-law arguments anymore because we have a better design And organize object called cube schedule Configurations so that you can pass on all the individual command-law arguments through that config object through the dash dash config parameter but if you are still at Like Kubernetes 1 7 you have to still adapt to the to the old style Kind of cube schedule configuration and the second thing is Even inside the cube schedule configuration, there are different versions vary from V1 alpha 1 to V1 beta 1 and that the difference This is that before V1 alpha 2 we are still using the old execution paths or old terms like per decays corresponding to filtering and priority corresponding to scoring and They are a little bit different in terms of their naming and the execution paths. So if they are Still using the older config you may be using some thing called the policy file So the policy file is something like this. You define the cube schedule config with V1 alpha 1 version and specify one policy as the policy file and Inside of the policy file if you want to customize some Behavior you have to list all the predicates or the priorities Even if you just want to change one. So that is not good user user experience, right? And also here you can see that you have to provide two files Why is the cube schedule config? Why is the policy file itself? It's also not user-friendly. So as time goes We want to duplicate this kind of policy-based config and instead we are transitioning to the plugin-based config so Plug-in is simply a functional unit that is written to Satisfy one specific constraint either from the user's input or from some Impressive general policy So right now if you are using V1 alpha 2 or V1 beta 1 You can use the latest the cube schedule configurations under the profiles subfield there is a plugin field so that you can Spotify you can disable or enable or Disable all the parking there by writing the minimum YAML snippet as possible. So it's very user-friendly and The more importantly so right now you can see that we have a new profiles Field that means so right now starting with 118 Your schedule is not a single flavor schedule. You can build a multiplex multi-flavored schedule. I will give an example So using the we've up beta 1 configurations here I define four profiles and Default schedule image first the bean pack skip score and they can map to different behaviors in runtime The different scheduling profiles like the skip score is something that I totally Just disable the scoring phase Because I don't care about which node is highest the highest score I just want the part to be scheduled as fast as possible and the bean pack on the other hand Try to favor the node which has the most allocated resource as possible So it's quite fit the the requirements of Autoscaler because autoscaler wants to save the cost of running machines they want to pack all the workloads and minimum machines as possible, etc and In runtime in your workload, you just specify the spec the schedule name and correspond to the profile So in the example that we have four Workload YAMLs and with different Scheduled name and in runtime schedule knows which specific flavor you want your workload to be scheduled So that's the I think the very key change in recent Kubernetes releases So back to this picture So as a custom enemy you should know exactly what each plugin is doing not only by understanding the logic and also knows the Internal stuff like their arguments and how to conflict them and how that arguments Reflect in terms of behavior and here we have a page to list all the default plugins and Which extension point they belong to for example 10 toleration it implements several Extension point in filter phase pre-score phase and the score phase So as a customer enemy if you want enable or disable do some customization I do recommend to check out this The official website And also there are some plugins Was compiled into the schedule image but not enabled by default so you can choose to enable them But again, you should to understand the real semantics of them And some of them have conflict with default ones If you want to enable some of them, maybe you want to disable some of these default plugins that is the basic Cluster I mean need to understand in addition to that There are some other global settings in the cube schedule config like Percentage of notes to score which are very useful if you're running on 1,000 or 5,000 now Properly you don't need to score all the filter now So just need to score maybe 10% or 20% of the notes because scoring is more To favor one note to to the other so some of the booklets just care about whether It's hot constraints is has been satisfied and don't quite care about the soft constraints so that's a very useful features and It's a crust I mean you may want to catch up with the latest Progress in the upstreams a list of a few of them here and the eventual goal is that you Suppose just it's like you are running a burger shop like right in the before you just provide one flavor burger which it has meat onion and Tomatoes that's it You use it just can take it a little bit. I right now you can have You have multiple Ingredients right you can compose them and into different flavors like it's a veggie one. It's With beef is with chicken and with beef. You can also divide it into with green grid and year or with wrong and year or with Tomatoes without tomato s h s h so you can The image is still the same image, but you can provide more flavors so that to adapt to your users work it So this is basically the I think the trust that I mean wants to learn Okay, let's go to day three this three we are talking to the audience which usually skating experts or innovators It's like you're still running a burger shop But you are not satisfied with existing ingredients. You want to make some Innovated ingredients from outside for example then provide more flavors than the default Schedule image provides so in this case they don't care about writing some sort sort of code and The ultimate goal is to fit diverse work clothes such as batching work clothes, which that the current schedule is not supporting well but they are They're not they don't want to stop on scratch to write a secondary schedule because Ronnie and multiple schedule Well invictably caused some conflicts on the pod scheduling So for this kind of users still go back to this picture you should not be satisfied with only knowing that the filtering has some Plucking XYZ and the scoring has plucking XYZ You need to understand for example, why we need pre-filter and how to use pre-filter right pre-filter for example is a phase that Especially for the requirement that you need to consider cross-node Cross-node status so that you need to do some pre-calculations and They put that result into sort of a cache and that result can be used later In filter phase that's for pre-filter and also you need to understand what Permit is and what reserve it right reserve is a phase that you can Before you part guess schedule you can make an optimized Assumption that this part has been scheduled so that you assume this part of resource in the scheduling cache And the permit is a very useful extension point that you can Wait Until a certain criteria like a group of paths come inside all of them are satisfied And you approve all of this of pause in batch. So this permit is a useful extension point in Bachelor clothes and also post the filter is a new extension point we introduce in 119 it Replace the old hard-coded preemption logic so that it's the preemption Logic is more extensible like in the before we just in the default preemption We just consider the strategy to preempt that the nose. Sorry preempting the path on the single node But sometimes it's not not the case and you want to extend this behavior like you want to preempt One group will pass and that kind of a one group pass may be scheduled on to different nodes etc, and also you need to follow up with the latest the change in the scheduling framework and Just read through the release now if you have any questions go to the slack it's a million less that to raise your concern and also we we are going to Jay the scheduling framework in 120 we have started to build this framework since 115 now we are able to say that it's stable enough. You can be go to the next stage All right, it's still the same topic that If you want to implement one specific features, you should know which specific extension point you want to extend And write the corresponding logic there, for example if you want to Can schedule in the common you may need to implement this kind of extended point and if you want to do some Scoring plugins you need to implement the pre-score and score extension point so that So with the default schedule on the base you build something on top of that and finally you get you compile them together and then you get a Unified schedule binary. It's a new new binary which has 100% of the vanilla schedule functionality as well as the additional functionality you built into it and because building a schedule plugin has a I won't say it has a high bar, but it's has a bar. So we initiated sub project called schedule plugins which Writing some examples there and some guidance there for you to start with so right now We already have some caps on gas scheduling Capacity scheduling I'll say scheduling is about elastic order and also some ongoing care like which Favors to use some real-time Metrics of the cluster to do a scheduling decisions, etc. And also we Do some CIA Optimizations to do automatic build and which so that you can just download the image from Kubernetes.GCR.io Right and this this is pretty much for the day three so that Steal the Knowledge that you are running a burger shop. So right now you can use the default ingredients From the upstream and also you can buy some other ingredients From the local market, right? You can buy some special cheese You can buy some special ingredients hazelnut or what who knows and Combine them together to provide additional flavors to for your user to use and the last favorite contact us and You can find all the information here. We have weekly meetings raise your topic there and Happy us Build this community better All right. Thank you. I think this is pretty much for this session. Thank you