Yeah, it's a shit hole again like 40 kilo ball breakers Yeah, everything's down ready for a mix in now This is how you want your wolf to come down So Monday morning I'm on solo one today Alex is supposed to be always I think he's got food poisoning is not so good at all So he's left at home So this is our little job When he came to see this on Saturday then As you can see it's a one two three four courses with a Row of stretches on top single-skinned no pillar as you can see it's on its way over So I'm gonna take it back to the center probably up to there with the steppers Put a step there take it back to the Clean up and rebuild it. We've got about Maybe 10 bricks to replace So we'll just pick up in a clay come and put them in a lower course we've not seen Because they're like a very rare face, but these I've never seen these before We've also got this tree She's a Right on the wall, but it's quite a big tree.  It's got into changeable blades As you can see when they were down just knock it out turn around it's double-ended and They're super for cleaning bricks up So if you've got a load of bricks to clean up that's what you want a scotch hammer They range from about nine quid up to about 28 quid for a decent one I'm trying to get hold of a decent one, but they might stop at the moment Which is a roof neck version These ones when they handle falls off. He just replaced the handle I've got six scotch hammer Pretty nice best friend that 925 Quick one for this battery guys We've got two-thirds the way across The first few are to clean but then There we go It is 1025 message from Alex 1025 walls down Down to that Bob course so Steps up here. So we've got three Three stretches and the brick and edge to go back on So it's time to nip off and get the sand and cement I've a word about this tree because as you can see it's been against the wall Putting the wall back up against that is no good for it. There's a root there and a root there So just need to speak to the customer much of this thing can be chopped down Still have it left there in the garden So plus it's it's dying off now. So It's not like we're taking in its prime Bees love it It's a shame to chop it, but I mean look how far over and So I'll have a word and I get back anyway So yeah off to forwards The usual usual spot. Yeah, it's a shit old again But anyway into forwards got our sand and cement But I still fell as as the big bags big 40 kilo ball breakers Yeah, everything's down ready from put a mix in now just need to hack away at the bit of this tree Just trying to get back out of the way I've been asked to chop away at it rather than chop it off. Yeah, so I'll get set up on time. That's now I'll get the mixer set up and get a mixing fit to break at the other end Well, I'm gonna have to put a couple of bricks near it Couple more on that if we're gonna run through for a bond first Yeah It's got another coast to go before the soldiers That's ready I'm gonna have some dinner now Back in a bit jeez stuff on the back today two courses up Don't used to working this low Anyway, yes as I say two courses up one course to go and then the soldiers to go on Stuff's going off now. I might need to mix a little bit more There's about 60 soldiers in it Yeah, we're getting there. There's a piece at this end, but we're just blending it in We knew it was a piece because of when we knocked it down those pieces You've managed to do it with the bricks that we had didn't need any new ones, which is good because we couldn't match these anyway Yeah, that's it little update for you the trees out of the way we've pushed it back Just needs time back now so it'll grow away from from the wall and Yeah, that's it It's a it's currently It's probably about quarter to three ten to three So I need to pull my finger out to get this done As I said Alex was supposed to be with me today. So we've already got it easy done. He probably got a dirty dart on it But never mind Catching a bit trusty fixed bricks Given gone get some and it's outro time It is get some like well Six two minutes past six So we got it all done Dropped cleaned rebuilt Straight looks like nice and straightforward, but god it was hard work working underneath holly bush This thing which has been dug up now that was actually touching the wall it took out completely And then underneath this thing as well But we got there your back's just about recovered from that It's also I've shown in the video, but it's screwed tied into this. This is solid It's screwed tied into this now. So it's going nowhere It's the back It's obviously a new wall, but it looks like it's been there for a long time look smart and then Like I say it's plumb so next door is slightly out of plumb I need you only a bit So I don't quite line up with that bit So there we go Miniature garden wall in a day done So don't forget to like Comment subscribe And then hit that notification bell so you know when we're uploading new videos So see you on the next one


Thanks for the introduction. I want to make this short and sweet. Yeah, here to talk a little bit about one of the topics I'm fairly passionate about. And we will be talking about it a little bit later in the day as well at a talk that our developer advocate Gibbs from Chronosphere is giving. My name is Rob. I'm the creator of the M3DB open source projects and the CTO of Chronosphere, which is a hosted SaaS observability and Prometheus native monitoring platform. So this is something that I assume lots of us have faced. Loading up a dashboard or trying to essentially view some high cardinality latency data over a growing set of pods or distributed system that you're monitoring. And of course, over time, this can become something that can, when you add a whole bunch of cardinality, really quickly become an immediate problem that impacts your visibility. So hands up, who's ever run into this kind of situation unexpectedly? Wonderful, not the only one. So this talk, the title of it, definitely seems, I guess, perhaps, a little bit extensive, like millions of time series. Why are we talking about millions of time series here? Most of the pods that we're monitoring are in the hundreds. But I just wanted to kind of paint a picture of how you actually get to millions of time series while monitoring these pods in a cloud native world that may be unexpected to the average developer when they start deploying applications and monitoring systems in a container world. So I'm just talking here about a single metric. And we'll find very quickly that just measuring HAP or GIPC traffic can become quite high cardinality very quickly. So we're talking about 50 microservices, 200, say, average pods per service. Now that seems large.  And then, say, each one of these services might have 20 on average HAP endpoints and GIPC methods, five common status codes, and 30 histogram buckets. So you quickly get to 30 million unique time series, which is insane. This is a single metric we're talking about here. And you have lots of things you're tracking and lots of unique metric names in an organization. So wouldn't it be nice as well to slice and dice by the Git server version or the mobile client app version or web front end version? These are all things that are just really obtuse when you get to these kind of numbers of unique time series. So if you multiply by 2 twice, you get to 120 million time series, again, for a single metric. If we remove the pod cardinality, this becomes much more manageable. We get down to 150,000 unique time series across all 50 microservices. And then it becomes manageable in terms of how you think about keeping these around for a long time. So if you multiply by twice again each time to get the active server versions and the mobile client versions on there, you're below 1 million unique time series. So how to get there? A lot of folks already recognize this problem and deploy best practices to make dashboards faster, alerts more manageable, and keeping this data around for longer periods of time, more possible. Using recording rules. And recording rules are one of the unarguably very powerful tools in the Prometheus tool set. However, at these types of cardinality, you do run into frequent problems trying to deploy them in some of these single individual metric metrics that you're tracking that are very high cardinality. So we're talking here about deploying a rule that actually handles the latency across all 50 services, just as an example up front. One thing you might run into when deploying this rule is that you'll find that the Prometheus instance or remote storage solution that you're using, such as Thanos Cortex or M3, starts basically unable to even evaluate that result because it's touching 30 million time series.   You might see something like query processing would load too many samples in the memory. So that's the first issue you might face. Another issue is if you reconfigure your Prometheus or your remote storage instance to actually allow you to bypass those limits, you'll see that very frequently when we're talking about 30 million time series, you're going to start missing that evaluation cycle. It takes far too long to load all that into memory, process that out, and record all the results when you've got that kind of level of cardinality for a single rule. And then of course, the workarounds that you might deploy. So I already mentioned one, which is raising the maximum samples per query allowed by Prometheus or your remote storage. The problem with that is that you'll probably run out of memory. We're talking about 30 million time series. And especially if you want to do some kind of SLA calculation that actually is pulling back historical data, not in the recent 30 minute window, that's just a lot of data to load and process into the query engine just by itself. And then if you're able to deploy enough resources and bypass the max samples limit by a config, you're still going to see that you may miss the interval. So you might go and split out the rules one per service. But this again has similar problems. So divide 30 million by 50, get each rule taking about 600 each rule needs to process 600,000 unique time series still, which is quite a huge number. You're going to eventually hit the timeouts per rule group for that kind of deployment. And also just at the end of the day, you're using a lot of resources just to basically aggregate things in the same system that's storing your data. So actually, these are the steps that happen. So you collect the metrics, you write them to disk. And then when you evaluate the recording rule, it does a reverse index query. And then if it's touching millions of time series or very high cardinality, that can be expensive memory-wise in of itself. You read from that storage, you evaluate the results, then you write it back to storage. And so on a single node, you can actually get quite far because there's levels of efficiency with everything happening in a single process here. Once you go to a distributed model with Thanos Cortex, M3, anything else, this picture looks even more expensive. Because not only are you doing that frequent, expensive reverse index query, reading from storage, evaluating and writing back, this is all going across the network. So every 15, 30 seconds, 60 seconds, whatever your valuation interval is, you're pulling back huge amounts of data over the network from many nodes, coordinating in one place where you need to reserve a lot of resources and then all write it back and serialize that as RPC or HAP calls. M3 aggregation is a little bit different. So it's not meant to be a replacement for recording rules, but it can turn a lot of distinct counters into fewer aggregate counters. And it does that by basically taking, it can do things like take the derivative as the first function of each time series and then aggregate that together and then build another monotonic counter from input counters. So what it's doing is as data is written to either the M3 coordinator, which can be used as a side card next to Prometheus, or using a scaled-up M3 aggregator instance, it essentially does those multi-step aggregations. And at each step, it basically can do a hop within the cluster itself. So it can spread that load for really high cardinally workloads over multiple nodes. And then this is all happening in memory, and then eventually it writes the results of storage. And we can do this now with M3 as of v1.3 with any Prometheus remote write-through receiver. So this is not just an M3DB feature. You can combine this feature with any other remote write back end. And so it's really meant to be a supplement to recording rules. It saves the frequent, expensive step of the reverse index query, the refresh storage, I need to write back. You can scale aggregations separate to your TSTB. So you allow your TSTB to focus on executing alerts and dashboards. And you can aggregate millions of series because you can spread it over a large number of distinct resources that basically handle sub-parts of the space. And so, yeah, and you can also use template aggregation rules to basically apply to many distinct metric names. You don't need to write a rule every single time you wanna do aggregation. And this was just a single metric. And if you remove and just look at one service, there's only 3,000 unique time series here, very doable to scale up and look at those metrics on the fly or as alerts. But if you wanna learn more, our session is at 3.25 p.m. today. Thank you so much for having me here. It's been great to be back in person. Thank you. Wonderful, thank you. And I know I have a couple of questions, but that'll probably come for the session later.


The Electronic Frontier Foundation, also known as EFF, has privacy concerns. There are a lot of ways in which this could go very wrong very quickly. New and unexpected threats. We think that it's a serious invasion of our privacy and civil liberties. We're really concerned about the impacts to First Amendment rights. Targeting of Asian communities throughout Sacramento. The police should not be able to access thousands of private cameras to conduct vigilance in real time. We're concerned that there are risks to human rights and personal safety. Bad things are coming and we're very concerned about that. Yeah, absolutely, because it's not like a normal medical record. Now that Roe vs. Wade is overturned, law enforcement could use a woman's personal data to bring criminal charges if they suspect she's received an illegal abortion. Bagnets searches on locations that provide abortions and then work backwards to figure out who the people are who went to a particular facility during a particular time frame. Our phones track us. Google tracks us. All of that data is collected and it's sitting somewhere. So what rights do Americans have? The federal level. There's the Electronic Communications Privacy Act called ECPA. There's the Store Communications Act, which governs emails. There are some protections in place, but they are so out of date. They are decades old. They are not what we need for this moment by a long shot. The Electronic Frontier Foundation says any legislation to that effect will meet with resistance from Google and others. What are some actionable steps? We really need privacy law. Restrict location services on the apps that you're using, or you might just leave your phone off altogether. Now, there are things that companies can do. First, they can make sure that the warrant is in fact valid because they're not always valid at all. Secondly, they can decide whether they might want to fight back if there's some legal grounds to do so. Another thing they can do is notify their users unless there's a gag order, which may have happened in this case. But really the first thing they need to do is they need to help their users protect themselves. They need to adopt, for example, end to end encryption. If these companies aren't collecting this personally identifiable data that can be exploited, the problem is solved in all of these cases. Privacy should not be an opt-in model or something that users have to advocate for themselves. It should just be on by default.


Really quickly, before the beginning of this video, I just wanted to say if you ever want to play any Dragon Ball FighterZ games with me or if you just want to hang out, head on over to the Discord channel, it just recently got a revamp thanks to the hard work of a couple of people, and it's starting to look really nice. And if you do end up going over there, make sure you go into the Roald-Me channel first and say what console you play on, that way if you ever want to play with anybody else, those players will be easier to find. And if you want to participate in any tournaments, make sure you go to tournament listings. I also wanted to give a special thanks to all the Patreons that support me, I seriously can't thank you guys enough, and thank you to all the viewers that have been supporting me so far. And now with that out of the way, let's get into the video. What's going on everybody? Dato Doi here with another Dragon Ball FighterZ video, this time discussing Fuzo Masu or Zamasu Patara if you really want to get technical. More specifically, we're going to be discussing how I think Fuzo Masu should be implemented into Dragon Ball FighterZ, as well as some other ideas for how he can play. If I miss anything or you have a different idea on how he should be implemented, please let me know down in the comments below. Now last time we did a video like this, I talked about how I would like to see the DLC characters being implemented, and it was to have one character be unique and outstanding, while the other character is just a very normal, easy to access Dragon Ball FighterZ all around character. That actually ended up coming true somewhat with Broly and Bardock, as Bardock was very accessible and easy to get the hang of, while Broly took a lot more getting used to. In Fuzo Masu's case, I would love to see him be the more unique character out of the two. We already have a couple of signs that he is probably going to end up this way, such as him being the first character that can actually access an 8-way movement system in Dragon Ball FighterZ. No other character can really do that, so that really separates Fuzo Masu from the bunch. And depending on how important the flight system is overall to Zamasu's game plan, is really going to determine how much he stands out. And for me personally, I would love to see it be a core part of his kit, as I would love to see him stand out from the rest of the cast. It makes sense for both his character, and it would just be kind of fun to play around with in the game, which is kind of the most important aspect of a video game. Really quickly, I don't know why they cut it out from the officially released trailer, but for the first trailer shown, you can actually see the flight system a little more prominently, that being in this clip, and you can see it's actually pretty fast, which is a good thing in my opinion. It means that his rushdown game won't exactly be terrible, which is good for a character in this game. Speaking of his rushdown though, that brings me to my next point, which is Zamasu's range. We don't really get to see it much, which I feel goes without saying, because these trailers are very short. But from what we can see, Zamasu has a lot of good range on his moves. As we can see here, just like Goku blocks down heavy, those blades are really coming into play here, and it's creating a lot of space between Zamasu and his opponent. But that's not even all of it, because we also have footage of Zamasu in his flight stands, holding onto an electric type attack which shoots downwards. The range on this move is obviously insane, but what I think is really important is if it can stop Super Dash or not. If it can't, then the move really isn't that good, but if it can, that's going to be an excellent tool for Zamasu to keep control of the game. That'll be another thing Zamasu doesn't have to worry about, and he can focus on playing neutral instead. As far as mixups go, I hope Zamasu doesn't get anything too dirty, as I think his flight mechanic are going to make the mixups hard enough to deal with as it is. I'm also really interested in Zamasu's assist. Hopefully it's an assist that has some decent range to it, but doesn't go quite full screen. Maybe something like his lightning attack could serve as a pretty useful assist. But that was pretty much all just basic gameplay stuff, now we can get into some of my really crazy wants for Merge Zamasu. One of them being I want him to be able to go pretty high up in the air, and have a lot of range blast going downwards, just because I really like the idea of Zamasu hovering over his opponent, and being able to poke at them without them being able to get to his range without Super Dashing. Other than that, there's really not too much I expect to see from Fuse Zamasu, but I did notice that some of his moves were linking weirdly in the trailer, and I think if there was ever a time to mix up the way the system works now, it would be along with this balance patch. So I'm really looking forward to seeing how that plays out.  I want to hear all of it. I'll be down in the comments as always. And while you're down there, if you like this video and channel, make sure to hit the like button and subscribe. I'm also over on Patreon if you're feeling extra generous and want to support the channel. Thanks again for watching. I'm Dato Doya, and I'll see you in the next video.


This slide really depicts the first arriving conditions based on of the first-do company and while you can't see it in the Lower right-hand corner is where engine three that the the vehicle that's parked up on Mansfield I have or station on Mansfield. I'd arrived and these were the conditions that they found and what's important to note here And it's hard to see it a little bit is on the bottom of the screen That is a construction fence that surrounded that entire property and then you'll also notice numerous genie lifts Around that building both of those things pull we'll talk about here in a few minutes that impacted this Impacted our operations, but if you look to the left of the building You're going to see some scaffolding and you're going to see another picture of that so they arrive at this fire and and they see They talk to the construction workers and the construction workers tell them the only access to that area That's burning you cannot access it from inside the building you have to go up that scaffolding That's on the left-hand side next slide, please So this is that left-hand side of the building and that this is would be the other side of the building where that Scaffling is on the left-hand side On in this photo. There are three firefighters one way to your right and then one with a hose line That is the initial crew of engine three. They with the help of construction workers hoisted the that hose line up the Up that scaffolding to get it in place On that side of the building that center archway is where the fire started the construction workers were working in that area so and the firefighter to the left is Actually in the room tonight. He assisted in stretch He was actually a member of the ambulance crew the second to arrive He helped to hoist that hose up to the up to that location His partner took over the pump panel of engine three because engine three is staffed with two people They dead man. It's called dead man the pump. So they went straight to work Left the pump deployed the hose line up to that position in the radio traffic You can hear back and I'm calling the battalion chief saying I need somebody to charge that line and the battalion chief Assigned the rescue company the ambulance crew One to go up there and help in the second one to run the pump panel on engine three Next slide, please So while they're up on the this other what you would say the left-hand side of this building This is about the time that the chief clett and I arrived the fire was was really starting to consume the building materials on this on that facade and what you're seeing here now is active free burning and The decision was quickly made that we needed to put big water on this and this is where we went with what we call master streams Very quickly to try to knock down and slow the growth of that fire If if I made this fire it looks dramatic, but it really is a surface burn here with a Palmer based Sealant that they had put on the roof. So that's what you're seeing here That's why you're seeing all the the black dark dense smoke Although the fire had progressed on the inside Essentially in the attic of the building at the time So not only do we have a lot of drama and a lot of fire on the outside We had fire in hidden void spaces and concealed spaces inside the building and what you know into the deputy's point We have people trying to make their way to the third floor of this building from the inside and in the report That we're getting on the outside doesn't match the conditions The report we're getting about conditions on the inside is way different than the conditions we're reporting on the outside And that's starting to confuse us we're having we're having questioning that and you'll see here at us next slide But the construction of that building really helped us at the end of the day So this this just really depicts what we want to talk about here is how this the labor intensive this fire was so there's While there's three aerial units that you can see there in the photo Mallets Bay Aerial truck is actually on the backside of that building and ultimately we would bring in when new skis to be on the left Hand photo so a total of five aerial apparatus in operation at one time The deputy just told me in his 25 year career here 24 year career He's never been out of fire with that many aerial devices working at one time next slide, please This is the confusing photo, but I want you to understand that this was the third This is what we found on the third floor, and that was a picture literally Immediately after the fire was knocked down So those are the large cabinets that stored the collection and while normally we would have accessed that void area from the Inside we would cut holes in bane well to access that void area those cabinets were not moving and Ultimately right on the backside of those cabinets was where this void area was that really required us to do Open it up from what the outside on aerial ladders. We just could never get past those cabinets So while the construction helped us at one point It also, you know made it impossible for us to do work as we often would do it to access the fire next slide please and This is just a list of assisting agencies that helped us out that day I think the one you know the one thing the fire service does really well in Chittenden County and much of the country is we share Resources and help one another out and so we had a lot of help that day And I think it's also important to To note that UVM rescue put a second truck in service the second ambulance in service to Handle city calls that day for us and I think in addition to staffing metal for medical protection for our members up there And I think they handle three or four other medical transports in the three or four hours before we could step get one of our units Freed back up to be in service next slide please so the outcome the building the You know the the dollar loss in terms of the rehab cost or about 2.8 million is what risk management told me this week We set the estimate from the fire loss about six hundred thousand obviously you know because of the damage They were they opted to do some pretty Substantial remodel of that building. We had to we had two firefighters suffer minor injuries and the cause again was workers Hot work by them soldering copper roofing next slide We did was tough to read. I know it's tough to read this here. You certainly have in your packet This was just some Facebook posts. We had got from people around the country thanking You know certainly thanking us for their for saving what would they would say would be a irreplaceable collection next slide please and So really this is the why we're here tonight to talk about the challenges or lessons learned and in these really come down to just a few things Anytime there's a building under construction or renovation Proposes a tremendous risk to our firefighters and it because it's not designed or it's not the fire protection features Aren't in place that they would be otherwise so any building under construction. We we take as a as a high risk Lack of suppression system this building is probably one of the very very few buildings on campus that does not have a suppression system and While the the fire was contained to void spaces on the outside and never penetrated into where it would have Anytime we have a we feel much better with buildings that have built-in sprinkler systems Access to the building construction fencing all around that building or acquired Thank goodness. We had construction workers help us tearing down Security fencing so that we could get aerial units in place now one thing about aerial units They have a limited reach and if we can't get the truck in close enough They do us very little value So there was there was some pretty creative work to get aerial units in close enough that we could get the reach In fact, we special called an aerial unit that had a mid-mount versus a rear mount so that we could get it into a place That we otherwise we had not been able to Handline deployment and crew size so our initial arriving company to has to personnel on it Deploying a hose line to that in that type of in that fashion up The scaffolding that's a crisscross back and forth. There's numerous pinch points It takes a lot of people to move a hose line up that type of environment. That is not something that is a Daily occurrence and certainly was a tremendous challenge but the line was deployed very quickly and and we're lucky that we have a very well-trained crew Access to fire and void spaces. So again, that was it's called a mansard roof There's really a continual void space around that entire building That's what that space is between the inside of the building and the outside and that's where that fire traveled and Then finally if you remember that morning, it was extremely humid. So it was by midday It was really hot but when when the it was hot and humid. So when you take a normal Add on a firefighter then add on all the gear he or she is wearing. It's another hundred pounds the thermal protection So our staff had a lot of It was difficult for our staff to work after one or two Spins through without have being rehab. So a lot of water but again the heat and humidity played a pretty substantial problem for us and and with that I tried to be quick I'll certainly any questions, but again, this was Very impressive fire from the visuals. It was it was something we trained for and I think our members performed very well Thank you very much chief and deputy chief Colette Can you speak a little bit more about the dispatch? How the because we were talking about moving to a different dispatch system. Sure. So You know again, initially this this fire comes in as a radio max master box alarm so over 400 buildings in our community are protected by a Fire alarm system that automatically reports into our dispatch center, which if we go to regional dispatch It would be every intention at that same would ring in the same way So that the box rings in we call it a box it rings in the dispatcher sent transmits the alarm for that building It was followed up by a 901 call But the but before that occurred our officer had already Wrecked on the smoke our officer sitting on the truck and upgraded the alarm so the dispatcher just knows okay I'm gonna do the neck. I'm gonna call the next resource. They pull out Well, we have a matrix So when a request is made to upgrade the alarm the dispatcher can open up a sheet and say okay This is who I call next Thanks to your support in the mayor support in about six months or less That'll all be computer automated and depending on where we are in the city will automatically By computer tell them that so so and then beyond that the dispatcher did an excellent job calling resources I think as we talked about during regional dispatch But she but she had to make numerous calls to different centers for Different pieces of apparatus not only foot to the scene, but we had to backfill each week backfill three of our stations to handle Additional calls and I think a kind of part that we found somewhat Interesting was s6 came in and provided coverage downtown And I think they had the opportunity to run quite a few calls that day for us And they were they were surprised at the narrow streets and how more urban Response Burlington is an Essex so the system ultimately works very well. That's great. Thank you Other counselors with any questions counselor Dean and then Bush are please use your mic counselor Dean Thank you President Odell chief I'm aware that in my experience that There are very specific requirements for hot work from the University of Vermont Can you tell us whether those were in place on that day and how they affected your response? They were they had they actually had pulled a permit. They were they had fire suppression Equipment up there with them. They followed the rules exactly like they were supposed to this was an old building and An ember got behind the behind the copper They actually thought they had it out and so but they yes, they follow the conditions of the work permit very well Yes, and and then one follow-on question about I know that they were I believe they were insulating the exterior of the building That roof was the the insulation system used a contributor to the the severity of the fire. I Don't believe that it was insulation. I believe it was ice and water shield ice and water shield Thank you counselor counselor butcher You mentioned that there are Fire people here who were Involved and could you just ask them to stand up so I can just Acknowledge are they on fire station three? So I just wanted to say thank you so very much We're so lucky. I'm sorry go ahead and while they're too proud to stand the other two members because they they They weren't actually there.  I wondered In one sense we were lucky that there were Able-bodied people who could help with lifting that hose up I can't appreciate how you were describing how you had to go up that Scaffolding with the hose, but if those construction people hadn't been there Is there a lesson that is there something is there a takeaway for our community? Regarding that I mean with just two individuals with that hose and the height of that building It would it have yielded a different outcome. I Don't think on this particular fire That would have yielded a different outcome. Okay. It does make a difference though every other day. So and I you know I think ultimately Our job is labor intensive and any time we can have an additional person or persons there without a doubt it makes a difference but in terms of The speed to deploy that hose line most likely making a significant outcome Change in the outcome probably not but again every other day on almost every other call.  I love the fire station It's old, but I know it it also limits the size of the fire engine that you can have there also and so I'm what I was trying to figure out was with a Fire engine that size and the structures around it being now of more significant height Is that something we have to consider as a community? I Think anytime you have an old not and then you have old fire stations size Comes into play, you know, so we were just we've just ordered a new aerial truck for the downtown station and a limiting factor is certainly the Size of the doors and anytime so I think ultimately yes old fire stations have their Challenges, although station three is a beautiful fire station Okay. All right. Thank you very much. Thank you counselor more So your mention of the Essex fire department Made me wonder if if this experience Kind of if you had any reflective thoughts on the potential for regional dispatch In in terms of This what what you experienced here? I think you know, I'm a huge proponent of regional dispatch I've got that feeling and You know, I struggle to see any sense Where regional dispatch would not be it's a better thing You know may allow us to be more efficient and be able to use and move resources around the county As you need them I I struggle to ever see a downside to regional dispatching. It's a system I come from I know it it works. I I It's gonna be I think it's gonna be a good thing Okay, I was just wondering if there had been any conversations from anyone that you would have heard Just in thinking about this. Okay. Thank you. Thank you counselor and the other counselor Counselor Jang and then I think I have two questions and the first one is if we move to a regional dispatch System do you think it will still be necessary to keep your? Department budget as well as the number of your employees intact My opinion one has nothing to do with the other So regional dispatch moves our units I would say that your fire department and our fire department is needs or resources that they have and And obviously we want to make sure that we have the ability to deliver their right number of firefighters to your home and so I would see no reduction in and staffing or The budget as as it results to regionalization for the fire department Thank you, and my the other question is You know what the fire that occur in? UVM basically you have a fire station number three Yep, number three right on the door and I wanted to know exactly would have Your firefighters handle The issue alone without the help of sx or Colchester would have be a would they be able to just handle it by themselves Also, I know Why because of the additional responses that occurred after all units were committed on the location And was it maybe faster to receive like all the fire station number one or number four or number two? Faster to get to the where the issues occur than to wait for sx to come all the way So you get understood every one of Burlington's resources were on scene Probably within four or five minutes from the time of call So when we say we're calling in other resources sx backfill what we call back filled our stations and so all 20 of your on-duty firefighters plus another 40 or 30 or 40 off-duty firefighters returned and Some of those off-duty firefighters Arrived before even South Burlington, which is a staff fire station, which is obviously our first in mutual aid units So we're see you're seeing 25 to 30 Members on scene before you ever see another Resource from another community But ultimately these things are labor intensive and and require a lot of people But big fires like that don't occur every day. It's the little it's Ultimately, I think this afternoon between four and five o'clock if they didn't do seven calls in that hour They didn't do one and so it's it's not for us our standpoint It's the it's the everyday grind that's that's that wears on our resources Thank You chief Counselor Moore had one more question and then you're good. Okay, any other counselor mayor. Did you know I think you president Oh, just quickly one. I want to thank you for suggesting this presentation I think it really was a great opportunity for the public and the council to see really not some more detail on this very impressive response from the department I Happen to be just nearby when the fire took place and got to see it in person even More impressive to see some of the detail they showed today's chief. Thank you for doing this And thank you again to the crew for and everyone involved in what you know Could have been a very different day and making sure It was a very positive outcome for the community. So thank you. Thank you mayor Thank you chief deputy chief fire officers for being here tonight and for all your great work Have a good evening at this time. I'd like to open the public forum we can Set the clock for three minutes and we'll start with James Lockridge and He will be followed by Steve Marshall Here to encourage you to support the resolution that will place an advisory question on the March 6th ballot To generate revenue for the Housing Trust Fund It's a simple initiative that will alleviate pressures that are making Burlington too expensive to live in and it'll contribute to making Sure that all the people who call Burlington home will have a better chance of continuing to call it home in the future I Also want to encourage you to learn more about the hurt and the harm That everybody loves a parade mural has caused our citizens of color and others who are marginalized It was created without a transparent inclusive process That would have helped it be a genuine reflection of our diverse community in its history And it should be removed to help reverse its harm And a new mural should be created with a process that unites our community behind it rather than divides us painfully Next week counselor Jing will introduce a resolution that compassionately addresses this and I thank you for being prepared to support it Thank you. Thank you Steve Marshall And then Abby Tchaikovsky the city has a very interesting opportunity to take responsibility for the public health when tonight we consider the proposals from the ordinance committee to Modify in fact liberalize our ordinance on public waste elimination The difficulty with that ordinance as I Read it is that it doesn't place full responsibility for the public health on the city I've asked counsel Tracy to propose an amendment to that ordinance and While we're still in discussion we discovered that The city council has decided to decide this ordinance tonight Which is a really big disappointment to me because I was told that we were going to be able to continue discussing it That's all parenthetical the important thing is that the ordinance proposal The intention is to Hold the city responsible to bring the city into a sense of responsibility to itself and to the community for planning for Places facilities in the words of the ordinance where people can eliminate waste The idea that there are places in the city that you can go and you can't find a facility You are forced to eliminate Illegally in public is Very very problematic to everyone who lives here everyone who travels here who visits here who's away from home from inside the city and so I would ask you to please support the proposed amendment and Give us a chance to go back to the ordinance committee to finish the work of Putting the proper nuances into this Into this change so that it can be Really an effective change The main thing that I want to ask for Is that when a police officer gives a ticket the police officer writes down? Where the infraction occurred and where the nearest bathroom was? that's not included in the present of proposed amendment and Were it to be included? information would be coming back to the city about where the need is greatest and It can only help the planning process and that's all this is about is Stimulating a planning process so I would ask you to support it. Thank you Thank you. Abby Ticocchi Followed by Patrick Johnson My comment is just in regards to the resolution relating to the process for defining and deciding among the Cities carried interest options for Burlington telecom that in any discussion you have in deliberative session regarding this if President Odell and Councillor Paul could provide additional context around line 21 where it says The city has potentially one year from the closing of the sale transaction to enter into The membership interest purchase agreement. Thanks. Thank you Patrick Johnson to be followed by Margaret Bozik Good evening This evening. I'd like to urge the city council and the residents of Burlington to vote against Proposition to impose 1% tax on houses over five hundred thousand dollars while seeming noble This is an unnecessary tax directed at individuals rather than multi-unit profit-driven landlords as property values have increased even starter homes can be priced close to $500,000 Meanwhile an individual can purchase a rental income property for several hundred thousand dollars and pay 12% Even less after deduction in taxes and what is considered investment income one of the main causes for high Property values is a robust rental market this Proposition does nothing to address the robust market by driving it down one of the main An individual has to pay five hundred thousand dollars for house and then has to account for an additional fee and their monthly budgeting Whereas a landlord pays five hundred thousand dollars for a unit and passes it on to his or her tenants therefore increasing rents It would be in my opinion wiser to tax an individual landlord who owns more than five in units non-owner occupied units And or has no residence in Burlington this would incentivize smaller landlords to keep lower Rents and to slow down the domino effect of rolling equity of units into purchasing larger and more Units. Thank you. Thank you Margaret Bozik followed by Jimmy Lee's Hi, my name is Margaret Bozik and I'm the director of asset management for the Champlain Housing Trust I'm speaking tonight as the co-chair of the Chittenden County homeless alliance About the resolution supporting the Burlington homeless community. I had a couple of questions I was going to pose about paragraphs two and six of the resolution But council roof was able to answer those questions for me today and about how those particular Paragraphs fit with the work of the alliance I'm so I just want to say thank you to the public safety committee for its work and To bring the council up to date about some of the work recent work of the homeless alliance Earlier this month. We adopted new coordinated entry policies and procedures and what that means Is that people who are experiencing homelessness are going to have much more streamlined access to resources and the community is going to have much better data About who's experiencing homelessness We already had in place a common HIPAA compliant release and a data-sharing agreement subject of course to consumer consent But we will now have an expanded by-name list of everyone in the community who's experiencing homelessness Agencies across the board have agreed to common assessments for vulnerability and housing barriers With specialized assessments for single adults families victims of domestic violence and youth We Thus the scores that result from those assessments will be used to direct Consumers to the most appropriate resources so permanent supportive housing for people who are most vulnerable Rapid rehousing for people who only need temporary assistance and for that great bulk of people who fall in the middle More streamlined access to section 8 resources in apartments The by-name list will be reviewed on a monthly basis to see how many people are coming onto the list How many people are going off of the list? How many people are being housed who's not being housed and why not? And it's going to provide a much more rich picture than the annual point time counts Which do give us a sense of trends, but are really only a snapshot So thank you again to the committee for its work. Thank you for being here tonight Jimmy Lee's followed by Julie Starts with an M. Sorry Donald Trump says he has the biggest nuclear button and he's already directed flights of the F-35 Which he describes as his most Touted weapon. It's the weapon he he likes the best as part of his nuclear threat against North Korea It was a flight along the border But the F-35 is not just threatening others It's also a weapon of mass destruction Threatening 3,000 Burlington area families according to the Air Force environmental impact statement Especially the children living in those 3,000 homes They're learning memory reading and concentration ability is degraded According to Burlington's own board of health and The World Health Organization While the benefit of Basin F-35s Goes only to certain Burlington commercial real estate development Developers eyeing the 44 acres of now vacant land For which the city has repeatedly requested South Burlington to change the zoning to commercial This would be a scandal if the people of Burlington were denied the right to vote on the resolution That for which so many signatures were gathered to meet the requirements To get on the ballot fortunately, we've recently received credible word From an insider in the Air Force that the F-35 can still be canceled and that alternative equipment is available Article 20 of the Vermont Constitution Gives the basis for town meeting voting that the people have a right to assemble together To consult for their common good to instruct their representatives to instruct you the city council This right ought to be respected especially now with Donald Trump in command This is a radically different kind of decision-maker Who would be commanding our? National guard I urge you to let the people instruct as to whether to sacrifice the cognitive development of Vermont children And whether Burlington should offer itself to collaborate With such a racist Misogynist and unstable commander. Thank you very much. Thank you Julie Mekanya, maybe you'll help me. Thank you, and then Gloria Flynn Good evening. My name is Julie Missuga, and I'm a recent graduate of the University of Vermont I helped collect signatures to put the F-35 issue on the town meeting day ballot, and I am a resident of the Old North End Residents of the greater Burlington area are familiar with the sounds of F-16s But the F-35 at over four times louder would disrupt our lives Already hundreds of people have been bullied out of their affordable housing and those who remain face decreased property values But the value of homes will be the least of residents concerns as noise pollution would threaten people Particularly the children and elderly with healing loss developmental delays heart issues and more I Am always reading about the aging population of Vermont and the fact that young people don't want to stay here a Lack of affordable housing and increased military operations certainly don't encourage people like me to stay While I was out collecting signatures of Burlington voters I had to turn away many people from Essex Hinesburg South Burlington and Winooski who would have to deal with this program like we would The opposition to the F-35s is broader than our petition can show What was most encouraging to me were voters who would listen as I gave facts and figures about the dangers of the F-35s But then asked for time to do their own research more often than not they would come back to sign my petition To deny the citizens whose livelihoods are at stake the opportunity to speak their minds about this issue would be unconscionable This is a justice issue and one that demands careful consideration Burlington should not give its stamp of approval without a vote by the people It is my hope that the city council will grant us the ability to take part in the democratic process Before we destroy the destroy the lives of neighbors elders wildlife and children you glorious Lynn and Then brian pine. Thank you. I want to take the opportunity to comment on the resolution that the council is voting on for 1% sales tax properties to go to Housing and this resolution in particular does not seem one well thought out seems arbitrary There's wording in here that I'm not sure you intend to have it's really going to be only on homes So there's no analysis on the effect of this on homeowners on home prices. It'll make In my opinion housing even less affordable to people in the middle range with two working parents My own home is valued just under $500,000 and I paid $13,000 of property taxes under the new tax laws I won't be able to write all of that off and now when I go to sell my home. You want to put another 1% Tax on that. There's no information on here If this money would go to salaries it goes to actual housing it goes to rent subsidies I Just don't even see how you can vote. Yes, this resolution impacts All single-family homes and nobody else in the city and those are the people they theoretically want to help Thank you very much the housing trust fund Is the ballot and I'm agenda of 6.05. It's a question that is an advisory question. I Have been involved In many ways the thousand trust funds since it went to the voters in 1989 It was a hard-fought win only one by about 250 votes city-wide to create the trust fund It was created as a penny per hundred dollars of value at the time And as many of you know There was an adjustment made during city-wide reappraisal to maintain revenue neutrality that lowered that amount considerably The last fiscal year, I think the mayor introduced a budget which increased it back up to a level that is equivalent to a penny I don't believe it's actually in Charter, I think it's really through the budgetary allocation process Having said that the federal support for affordable housing for cities has decreased significantly since the time that the trust fund was created and in the last In this so-called tax reform that just passed what happens when you lower the corporate tax rate is that Investors in the main vehicle for getting affordable housing created if low-income housing tax credit Their appetite for making investments in tax credits decreases significantly So we're going to actually see a decrease in the value of every dollar of tax credit It used to generate about 90. I'm sorry. You have about 90 cents of equity and that equity is used to create affordable housing We'll be lucky if that dollar now creates 80 cents and maybe south of 80 in the neighborhood of 73 to 75 cents That'll have a significant hit on the state's ability to produce affordable housing our trust fund is Creates permanently affordable housing and to answer a question that was raised earlier The lion's share of that money does go all but about 10 to 15 percent goes right into bricks and mortar creating affordable housing so there really is not a Big supporter of salaries. It's a really important piece of the puzzle to creating affordable housing So anything you can do whether it's the exact wording of this question or or some variation on this question To increase the resources for affordable housing will make a big difference for those folks who are struggling the most Let's remember those folks are the folks learning earning below 50% of median income which the housing trust fund targets That segment of our population and over half the renters in Burlington are rent burdened today So we need to keep this keep the pressure on keep the foot on the pedal in this regard. Thank you. Thank you speaker Leslie Mackenzie Thank you. I'm Leslie Mackenzie. I live here in Burlington. I own a business Burlington I'm in the real estate business and I just want to take a minute to speak to the resolution that you're considering I do understand that it may have actually There may be some discussion about possibly amending it and not bring you forward to reflect the 1% That obviously is what brought out a number of us some of my colleagues in the state business here as well that concern First I might mention I have concern that we would bring although let me preface to say I think we would all agree that there's an affordability challenge both in Burlington in Chittin County and There's none of us in the real estate business who would suggest that we're not concerned about the price of housing about rental prices Or about property taxes, and I think like many are probably even more concerned because of federal tax changes that have just happened and As I've said every time they said that this is a particular Concern for New York, California, etc. They should have been saying for a lot They just weren't because we're so small. We're off the national radar from that standpoint But it is a concern we've not yet seen the ripple of affordability and what that's going to mean for pricing Stabilizing since that hasn't really played out yet So again, I suggest we're concerned about affordability But to bring forth the resolution that I think has not been vetted as well as it should and not allowed some process Doesn't make sense. I would also suggest that to address affordability by making things less affordable Isn't the way to go? I would echo Luria's very articulate comments. I agree with all of those So I won't repeat those. I Do think we need to look at a much more holistic approach I would encourage you to look at opportunities that can improve our economic climate that does allow more housing We have seen more rental units built over the last four or five years and we saw vacancy rates Actually move up nearly a point because of that We're still below the national numbers But it shows that by adding more product at fair market housing prices Starts to move the needle and we need to build more housing around not just affordable housing But also workforce housing in upper middle-class housing as well. There's an opportunity and a demand for that I think if we could raise Increase our grand list. We would have opportunities to address some of these issues So I would really discourage you from looking at a proposal that looks at such a small segment of people We've worked hard to invest in their properties that are paying substantial property taxes to take away potentially 5,000 6,000 of their equity at the time they sell or to charge over purchasing an Additional five or six or seven thousand dollars at the time they purchase is a way to encourage people to move to other cities instead of Burlington So thank you very much for listening. Thank you Matt Hurlbert is next Thanks folks. I'm here to address the same 1% sales tax. My name is Matt Hurlbert. I'm a real estate broker I live in the New North and I work downtown with my own office and I live and breathe Love this town, but this is not a tax that's going to benefit anybody in Burlington It's certainly not in my opinion affordable housing a few speaking points. The IRS just changed Taxation So these people are already getting hit by not being able to write off more than their ten thousand dollars in property taxes annually This year we're looking at a double-digit increase expected for schools These are the people who have to pay their own way. They receive no property tax pre-bate It's estimated that 70% of residents of Vermont receive this assistance and it's not going to be these people This proposal I feel is going to drive anyone with a means to pay taxes out of our city and possibly out of our state We all have a choice where to live where to do business For me, I choose Burlington But this is not making my job in my career to help people sell or purchase property and easier I can't imagine another five six seven thousand dollars in closing costs for either side of the table And that's what this means the proposal is going to discourage these capable taxpayers I think from being here I feel it's unfair to discriminate against this segment We should encourage people to invest in Burlington these folks Have purpose and I think this discourages them. I feel and I think people in my industry would agree that the affordable housing crisis is Largely in debt to zoning policy and permanent policy And I think we need zoning reform in the city of Burlington. I think we need permitting reform I spoke to a lot of people this afternoon before coming here tonight a couple of builders that are local one that lives in the city lives out of the city but builds in Chippin County and They said Matt remind people that the builders cost is nearly 40% for each home just in the permitting process 40% so right now And think about this Thank you. Thank you Signing up. You just want to bring it to me. I could just Jessica bridge Yes Jessica bridge There I'm here supported by a lot of my colleagues and I also believe that If we need to continue to fund The affordable housing programs there should be a process there should be a vetting process Industry professionals should be involved. I think that there's probably a way to Come up with a much more comprehensive plan to achieve the goal maybe surpass what Is is being proposed In its current form and I do think it's really I mean obviously there are Multiple people from my industry that are here with a vested interest in this and it's important for our industry and for Everyone to have housing that is affordable to them And and you know, it's this is not just because it's going to affect Realtors and our pockets, you know, we have a deep vested interest in the community and in housing for everybody And I think you will find More than one Participant willing to sit on a committee to help come up with a more comprehensive plan So, thank you. Thank you Okay, so seeing no other speakers, I think I'm going to now unless someone else wants to speak So I'm going to close the public forum And we will do the consent agenda Councilor, thank you. I'll move to amend and adopt the consent agenda taking the following and the actions as indicated Is there a second? Councillor Boucher. Thank you. Any discussion on the consent agenda? Seem none on favor of adopting our consent agenda as amended, please say aye Any opposed? That carries unanimously I'd like to call just a just a very quick recess to consult with the chair of the ordinance today There's a bloomed back in like three to five minutes I'll make sure I I Don't I Alright And so it's advisory, so that means all, like, like, it's a public process, like, nothing. Everyone gets to vote, has a vote. So it's just, it's definitely, it's jumping with the fact that we're going like, I'm going to pass. It's better than it looks. It's better than it looks. I saw that for the first time. So, I think it's like, they're going to represent a place. I definitely don't want to see me, like, go all the way to the next place. I just want to spend a little bit of experience. Because they need to start coming back out. Obviously they have great things. But we don't really want to step up there. It's very long. Who is it?


Can you all get started with us on it? This is my talk about the Drupal Ajax framework. My name is James Hall. I work for CTI Digital up in sunny Manchester. Let's get started then. Here are some of the topics that I'm going to be running through in my talk. First of all, we think you should use the Drupal Ajax framework. Some of the benefits of it. I'm going to look at a new review of some of the broader concepts behind the framework and how it works. I'm going to start looking at how you can use full API to set up Ajax requests and then alter parts of the form without a full page refresh. We also have a full API where we look at some other ways to trigger an Ajax request. Then you're an important graceful declaration. What happens when JavaScript is switched off and how the framework supports that? Then the concept of Drupal Ajax commands, what they are, what they do and how we can use them. Then some of the new cool stuff in Drupal 8. We'll find out some questions if anyone has got any. I'm basically going to be running through a number of different examples starting off basic and then progressing through the presentation to get a little bit more advanced. For each example, I'm going to have a little animated gif to show you what the output is to the user. Then we'll go through a couple of code examples. There's going to be a Drupal certain example and a Drupal 8 one. We'll spend a bit of time looking at the differences we've got to look out for when you're migrating from 7 to 8. On to why I think you should use Drupal Ajax. I don't think I need to sell Ajax to anyone here. It is pretty cool. Also, if you use the framework, you can have Ajax with no JavaScript. I like JavaScript as much as the next developer, but it's pretty cool because you don't need to write a single line of JavaScript to Ajax enable your applications. Graceful declaration comes as a feature of the framework, which is pretty cool. As long as you do things right, you'll get that for free. It's extensible, so if it's not something in core that you want to do, then the chances are you'll be able to extend it to satisfy your requirements. It's reusable. You can patch it up into your modules, use it on other projects or contribute it back to the community. Finally, if anyone is familiar with Drupal behaviors and you've extended Drupal behaviors to write your JavaScript in your Drupal projects, then this integrates with Drupal, the Ajax framework. Essentially, if your behavior that attaches something to an event on a particular element within the page, if there's an Ajax request that replaces that element, ordinarily you would lose the event handler but because of the integration between Drupal behaviors and the Ajax framework, it will attach again for you straight away and you don't need to do anything. Here's my own view of what's going on. You stand on the left and you've got the client browser on the right-hand side. You use something within the API to generate what the docs refers to as a trigger. This could be a form element or just a link. That will then get sent to the client. Most part it will get sent via the Drupal settings variables. That's received by the Drupal Ajax library, which is the Ajax.js. It will take these instructions, which are basically saying, take this element and make it trigger an Ajax request. When it triggers an Ajax request, it will go to a particular endpoint on the server and it will be asking for some instructions as to what to do. The call wrap will say, right, we've received this request, do something on the page. That will either be, for example, set some CSS on an element or replace some content within a certain wrapper. Most commands go back to the Ajax.js, interprets those commands, and then it carries out the action for you. It might seem pretty abstract, so let's move on to some examples. Here's my first example. Pretty amazing. You can see what's going on. One is selecting from a drop-down. The page is getting updated with the number that is selected. As you can see by the little loading icon, there's no page refresh going on there, so that's all being done over XHR. What's going on behind the scenes there? You probably should have said this before. You do need some familiarity with FormAPI to sort of these examples to make much sense, but at the top, we have the call back, mostly standard FormAPI stuff. You've got your title, type select, and then you've got the option of one, two, and three. The key bit here is the hash Ajax key on that array. In this example, we're specifying three options. The only one that's actually mandatory is the first one, but we'll come to why that is later on. We've got the call back, which is for Drupal 7, it's ordinarily just a string name of your function. We've also got the feedback wrapper. The feedback wrapper relates to the ID of an element on your page. Also, we've got the method, which is append. As you saw from the example, every time someone clicked on the drop-down, you'd see a new thing added to the element, so you've selected a number, whatever. If I didn't add method append, the first time that request went over, it would just replace the wrapper, and there'd be nothing to replace the next time someone selected something. By default, the method is replaced, so it's worth bearing in mind. Below that, we've actually got the markup, which will be used to wrap the content that comes back from the server. It's within that, the feedback wrapper that you've selected, number X. The call back relates to PHP function. Obviously, below that, that's where it's passed the form, and that will contain the values that have just been selected by the user. I'm checking to see if the number element has got any input. If it has, I'm taking the number, and I'm constructing a string, a new selected number, and returning that. The important thing to note here is that in Drupal 7, you can just return a string, and that's absolutely fine. In Drupal 8, things are a little bit different. Probably the main difference really is that you're probably going to have your Ajax callback within a class, so you'll need to provide a fully qualified signature for the callback. On this one, we've got a reference to a static. The most important thing is that the function needs to be static, I believe. I think that's right. We might have to check that one, but anyway. The callback function is pretty much the same thing going on, apart from using the new call form state interface to get values stuff to get values. Next example. This is a sort of dependent dropdown thing going on. The first one is someone selecting a category, animal, mineral, and vegetable. The second dropdown is then altered with options that relate to the first category. Pretty standard stuff. What's going on here is more typical of a sort of example of how people will implement logic to alter the form that's returned to the user. Instead of having logic in the callback, what you'll see is the actual logic is in the form builder callback. We've got a category at the top. That's the thing that's triggering the Ajax request, so it's got the Ajax, the hash Ajax key. Like before, it's got the callback and the wrapper. The wrapper will come soon in a second. The effect on this one is another option that you can pass along, which is completely optional, which is fade. That relates to how a jQuery will replace the effect it will use when it replaces the content on the page. In this example, you can quite tell that it will fade into view. We're grabbing a category from the form state values. The second dropdown, it's getting its options from this utility function here, which I've not included. Basically, it takes a category and it will generate a list of options that relate to that category that you've given it. Most importantly, this element is then wrapped by a div with the idea of selection method, which is the same idea that you've given to the Ajax key for the previous element. In the callback, there's really hardly anything going on. Before the callback gets called, the form has been rebuilt. When you make the Ajax request, the form gets rebuilt. Once you've made the Ajax request and there's some input in the top select, it's already changed the select time for you. In the Ajax callback, you don't need to do anything, because by the time it gets there, the element's already been modified and it contains the updated list of options. This is typical of what you see. You could have implemented the logic in the callback, but it's more difficult to find it in the form builder. You can see that it's pretty much the same, really, with the exception of the callback. Next example, we're going to come on to a little bit about the great school degradation here. We've got a form, a really simple form, one element that takes the first name and a submit bone. The first time we try to submit it, we get a standard form of your validation error. It says this field is required. On submitting the form, you get a nice little message saying thank you. All this is taken place without any page refresh, and the messages are getting repended to the form. What's going on here is that the... I've only got a duplicate example for this. The submit bone has got the Ajax option on it, and it's saying replace the page... The areas on the page to replace with the content return from the callback is the personal details wrapper, and as you can see at the top, the whole form is being wrapped by a div with the personal details wrapper. The callback is just returning the entire form, so that means that we've got a wrapper of the entire form, and then when it goes to the callback, it's just checking the entire form back. Validate is the standard validate stuff, and on the submit, we've got a message set. The important thing to notice here is that we haven't had to do anything special with the messages or the validation messages. The Ajax framework will just send them back for you and prepend it to the wrapper. That means that when you return it, the personal details wrapper will first have the messages inserted, and then it will have to form. The reason this is quite cool for this whole process of the validation callback being called and the submit callback being called for you is that if I just switch Ajax off on this form, it just works. There's nothing you have to do. The people with JS-enabled browsers form just works as I was saying, but it's just delivered by a full HG request. The framework does help us in ways to take place in other ways, but that's one. It's some more interesting stuff. What's going on here? We've got a username, like a sort of mock-logging form. You enter your username, and as we're tabbing out of that field, it's automatically printing out a validation message to say whether or not that username is valid. Probably not a very realistic example, but it's good just to demonstrate some stuff. There's two times there are a lot of usernames going in, and we're putting a red border on the username field and we're just printing a little message below just to say that's an incorrect username. There's a couple of different things going on there. I do seven. I think I've not included a password field there yet, so we've just got the username field, got the callback, the event is blur, so it's probably worth noting that, by default, Dupal will trigger the request on change, so for most things, that's fine. When you change a select list, it will change when you change the value, when you set a radio, or for buttons, the default method will be clicked, so it usually just works with that for you. The text input is not really so great to have it on change because it will send a request every time you key up in the field. It makes more sense as a fly-off to AJAX request when the user taps out or loses focus on the field. Following the field, we've just got an empty div, which is user AJAX feedback. The callback, what we're doing is we're checking, we're getting the input from the username field. We've got a little utility function which I've left out, but I'll go back and check to see if the username is valid. If it is valid, we're setting the border color to red, no green, sorry, a long way around. If it's invalid, we're setting it to red, and we're setting a message to see if your username is not valid. If it is valid, we're setting up a message string of nothing, and the border color is green. Instead of returning a string like we have done in the previous three or seven examples, what we're doing is we're setting up an array of instructions to send back to the browser. We're pretty self-explanatory. The first one we've got is the AJAX command CSS. This is kind of a wrapper for the jQuery AJAX method. The first option that it takes is an ID, and then the second is an array of key-value pairs for CSS properties. In this one we're saying find the element on the page with the edit user ID, and then set the border color to either red or green. Finally, we're adding another command which is html command, and we're just sending a string back to that. What that's going to do is it's going to replace the inner html from that div. The return value from this command is very specific. You need to pass it an array, and it's got this type is AJAX, and then the array of commands that we've just constructed. AJAX will iterate through each of those commands and then carry them out, as you saw before. It will change the border color for you, and it will insert the message into that div. It's a bit of a change. There are a couple of things here to notice. The return value from the call batch, instead of returning an array now, we now return an AJAX response object. To send some commands back, we use the add command method on the object, and the add command method takes AJAX command objects. Other than that, it's the same principle, really. You're still passing along an ID, and you're still passing an array of CSS properties, and then you just return that response. One thing we're looking at here is that the html command in this example is taking a render array rather than a string, so that's a new feature in Jupylate. You can use render arrays instead. The other thing worth pointing out here is this disabled refocusing on the texting part. I'm not sure if it's a bug or not, but in Jupylate, when the AJAX response comes back to the browser, if it's a text field, it will try to refocus the element that triggered the request in the first place. The offshoot of this is that you type into... If you've got it on Blur, you type into that text field, tab out. As soon as it comes back to the response, you get refocused back into your text field. If you try to tab out again, it does exactly the same thing. It's impossible to leave the text field, basically. You can actually pass these to the disabled refocusing to True. Can I ask a question about the... Absolutely. You've got the commands at the bottom, so one is essentially to update the CSS, and the other one is to turn the HTML. Is it possible to apply a class, so your CSS may be to find a red border, so could you say apply a class on this element of error? Is that another kind of... We'll go through a couple of the commands later on, but for that one, I don't think there's a specific command for adding classes to elements, but... Can you extend it to do... You can actually extend it, or there's a catchall useful command called invoke, which is like a wrapper for jQuery, basically. So invoke will take, and we've got a couple examples later on, but invoke will take any jQuery method and an array of the argument that you expect, so you could just pass that class to that and then pass the id, and that'll do the same thing. For the most part, you don't need to actually do any extending. So invoke works a lot of time. So this is probably the most boring screen recording in the whole world. So we've now come to look at other ways. So perhaps an error just looks at how you can use form API to set up triggers, but now looking at how you could use something outside of form API. Most of the examples you see would be a link, so each time you click on this link, there's a dip below getting updated with a number. Pretty groundbreaking stuff. This other example is... What happens when JavaScript isn't enabled? So the user's still seeing something, basically. It's not quite as cool, but it's not breaking completely. So let's just have a look how you set that up. So we'll first look at the middle function. So that's my page callback. That's what's printing the links onto the page. The first thing you'll see now is we're adding a library to the page. This is really important when you're not using form API because when you're using form API, it will take care of a lot of stuff for you, so it'll add the library to the page. If you're circumventing that for whatever reason, you need to make sure it's on the page. Otherwise, Ajax.js just isn't there to do its thing. The link, hopefully you can see it all yet. So we're going to... We've got a link at href. It's caused wellness to the page callback that we've got above. With the all-important, nojs within the link. I'll come to why that's used for the second. The class is useAjax. That is a special class. Ajax.js will... When it's loaded on the page, it will go through your markup and look for any links that has the useAjax class on it. If it finds one, it will... ...overwrite, prevent the default method, which is redirected into another page, and it will do an XHR request to your endpoint that's in the href. Following that, we've just got the wrapper, which is Ajax result.  That's the link. That's the link. The callback is pretty Mickey Mouse stuff. We're just generating a random number. Within the command, we're saying we've got the content, which is the number inside of the diff. Another thing when you're outside of full API, you can't just return that array. You need to return it using Ajax Deliver, which will set the correct response headers and return it as a JSON response rather than trying to return it as HTML. What is Node.js doing then? If you look in the menu, the hook menu implementation, you can see that it takes a parameter of the third position, and it passes that as an argument to the callback. For default, it will be passing Node.js as an argument to our callback. When Ajax.js is ran on the page, it will look for any links that use Ajax, and it will replace Node.js with Ajax. This is a really cool way of knowing when you're responding to a request, trying to figure out whether or not it's come from a JavaScript-enabled browser or not. Based on the information that's passed us, we can then differ our response. You can see in the callback that we've got their logic, and now it is Ajax, then we're returning with Ajax Deliver, and if it's not, we're just returning a standard renderer aid, and it's just rendered as HTML. That's pretty cool. I think that's a pretty nice feature for free. It certainly takes a lot of work out of it, and I think it's best practice to be making sure our app is gracefully degraded. Ajax links. This is the D8 example. Obviously, the root information, how we define roots in Jupylate is completely different. Same principles. Same thing going on with the link. I suppose the biggest difference here is that in Jupylate, you have to use the attached property on your renderer aid to get a library on the page. Other than that, in the callback, it's the same thing going on. Here are some of the other commands, basically. There's a whole heap of commands that come in call. In Jupy7, the easiest way to find them is just to have a search for your code base. What do they start with? Ajax commands. The ones that come in call are all prepended Ajax commands. In Jupylate, the easiest way to do it if you've got PHP Storm is to find the interface, which is the Ajax commands interface, and if PHP Storm can tell you all the classes to implement that interface. There's a whole heap in that Jupylate. It's got some new call ones. The ones that are in both 708, we've got a whole lot of content commands and so it depends, etc. CSS stuff. Adding CSS to an inline element, or you can add it globally into the page. A thing I mentioned earlier, which is invoke, which is pretty powerful, because you can pretty much call anything in Jupy or using that. The one you probably don't ever want to use, really, which is the alert command. In DA, they've adopted some of the commands that used to be provided by Ctools. We've got a way of redirecting browser to the Ajax response. I'll be honest, I actually know what that does. Sounds cool, right? It scrolls off, I'm sure you can imagine what that does. Probably the one that I'm most excited about, which is the Modals and Dialog command. These, some parts of jQuery UI are now in call, and we've got the jQuery Dialog, which is a big improvement, I think, on the Ctools Dialog. It looks a lot nicer, and obviously it's maintained elsewhere. It's cool, so it's going to look quickly how much time I've got. John, am I right for a bit? Cool. This is an example of how you can really quickly use Modals to do cool stuff, call-ish stuff in this example, but hopefully you'll see the potential. Two links on the page. I've got the Modalized Node 1, which I think I've just clicked. That was the node and the comments form at the bottom, and we've also got to create a new page node. Probably the only thing we want to point out here is that obviously it's just the content from the page. On the first example you see the save and preview, and actually the comments, the buttons that come with the comment form. On the node form you've got save, published, unpublished, and preview. That's the action buttons that you get on the node, edit, add form. I'm not sure whether it's a good thing, or not, but it will actually move those buttons into the footer for you. Sometimes I think it might be what you want. It looks nice. I'll just show you how easy it is to get that up and running. These really do play examples. The first one we've got, a random array is spitting out two things which are our two links. The first one I've just shown you a couple of ways of doing it. We've got a link, and it's linking to the node slash one URL. I've got to use the new way of links, take a URL object. The way to get this working in the Modal is that the link should have at least the two attributes, which is the class of useAJAX, and then the case of dialogue type of modal. The third one, which is optional, which is a number of arguments that you can pass to jQuery dialogue objects. In this case, you say, make it 400 pixels high and 700 wide. One thing of this point out in the example is what the difference... It wasn't particularly obvious to me. Originally, what the difference in dialogue and modal was, in jQuery is actually just an option on the dialogue. So you can say make this dialogue and modal in jQuery. You can see there's two separate things. Essentially, the first one has a complete full-page overlay. So that's the modal. Correct. The second one that doesn't have a grayed-out overlay is a dialogue. That first render array is essentially spitting out the marker that you can see below. In the second one, we're just returning a render array of just constructing the marker ourselves. We can see all the attributes that I've just mentioned. Obviously, it's easier to use JSON encoded and those quotes should be HTML encoded as well. The only difference between the first and the second one other than the HRF is that we're setting a different dialogue type of dialogue or modal. Finally, we've got to attach the library. You can see it's pretty quick to start using modals. They might not be that useful. In that first example, when you click on the save button, it will redirect you to the no-view pages it does normally. But it's easy to and it passes the wrapper format as a query which basically when Drupal responds, it will only give you the content region. It takes care of that a lot for you which is really cool. Slightly more advanced example then. So, it actually misses the point where I've got an empty input for the employee name, but since you've got the first text field typing name in there, hit the find employee button and it will give me a list of employees. Click on one of those employees and it will automatically insert the 10 minutes, insert their first name, surname and department into there for you. Not really a real example, but you know, you get the idea. So this is kind of using a couple of the things that we've touched on so far. There's a bit of code where it's at. So the first, we've got the form. We've got the employee name. Just standard text field. Nothing funny going on there. And then on there, we've got a button directly below it and it's all the stuff we've seen before with the exception of the limit validations key. This is important if you're using an Ajax request, sorry, if you're using a button to fire off an Ajax request, then you need to make sure that it's not really caring about some required fields below. So if I didn't put that on there, it's going to come back with loads of messages saying you need to put some values into these fields. So that's just basically telling form API we're not trying to submit the form and just doing something else. And yeah, the first thing I've admitted the other fields. So in the callback, what's going on, so we're setting up an Ajax response and we're using a utility function to get a list of employees that match that name. So that's coming back with an unordered list of employees that you saw with links in there. We're attaching the I'm not unsure what's going on here. I had to manually attach the dialogue library for this to work. I think when you're doing it with links it will do that for you, but in this example I had to explicitly ask for the library to be included. And then instead of the form we're working, it's magic, I've had to so when the button's pressed the response is coming back saying open them up, open a modal and put this content in it and make it 600 pixels wide. So you put the name and the click on button comes back. List of links of matching names in the modal for you. So because that utility function you can see that it's just taking the name it's finding employees from another function it's rating over the results and generating a list of links. These links have got the use.ajax class and we're passing the employee ID as a parameter to this root. OK, I'm returning that. So how you're following still. So that root is defined here and what the hell, yeah. So each of these links is hitting up this root and that root is then going on in this callback. So open the modal it's got a list of links, click on that link it's making yet another Ajax request that Ajax request is falling into here it's using this utility function to get the full details of the employee from that we're then sending back loaded command saying, and this is the invoke command saying use the jQueryVal method to set the value of the first name, last name department to the things that have been returned from our API. And then finally we're passing along and close my modal dialogue command. So that's what's going on there. Any questions about that one? It's a little bit more going on there. When you set the width of the modal you just passed in a number but you said that it was in pixels here. Does that mean you can't pass in any other unit? You know what? I'll have to have a look at the jQuery UI docs I think. Maybe. It's strange that it takes a unit list I would assume that it only takes... It's rubbish, yeah. Yeah, it can be worth looking at. Maybe it just takes pixels by default. Maybe if you pass a unit it will override that, not too sure. Right. My time up. Five minutes, cool. Right, last two seconds then. Thanks for sticking with me. So extending the format it's actually really, really simple. So those use those functions that we saw earlier on the AJAX command. This is taken from call. This is the alert command. It just returns an array just says what the command is which is alert and then anything following that will be the parameters that pass to the command for you. So in Dupal 7 you don't have to use these helper functions to return those arrays obviously. You will do because it's easier but you could just pass the array if you like. Now that matches up to the AJAX AJAX.js will be looking for a method that extends wait for it, Drupal AJAX the prototype.command So if it finds alert an object that extends a class that will method that extends commands with that name then it will pass it will instantiate that function and that's where our logic is. So you can see here it's just simply opening alert. The parameters that we pass so the text parameter will be properties of the response object that gets passed to that. So you can just see it's text and we're not passing title. Drupal 8 a little bit more long-winded obviously. So the class has to extend command interface and by doing that you have to implement render. But render is just returning the same array. So it's still pretty simple. And differences on the JavaScript side so instead of the structure is changed a little so instead of AJAX prototype commands it's now Drupal AJAX commands which I think sounds more proper but I'm not really sure. I think that's me. Any questions? Go for it, yeah. D8 specifically because of all the there's a lot of jQuery dependent looking stuff going on in there. And how easy it is and possibly encouraged these days it is to disable jQuery especially if you want to. Does this just fall apart if you do that or is there a... Absolutely. I mean it's slightly coupled with jQuery unfortunately. And I do think really one of the downsides of using AJAX frameworks is just to force you into weird ways of working because you're not really writing any JavaScript you're forced to do all your logic on the server which sometimes is inefficient to do it on the server better to do it on the front end. Are there any siloed parts of that AJAX framework that could work without jQuery as long as you know which bits do depend on which bits don't so you can still go over from the server? So I mean in theory you could you can use whatever you want in your custom command as up to you but the actual requests will be delivered using unless obviously you can override parts of the framework so I suppose I don't know what it is exactly AJAX.request maybe you can override that and slot in something else I suppose so you could override it maybe globally after I'm looking at it so good question though mate. So in D7 you've got the examples module which includes a lot of full API stuff and it includes some AJAX you've got the same in D8 Anyone know? Yeah Well a lot of this stuff will just be what I've just gone through today is find good examples in that On the question about formalization you showed the example when you changed the focus to another text element in the background that was a AJAX code You showed an error message but I didn't see the example where you changed the state of the form to whether it's valid or not So that was just time to form API stuff so if you can find that So the error message is so the color but I don't see what's happening when you're actually solving the form So people are submitting the form the first time I go through this I didn't provide it There it is One minute So you submit the form without a value in that field and that just comes back with a validation message I'm not having to because that's standard form API stuff because I've got a requirement Oh right sorry mate Right Yes whether it's valid or not but what would happen if you actually do you have to implement the validation twice one in the callback one in the form's actual validation or there's a practice That's a very good point yet So it would be better practice to have had that logic in a validation callback and then on form state there's a method to form get errors I suppose So you could have checked to see if there was some validation flagged against that field So yeah it would have been better for graceful decoration it would have been better to have moved that logic into the validation callback for sure Cool I think that