Really, no words for it, and everything seemed like normal. I'd been out, did my last like you talked about, and Dean did a couple of his, and I saw him over talking, and so I went over, and actually I was talking to some friends, and no wonder the other coaches came in, hey man, Dean is down. We got to go see what's wrong, so obviously I thought it would maybe stomach of whatever, who knows, who knows why he would have been down. There's no reason to be down. The goal is to get to Sunday, and we were there, but once I saw what it was, in my mind, I was thinking that, well, if he's got a problem here, he's probably gonna have to go sit in the press box, and we gotta go through the logistics of Dean being in the press box, and calling the game, and yada yada. But then Coach Smith stood next to me and said, hey, they're gonna have to take him in, and you're gonna have to call it. And I think I went numb a little bit, I think I went numb. But ultimately, you always got kind of a contingency plan for anything that could possibly happen, and I knew in the back of my mind, if something like this ever did happen, there would be a chance for this to happen. So you try to prepare accordingly, I'm not Dean Pease, he does all the heavy lifting, basically he set the table, and I was able to go out and execute the plan. But you always kind of have a plan in place for stuff like this. You said you'd go numb, how long does it take you to, I guess, regain whether it's actual numbness and feeling, or I don't know what he said. Like, oh, I'm not actually going to do this now. Yeah, what happens is, obviously I've called the game before, so that part of it wasn't the hard part, but it was trying to basically emulate what Dean was trying to get done in that particular game, and being able to get the kids to call in a way that they're used to. Like I said, I'm different than Dean, I'm gonna talk differently than Dean. I'm gonna say things differently. And also my mind says it's gonna be a little bit differently than he is, as far as the approach and whatnot. But I gotta reel all that in and bring it in and try to do the things that we had practiced all week, and try to get the information to the kids as calmly as I could, considering the situation, because it was new to them. The first two series obviously did not go well at all, was that? Not at all. How much of that in hindsight maybe was a product of maybe for players and for you that hour before? No, I'm not sure how much of that was. Obviously you gotta get the same credit for coming out and executing the game plan. But ultimately it was different, it wasn't what they were expecting, so they kinda got size swiped a little bit. And so with me making the calls, there were calls that they probably would have had anyway, but it was just not what was normal to them. And when you're not dealing with what's normal, then you have people trying to attack what you're doing and keep people doing your job. It's gonna be a little bit of consternation involved in that. And to their credit, it was two series that we wish we could have back, but they did kind of rally and come back and do the things that we were asking them to do. And coach, was Rahsa, you're a contact guy? Was that that made it a little bit more comfortable? It did, because obviously I'm in the room with him every day. I understand kind of how he thinks and how he operates. And we have the whole communication thing going down. So that part was easy. And not just for him, but for me, talking to him because I talk to him every day. So it was a little bit easier to get the information that I wanted to get out there to make some adjustments and talk about nuances that were happening. I could tell him those things because we have that conversation almost every day. And Troy made his second start this year. How did he bear and what's his goals and objectives here down the stretch? Well, as always, we like what Troy's been doing. He's been trending for a long time. He's played in lots of games for us. He's made plays for us. And so this was an opportunity for him to be the first guy out of the tunnel, I guess you can call it a starter. But we have packages and whatnot. So at any moment, all three of those kids are out there at the same time. But it was a chance for him to kind of go out with the first unit and run the first couple of plays and we're happy. The kids doing a tremendous job.  He's hitting people and knocking them on the ground better than he did early in the season. And I think he's just more comfortable being a pro athlete right now. So, you know, happy with where he is. Is that the mental part of the game you see coming to fruition? Right. Knocking people on the ground is kind of getting there at the right time. Exactly.  And there are things that happen in a pro football game that you know I can't even begin to describe to him, you know. And he's just got to go out and live that and get the experience. And since he's done that, he's starting to understand kind of how people attack him, how they attack the defense, and where he fits, you know, within the big piece or the big puzzle of the thing, where he is. And he's doing a good job of kind of relishing the role and being productive for us. Is that leap from college balls really that much different from the quote coming from a small program as compared to a take power five? You know, I don't think the football itself is a huge leap. I mean, obviously, if you have the skill set to play at this level, that's kind of obvious. And once you show up, you know that as an athlete. I think what happens is it's all the things around it, you know, the big venue, the big stadium, the crowds, you know, the weight of the pressure of each play and all those things. I think those are the things that kind of have some kids that they can't kind of get going because, I mean, it's a high pressure job.  And so that's the part that kind of gets some of the kids. They just, they're not ready for the big stage is what I'll call it. The football they understand, but the big stage and all the things that go with it. You know, I think sometimes that kind of slows it down. What did you see going back to kind of the draft process when you were playing in the Olympics? I mean, you're an important player. What did you see that said, okay, I think you can make this transition into work? You know, just watching them on tape and obviously he played some other positions, but you watch him early in the season and watch his progression. You saw the kid getting better at playing linebacker. You know, he was a quarterback. The first time he watched him, he stood up high. He looked over to center. You know, he's all the things that kids do when he's not, you know, understanding his keys and whatnot, but you saw the kid get better and better. And he was on a good football team and he got better as the season went along. And he was a factor. He was a factor in helping them get all the way to the national championship game. He made plays for him. He wasn't just an athlete, you know, running around out there. He actually did some things good that were helping them win every week. Is he on the trajectory that you thought he would be? Because, you know, you got Arthur specifically to talk so much about plans and very specific plans for every development for every player. Where is he, I guess, compared to what that was? You know, I'd like to think he's a better player since I'm coaching him, you know? But, you know, I think he is a better player. I think he understands the game a lot more.  I think he spends time understanding nuances and whatnot. I think he's starting to understand that you can't just, you can't just look at just the offensive scheme. You got to know who the people are. You got to know who the coordinator is. You got to understand how they operate within a football game.  You know, he had to learn how to watch tape and understand this particular coordinator when he puts the tight ends in these particular spots. They do these things. But not only that, this tight ends this kind of player. So all those things are coming around. You know, he's starting to talk the talk, basically. And that's what makes us so comfortable with him.  I think it helps him when he's playing. He never talks about it. But I think when he plays, he understands some things in the passing game that some of the guys probably wouldn't understand. But he's never bringing it up. He's not real proud of his quarterback days, you know. But I think it does help him. I think when you see him in coverage and he's doing things, I think that really helps him. Do you have to kind of push it out of him a little bit? I feel like that could help others, right? Yeah.  He understands that he's a rookie.   But, you know, he's just one of those kids that, you know, he's really not about a lot of talk. He just goes out and play, you know. And, you know, like I asked him, what are you doing after the game, you know, when he has one of his better games after the 49er game? Get in my truck and go home, you know. That's kind of how you operate. He doesn't think about a whole lot of other things. And that's kind of refreshing. I know Dean was back in his office yesterday and Arthur just told us that the plan is to have him call in place. But he also said that, you know, has to continue to monitor things. How does he seem to you? Yeah, you know, he seems like Dean. He said, back to his normal self. I know I won't describe what that is, but... But nah, you know, obviously, that scared us all. And like I said, I went numb for a while because, you know, I have such an affinity for the guy. He's taught me so much football in just a short amount of time. We've known each other and how to see the game.  And then, obviously, what are the ramifications of something like that? So you're worried about, you know, going forward. How do we operate? And he was able to come back in office and do the things that we normally do. And like Art said, it's a monitoring process. But, you know, I'm totally confident that he'll be ready to operate when he's done to operate. Have you ever seen anything like that? Never. 30-something years in the league. Never. Never. Never. I was shocked. I thought the guy was pulling my leg when he said it. So, unbelievable. Yeah. I mean, I'm not trying to be flippant, but like, do you now have to... Like, now that this has happened once, it's like, you kind of take a different approach. Yeah, you can't not know. So, yeah. So now you think about stuff like that. You think, okay, maybe there are some things I should look at a little bit differently now. Doing a pre-game. Maybe five laps instead of six laps. I don't know. Anything else?


Okay, so I guess I'll get started now. I'm Gregory Brown, I'm from New Haven, and I have to start with an apology because the contrast on the screen really sucks. So I had originally gone through all the trouble of using the syntax highlighting from TextMate, but now you're just gonna see standard black on white and I'm sorry about that. So this talk is on Ruby Mendicant, which is really about prawn and what I've been doing over the last six months. Ruby Mendicant was essentially a grassroots funding project for hacking on free and open source software. And it started with this post that I wrote when I was just in the middle of a contracting job that was particularly boring to me at the time. And I was completely joking. And what I said is that there's a lot of projects that I would like to work on, but because I have to work for a living obviously, I don't have time to do it. And there's some projects that you could do as side projects and other projects that require a decent amount of dedicated time to just even get off the ground. So people eventually took it seriously and the short story is that I got enough funding to take 22 weeks off of work, which is great. And I decided to spend it on prawn, which is a PDF generation library that's designed to become the PDF generation library for Ruby.  Now my talk description kind of covered a lot of different things, but as far as what's coming from me, I only wanna talk about three things. And we'll have some time in the end where I can either show some examples or answer some questions or do kind of whatever we wanna do here. So the three topics I wanna talk about is being a hippie because you pretty much have to be to take six months off of work and live off of just living expenses to do free software. I wanna talk about the bare internals of prawn because okay, most of you will never need to do low level PDF generation. But it's very likely that some point in your career or in your hobbyist background, you're gonna have to approach something big like PDF. I mean PDF was a 1,310 page specification and the pattern that I'll show is possibly useful for if you're attacking different problems with a similar feel to them. But of course, I think some of the people here are here to see the shiny outside of prawn, what you can do with it now and where it's heading and things like that. But before I get into the technical side of things, I wanna give you a tiny back story. Aside from Ruby, I've got three main hobbies. A play go, I home brew beer and I study Buddhism. The only thing about that that's relevant is the part about studying Buddhism. I'm sure that some of the people here are saying, shit, it's going to be a philosophical talk now. But that's not the case, I just wanna give a background of where Ruby Mannequin came in the first place. So Buddhism like many other religions has this concept of generosity. But what I find fascinating about it is that it became this sort of interesting system for supporting people who want to do things that are good for our community. So throughout Asia, there are tons of what they call wandering mendicants who basically have vowed to take a vow of poverty and just study spiritual life. And the community believes that these people are beneficial to them and that they do things that help them. So they give them food and sustenance so that they can do their things. Even in the West, Buddhist teachers who teach meditation retreats and also run talks and things like that, they typically don't run on any sort of, they don't simply charge for any of that stuff. It's all entirely on donation. What's interesting is out of that you end up with something that becomes a true meritocracy where if someone is not producing something that people perceive of as value, they are not supported and therefore can't continue doing what they're doing. But the people who do bring something to people that they appreciate can easily make their way. Of course, Ruby is not a religion and it shouldn't be. People do open source for a lot of reasons and that's awesome. You don't need an ethical reason to be doing open source hacking. You could do it for fun, you could do it for profit for your company, whatever it is, I think that's great and it's what keeps our ecosystem so diverse. But my reason is that I wanna help people. Now, I don't really know that much about religion despite the fact that I study it or pretty much anything else, but I'm pretty good at Ruby. So that's why we have Ruby Mendicant. And what's really nice is that lots of people helped me. This is the list of donors and there was a total of 70 of them. Plus Ruby Central and Mountain West Ruby Conference did some donation matching. These are the people who essentially allowed me to take a half a year out of my life and dedicate it to doing things for the Ruby community. Now, it's worth mentioning that these folks, they had an idea of some of the projects that I wanted to work on, but this was not a bounty system. This was me saying, I've got a few ideas, what I wanna do and I'm open to accepting other ideas, please give me money so that I could take the time off and then decide what to do. So a lot of these people put trust in me without knowing for sure what they were gonna get in return, which I think is fantastic. What's amazing is that Pran has had a tremendous amount of support non-monetarily. On the left column here, you can see all of these people have patches to Pran. I mean, you're talking about a PDF library, which I thought would be untouchable until it got to the super high level, but all these people have been helping out over the last six months and it's been amazing. The logos you've seen in here were also contributed by the community. Now, one person I wanna give a specific thanks to is James Healy. I don't know, is anyone familiar with who he is? Okay, so James Healy was a former developer on Ruby Reports and he's also the person who wrote PDF Reader. Because PDF Reader exists, Pran has specs. It was originally in our spec, we moved to test spec, but we can actually test the output that we're doing, which I think we may be the only PDF library that's doing that. He's also been the one that goes forward and pretty much does all of the exploratory work. I mean, if you like doing things like embedding images or using Unicode in your PDFs, he's the guy who started that stuff and then I sort of followed along and just solidified it a bit. So without these people, Pran would not exist. So I'd like to give them a round of applause. So the question is, if you're gonna take six months off of work, why work on such an awful project like PDF generation? And the answer is complicated, but it mainly boils down to I needed convincing. And the person to convince me was James Gray. Now imagine most of you have heard of them if we see a show of hands. Okay, yeah, so James knows my situation which is that I've been working on Ruport for all of this time and that we're working, fighting against PDF writer to do the things that we needed to do.  And he wrote this about PDF writer and this is ultimately what determined what I wanted to do. This is the last sort of meta stuff in the talk and then we'll move on to code. But I'd like to read this first. This is from James Gray. He says, I think we should let PDF writer die. Why sing a lot of specific library? Just because I'm fairly familiar with some details of it. It's nothing personal and the message behind this post is intended to apply to many projects. For example, the Ruby core team has publicly stated that they want to see the standard CGI.RB library replaced. I'm sure we all feel that way about some software. I'll stick with PDF writer and you can mentally replace it with a project you're familiar with. Now back to the point. I think we should let PDF writer die. I guess that sounds kind of drastic but give me a chance to explain. There's a great quote that Matt's the creator of Ruby showed on a slide in a talk he gave to Google recently. It said, open-source software should move forward or die. That's an important truth. Why are Matt's and I so ready to start handing out the destruction? The reason is not at all complicated. A project can get to the point where it's hindering more than it's helping. I believe PDF writer is there. I've lost respect for Austin and his work to build PDF writer. Back then it was a welcome effort. Today is a different time though and the landscape has changed. For instance, Austin no longer keeps up PDF writer. PDF writers new maintainers more like patch suppliers don't completely understand the system. He was talking about me there which is but there are several known issues that just aren't practical fix to fix for various reasons. PDF writers vast and complex code base. There's serious performance issues. The API is far from ideal and it would be a substantial effort to port it to Ruby one nine. If we put all this together the picture becomes clear. PDF writer has stopped moving forward as Matt's put it. It's on life support. That's worse than being dead because it means we're burning valuable effort to keep things in this obviously less than ideal state. Now if we could just get the corner to call the time of death for PDF writer we can move on. Where would we go next? Who knows? Anywhere is better though because we would again be moving forward. Some options we might explore in the immediate future are using a different format such as RTF, piping some HTML through HTMLs PS, print section all. The fact is we've used all three of those options and production applications at work within the last two years. None of them are perfect. Prince is amazing but so is the price tag. HTML to PS is just shy of being as useful as we'd love it to be in some areas. If you really need PDF substituting is probably just not an option. That said all three of these support our needs better than PDF writer. Perhaps the only viable long-term solution is a shiny and sleek rewrite of PDF writer. We know we have at least a few people interested in the project so if we could free them up from monitoring the life support systems we might just have the beginning of a rebirth effort. That's the way we need to get things moving. The moral is simple. It is not just okay to let PDF writer or whatever project die. It could actually be a blessing. Sure we would mourn the loss of once great resource but eventually we would also choose to move on. That's for the good of us all. And that's why I've been spending six months doing PDF stuff. So that's enough of this sort of intro stuff. I wanna talk about the bare internals now. Okay so this is the most trivial example that I could come up with. It's drawing a line from the top left to the bottom right of a page with respect to the margins. Now right now in PRON that's absolutely trivial to do. It can't get more simple if we read it in English. PRON document generate lines.PDF. Stroke a line from the bounce top left to the bounce top bottom right. Okay does anyone see a way that that could be better? Okay but when we look at what it actually generates PDF is non-trivial. So on the left hand side here you've got things that are pretty much gonna be in every PDF. Just sort of metadata and a container for the pages and things like that. On the right side we've got the sort of stuff that were actually the work that we need to do that was specific to this problem. So when we look at this we could sort of decipher it. Okay so ignoring the first four lines when you see the 0000 RG, 0000 uppercase RG does anyone have any venture we guess well that might be? Yeah color right on. So the first one is the stroke color the second one's the fill color. Okay so Q and uppercase Q are actually things that save and restore the graphic state. So this allows you to move to somewhere in the document do something and then just wipe all of that and then just kind of stay where you were before you did that. So inside of that block we've got something that's 36, 756M and then 5786, 36L and then S. So who wants to guess what that first line's doing? The 36, 756M. Right it's moving to a position. So PDF actually works sort of like turtle graphics you say move here then move somewhere else and then draw something. So the next one is actually creating the path that's going to the bottom of the document and then the S actually strokes the path. So in PDF you're generating basically point to point to point and then you say okay fill this in. On the right hand side does anyone want to guess what the media box represents? Page size right on. So obviously we don't have to manually put that stuff in Pran but you guys have just pretty much seen and understood what a PDF looks like. Now the reason why I'm showing you this is to show sort of what it's like to build up on top of this stuff. So letting Pran handle the positioning and the pages we could actually manually do the line drawing here. So you could see that just using some string substitution formatted string substitution. We've got to move, we've got to draw a path and then a stroke. So this is equivalent to what you saw before. Now the interesting thing here is that you don't need to dig into the internals to do it. If you know some PDF operations that you need to val so say you need to add some functionality it's pretty easy to do it in Pran. You could do it in a subclass meaningfully. Now this is a little bit more hardcore. Right now the thing that it's only doing is the stuff that was on the left hand side originally the stuff that's part of every PDF. Here we're manually creating a PDF page object. And if you look at the parameters that we're passing here they look very similar to what you actually see in that sort of raw output. But of course don't ever ever do this. The real point is that PDF is hard. And these low level APIs help make it easier for contributors to come in and build stuff with us. So going farther down the bunny hole you could see that you've pretty much got support all the way down. This is actually building low level objects from scratch. We give them an ID and then we give them some Ruby code and you could see that they produce your PDF objects. Now the cool thing, and this is the thing that I want people to sort of keep in mind when they're attacking something else is that I didn't create some sort of domain specific thing for this. I didn't say okay so when we do something like do graphics drawing or something like that. We're not writing a bunch of code that's okay now we need to go and read everything about PDF to understand how it works. What we're literally doing here is we're going from Ruby to PDF in the object serialization. So when you look at this you've got just a hash of arrays of strings. And when you look at the PDF object that's exactly what you have. Now really strongly consider this when you're working with a low level format. If you take the lowest thing that you have and then wrap it in something that lets you write Ruby you will write Ruby for the entire rest of the duration of your project which of course is a good thing. Our entire PDF object generator is this and I'm not expecting you to really memorize this or know this or anything but it's as simple as taking classes and then mapping them to their equivalent in another language. So what do I want you to get out of this? I'm not trying to convert everyone here to people who work on PDFs of course not. But I do want people to know that extensibility is not just important at the high level. If you approach some of the other PDF libraries we have out there they assume that you've already read this spec. And we wanted to avoid that and that's probably the reason why we have so many contributors on Prime. Another thing is that these developer APIs simplify the interactions with the low level systems. It makes it so that you can have code that is not at the top level but lower down in the system that people can still meaningfully understand. You can wrap these things pretty easily and see things like add content to page. Meaningful methods, this is general good practices that we do when we're doing things like coding a Rails application or writing a small Ruby application but it doesn't quite come natural when we're working with something so low level. We just end up generally running into a mess. And I mentioned it before that wrapping your domain lets you focus on writing Ruby instead of writing whatever it is underneath. I mean, after the first few weeks of this I sort of was able to forget about what the low level PDF constructs were so long as I could sort of cite recognize what kind of objects they were I didn't need to know their particular syntax or anything like that which really is a big win. So I'm now going to move on to some of the nice fancy stuff. Now how many people were here to see sort of like how to use Pront instead of the underlying stuff? Okay, a couple of you. So a problem that I had when forming this talk is I didn't think anyone used Pront in production yet but I was wrong, these apparently GitHub is using it for their invoices. Of course, since real code is more fun and they neglected to leave the source code on their page we'll reverse engineer it right now and hopefully not get sued. So this is what their invoice looks like. Fairly simple but fairly standard. How many people have needs that look something in this realm? Okay, awesome. So we're going to do it right now. And this is also valuable because it's looking at it out of the way that you might traditionally look at it. We're not looking at some code that already exists we're looking at a document we want to reproduce. Now I bawled this but you could obviously do some direct calculations. So let's do it step by step. This is generating some text in Pront. You don't need to position it it will flow automatically if you want. So we're saying, okay we're going to make an invoice slash receipt text it's going to be size 24, it's going to be bold. We're using the default font which is Helvetica. We get that and we realize it's a little too high up on the page. So we set a larger top margin and not perfect but close enough. Now what we want to do is we want to move down the page and then put that little bit of text that says, okay I count build person's name and then email address. And we do that. And now we get a little bit more fancy we want to generate a table. In Pront tables are dirt simple. They are basically arrays of arrays of strings or cell objects and you can mix and match the two. Now setting headers is just a single array of headers you can do things like set up fancy header alignment and things like that but we'll start simple for now. Row colors are cycled over and by default if you don't specify a header color it will just use the first one for the header color and then walk over it. You're using HTML color codes for this which I assume everyone here is familiar with. And we can align column based things so we can do things like that. But the one thing that you don't see here is you don't see a lot of complex objects for doing these things. How many people have worked with PDFWriter before? Okay, so does this look better than PDFWriter's tables? Okay, so we do that and that's our simple table and we say, okay well they're not actually using the sort of fit it in the smallest areas you can, they're using fixed widths for their columns. So we can go back and we can fix that and I actually fixed the typo in the email here too just did a little things. There's a weird issue right now in Prawn that if you specify column widths you have to set the header alignment which I'll look into. I found out about it last night so it's not fixed yet and I wanted to give you a code that actually runs. But what we also want to do is we want to align that text field to the right so it looks like that and right now we're looking pretty good. So the next step is to do a horizontal rule which is trivial. We move down the page a little bit more and then Prawn has a function that you don't have to do any calculations. You just say stroke horizontal rule and it'll go from the left boundary to the right boundary at the current wide position no matter what your bounds are. So when we do that, we get this. Looking good so far? So the next thing we want to do is we want to put these logos on there. I'm sorry. Now we want to just put the addresses on here. That's just some more text. Nothing special. At this point what you might notice is that we're giving some positions and telling it where to move and things like that but we haven't done a whole lot of absolute positioning of things and that's one of the nice things of working with Prawn is you'll probably tend to do less calculations of coordinates which anyone who's done any sort of graphic processing or anything like that before knows that could be very painful. So we have the text looks like that and now we want to do something a little bit more fancy. We want to put the images on but I decided I didn't want to use them locally. I wanted to just pull them from the web page. So our image support, that may be very low for you guys. Could you guys see the bottom line there? So the image support in Prawn you could pass it just a file name or you could pass it any object that responds to read and we're trying to follow that sort of approach. So if you use open URI and then you open the URL and you pass it in, works. So now we have the second image and we also do some things around with the scaling so that we end up with I'm sorry if you want to see that code for a little bit longer basically I had some scaling things to make things the right size and I had the second image which you can use relative or absolute paths either way. So then you end up with this and looking at it on its own is this convincing enough? We're pretty similar. Okay, so don't go fishing with it please but now I'd like to relax a little bit and really give us an opportunity to use whatever time we have left to either go over some examples that you guys are curious at or looking at talk about questions, things like that. Okay, so now we'll just go into sort of a question and answer open discussion sort of thing and I can answer whatever questions you have if you want to look at some code if there's something easy you want me to demonstrate I can do it so that's the URL, that's my blog and we've got a lot of time to fill so hopefully you'll have questions. Coming from sort of the same kind of altruistic place that you mentioned where did you have like different folks looking at different things maybe some people actually did not have a specific requirement or a bounty out of you but had an interest. I would say most of the people are just fixing things that they need for their job and that's why I think it's awesome that we don't need this deep spirit of altruism at an open source because if some people have it some people don't. What happens? I mean your monetary oh it's impossible for them to have a bounty out on things because I didn't specify what project I'd be working on previous in fact I didn't even have all of my ideas out until about halfway through the donation process so these people are those people altruistic or at least trusting of me to produce something decent other questions? okay so it was hard it took it was difficult it's the first time I well I've done other things like this I mean I've done Google Summer of Code I've done Code Fest Grants James Gray and I worked on a sort of game framework for Ruby that never really came into anything Ruby Central had funded that and those are very different because basically someone saying you're getting X amount of dollars and then you do this and it's part of a sponsored organization totally different to ask people openly just to give you money and the thing is that I really sort of undershot how much money I would need and the things like I didn't count for travel so when I wanted to do travel and things like that I had to do consulting to fill it up short things I would love to do it again I would rethink the way I did it I made a pledge of ours which apparently no one cares about maybe through that that's just a random statistic but around there around three quarters of the way through and you can't track and open the source project like you do billing of a contract it's hard there's a lot of things I'd have to think about before I did it again but I think that it was a success because we've got lots and lots of people using this just out of the box and it's allowing people to migrate from other software so I think that's a win talk with or help other people with doing this sort of thing okay Dave one of the features that I'm using right now a PDF writer is he wants you to capture a PDF into a context and then use it multiple times so it basically creates like in our particular case there's a loophole in customs documentation you need two invoices to accompany it but they don't say it has to be a two separate piece of paper so I should generate one invoice, rotate it, scale it and put two side by side one form let me do that probably not because that loophole, you're talking about how you could serialize basically now I see a creative context before a PDF from a drawing and then draw into it and then just reuse it the way that it worked in PDF writer is you were able to marshal it out to disk and then pull it back in later is that what you're talking about so the concern is that it keeps a bunch of prox all over the place but we can talk about that I think this is something we need to do some sort of feature comparison but if you want to catch me after this we can talk about it a little bit other questions? no there's nothing in Ruby that does it so I don't even have something that I can look at there's, you can do that with pearl so I mean if you're not aversive of running a shell script and then doing some merging between documents you can do it that way but it's not that feature but it turns out to be hard because you need to be able to fully process the PDF to meaningfully do it because if we go like let me try and pull out my slides again alright so I mean maybe I'm coming from a pearl background I feel like the pearl solution might be lighter but yeah that's the situation right now because it's external but the problem with let me back up one more slide the problem with doing that in PDF is that you've got this cross-reference table and what this does I kind of glossed over it before but it tells you exactly where every object is in a PDF and so in order to add things into it like into different pages and things like that we'd have to update the cross-reference table in order to meaningfully do that we would either have to find a sensible way to stub out all of the objects and sort of ignore them and then inject inwards you know just picking up just their lengths or we would have to fully and a PDF reader has come a very long way it's very cool and if people are interested in how to test your PDFs and stuff I could show that stuff but we're not there yet people with interest in it I would support it for sure because it's one of the most common requested features but we stayed far away from it because it's hard and hard in a different way than some of this other stuff other questions? okay so what I can do if people kind of don't know what to ask I can tell what two o'clock okay so I could show a couple other examples that show some of the sort of more advanced stuff in Pran because what we didn't see in this was we didn't see anything that was multi-page documents we didn't see anything that required you to position things in a particular way or anything like that so I can show you some of that stuff okay so let's see okay so here we're using we're playing around with these things called bounding boxes now how many people came into this familiar with Pran somewhat okay not many so Pran fixes a lot of the issues with positioning things on documents by allowing you to box off and then remap the origin in different places of your document so you can do a whole lot of relative positioning without doing absolute positioning in calculations so here's from that example what we did is we said okay we're going to place a bounding box the top left corner of it is going to be 100 over from the left and 600 up from the bottom and it's going to be a width 200 we're going to flow some text inside of it and then we're going to draw some lines and we made an X by going from the top left to the top right of that box and then the bottom left to the bottom right so then we do another bounding box that has the circle and then the X through that and inside of that you can see that you can nest them and when you nest these bounding boxes they're relative to the one that it was nested in so you can see in this code there is absolute absolute positioning going on and just to show that example again we get something like that now does that seem interesting to people? do you have any questions about how the bounding box stuff works? okay so other things we have are built-in UTF-8 support it just works and another thing that I should mention is that all of this stuff is going to work on Ruby19 and Ruby18 because we wrote PRON on Ruby19 so you can move forward with it and you can get those speed enhancements and things like that and because you can eventually become part of Ruby reports Ruby reports since faster CSV is now 1.9 compatible will quickly move up there too so if you're using this sort of stuff you can bring it on when you want to migrate to 1.9 so you don't need to do anything special as long as you pass UTF-8 strings they just I should have opened at the bottom of here they just work wrapping works, all of this stuff works the key here is that you need to it only works for the true type fonts so you need to have a font that supports whatever language that you're working in and things like that but you shouldn't need to do anything special so if you've got needs for multilingualization and things like that it's pretty nice now PRON will convert your code to it expects that your code will be in UTF-8 if you're on Ruby18 if you're on Ruby19 you can pass in anything that's in any encoding that can be converted to Unicode and it'll do it for you it's going to transcode it which is not a fully robust model but it works pretty good for most cases so other things okay so there's this concept of spans and a span is sort of like a simplified bounding box that allows you to flow text in a column these things you basically you give them a width and then a position you can position it relatively centering or whatever you want to do and okay so this is text flowing in the column and then here's some text in the bounding box and when you use spans in a bounding box you have to do something a little bit tricky these are not really meant to be used that way because the difference between a span and a bounding box in PRON is that if you flow to the bottom of a bounding box it will bring you to the next page but it's going to put the text at the top left corner of that bounding box wherever you put it so that often becomes a problem for people because that's not what they want so when you do work with spans within a bounding box you have to offset them from the margin because that's how they always work regardless if they're inside so they don't nest like bounding boxes do but you can see that we're just very easily flowing text in a column centered and doing things like that let's see okay so images don't need to be absolutely positioned this is another sort of cool thing so here we're just saying okay from the current Y position go to the center of the page right left again and if you don't put anything at all it just puts it flush with the left edge of wherever you are at your Y position what happened there something is broken with that okay that was broken this weekend during the hackfest I think I'll fix it but okay so after seeing some of that stuff are any other questions coming up or okay yes I'll show that okay so this is just a bunch of content you can see that you can use UTFH strings inside of all of that other stuff you can set this has a lot more options than the other one so you can set the padding and things like that for builds and so that's a table and across pages it'll just repeat the headers and just start off where you left off on the next page and you can actually flow them within a bounding box too so you can sort of subsection an area of your document and you say okay I want it to be this size now when you make a bounding box what you're doing is you're sort of pretending that you're moving the margins on the document temporarily inside of that block and then doing everything relative to that and it turns out to be really really handy that's one of the main things that I like about Prawn so there's also some sort of interesting things with the way that we do fonts and things Prawn has all of this stuff that is sort of like you've got these blocks and they do something just for that block so you can apply some parameters here so this is all sorts of ways of dealing with fonts you can manually set everything you can say okay I'm just going to set the font size just for this area and then you can override it in there this is just setting new defaults you can specify everything all at once the styles, everything like that and then use all the stuff nested inside and it all just works so that's that now since we only have like two minutes left that's all I have, I'll throw this page with the URL on it up again there there you go so any last questions before we get out of here leaving now so I won't be around the conference anymore unfortunately but please get in touch Prawn is a really really approachable project it's got a lot of great people doing casual contributions, some people getting a little bit more active than that we're always active on IRC and you know the mailing list and things like that and I'm more than happy even if you're not looking to contribute directly I'm more than happy to help look over some projects that you're working on and try and improve things and I've still got a couple hours quite a bit of hours left to finish up on this for the Mendington project so that means sort of like I've got some dedicated time to help work on your problems, that's pretty cool so that's my talk, thank you


Morning everybody. So we're getting ready to go out for a drive to the coast and I was just standing here minding my business and her rustling in the background and the young buck who's been coming to eat. I just scared him away. I'll be back as soon as we leave though I'm sure. Anyway we're gonna go for a drive come on with us. The McMinnamins. Link in the description below. It's one of the cute McMinnamins locations I think. It's adjacent to a golf course and they have a hotel there and everything. I had a smoked salmon Caesar salad. It was pretty good. And you had a Screamin' Normans. Screamin' Normans BLT. BLT. Sandwich. A French roll with Canadian ham, avocado, lettuce and tomato and some sriracha. He liked it so anyway. And it was at the Sandtrap. The Sandtrap McMinnamins Sandtrap. Anyway so we are headed north now towards Astoria. I didn't find it interesting on our way out. They had a bunch of free you know touristy like maps and pamphlets and stuff and these hardcover books. Right?  I'll look at it later but anyway. Alright we're gonna see what else we can get up to and we'll be back. My picture again. Holy cow. Good morning everyone. It is Monday morning July 29th according to the computer. 10 23 a.m. What would I do with the computer or calendars or something? Because I like never know what day and time it is. I don't know. Anyway I am getting ready here to there we go. To do some filming. I've got the tripod and boom up. Gonna be attaching the camera and I'm working on August commitment. I am going to be filming my process for my color inspiration journal which I've been showing on social media lately. Which so they'll be a little tutorial for that and it's discussion about that in August. So watch for that. I also need to film explorations of me, the design team challenge for August and a couple of Hopper challenge other challenge videos. So yeah. I may not get them all done today but I'm gonna get as many as I can done before lunch and then yeah we'll see how it goes. I'll be back. Okay hey guys it's 2 23 still Monday. I got six videos I think filmed. Did I film them well? You know one only wonders. I don't know. If I did a good job editing won't be a problem.  So you know we'll just have to wait and see. Someday maybe I'll have a cameraman. I don't know. Anyway I have two more videos to film for August or well just for coming up videos. I don't know if they'll get scheduled in August or not maybe. But I have two more to film. I need parts for one of them and I need to mail an Etsy order and I need my sunglasses. It is bright out here. Holy cow. Okay so I need some parts for one of them because I don't I was pulling everything to the table and I looked at all the bits and went oh wait I'm missing some stuff. So and I know I need some more polyfill stuffing. I want to make some more of the little teddy bears I've been made. I've made two of them. I'll put the picture here somewhere. I want to make a few more. I'm gonna make one or two every now and then and then when I have I don't know a dozen or so of them I'll find somewhere to donate them to children's charity or Shriner Children's Hospital or something like that you know. If you guys have a good suggestion let me know. Especially something in the Portland area that I could drive them to. Okay so anyway first we're gonna go pick up some stuff. I mean mail the Etsy order. Holy cow. Then we're gonna go to Joanne's and pick up some stuff and then we're gonna come back and maybe film one more video. I don't know we'll see. Alright that's it for the moment. I'll be back. Alright guys PO Box is empty. I swear I could go like a whole month and there's nothing in it. I really only have it for business and happy mail but I don't get mail there anyway. It's really just because I don't want y'all having my home address. Otherwise I wouldn't bother. Alright we're gonna head to Joanne's now and I'll be back. It is Tuesday, June hello.  I still get it wrong. July 30th. It is 1.35 p.m. I have been spending I spent the morning finishing in a video for YouTube for you all. I try to keep regular business hours you know 9 to 5 ish and so that usually means I'm up here by 9 a.m. if not a little earlier to start answering social media doing daily postings if I need to film or edit working on that whatever it is I'm working on. So today was no different. I came up here I think just before 8 o'clock. I'm sorry just before 9 o'clock and I started working on the spam call you know. Anyway I was working on the rest of the video that I had started last night and which was way more involved than I thought it was gonna be but it turned out really cute and so I hope you all like it. It's gonna be a fun video for fall and here's a hint if those of you who are doing arts and craft shows you might want to watch the video because it's a good product to make and have at the show. So yeah I do think I have a few other videos already on my channel of different things here and there that I used to make for shows. If I haven't there's a few other like good sellers that I used to do that I'll try to film something on but I'm gonna look and see if I can make a playlist first. I don't know don't hold me to it anytime soon but I will try to work on it in the next week or two. I think that's it for the moment. I am air dropping some footage to the computer and I'm gonna get ready to start some editing. First I'm gonna break for lunch. I'll be also say I was a filming maniac most of yesterday and obviously half of today I hope what I filmed some of it made some sense and I wasn't just babbling.  I'll see what I can do. The music's free from YouTube so I don't know. We'll see. I'll be back. Lunch is consumed. Got some sparkling water. This is by Spindrift and it's lemon and tea flavored sparkling water. Nobody else in the house likes it but me but you know it's a nice change from just plain old tap water or tap water with a little bit of lemon juice in it. You know I really only drink water so gotta switch it up somehow.  Good morning. It is Tuesday morning. I almost no I take that back. It's Wednesday morning. Holy cow. I don't even know what day of the week it is. Hang on. Say I wasn't so sure after I did all the filming on Monday if anything I filmed made any sense or if I was just babbling incoherently on camera because that's the kind of like filming session I had. They don't usually go like that but this one definitely did so when I was editing yesterday I was pleasantly surprised that I actually sounded like I knew what I was talking about. Well you know that's a thing. He would still be there so I could get a picture because of course I didn't have my phone with me. The rare occasion for that to happen. I was just going to go get the mail and I heard animal noises from the storm drain which is weird. I looked down and there was a raccoon in the storm drain. Okay. Anyway hello everybody it's Thursday August first it's just after 1 30 p.m. I got a bunch of work and stuff done this morning. The charity auctions up and running and I got to go back to the store now for stuff I forgot yesterday so anyway let's go I'll be back. My bushes again it's the young buck that's been visiting I think he's one of the babies we had visiting over the winter. Good morning everybody. Technically it's still morning it's 11 21 a.m. it's not lunchtime yet. It is Friday August second. No I didn't look at any calendars of the phone I happened to note what day it is today because it's my birthday so it's the day you kind of hopefully remember you know guarantees it's a crapshoot most days but you know anyway I have no problem telling people I am 56 years old today so yay for me and anyway I'm on my way out I've got to go mail sent my Etsy orders I've got to make some photocopies I think the place I take the mail to has a photocopy machine so hopefully they I'm remembering correctly and they do have it and it's not busy but you know good morning everybody it is Saturday morning 11 49 so technically it's still morning okay Etsy orders are off let's go back to the house and finish making lunch and get ready to barbecue some burgers make some homemade fries maybe cook up a few vegetables and I think we're having more birthday cake because we're still celebrating my birthday which is kind of weird but okay so let's get to it shall we hey guys fun fact it's Sunday morning I forgot to film a closing clip last night oops so it's my birthday weekend and my family's been here and we were barbecuing we weren't like super busy I just was distracted so yeah that's a thing so anyway bonus though that means that and you're really close to my face although you might not want to see it because I'm in my pajamas so no you don't need to see that but anyway bonus little discussion or chat is that I was watching my friend Peg Robinson she's got a channel second third channel called misdiagnosed and she talks about some issues she and her family are struggling with with chronic illness and pain this morning I'm gonna link her channel in the description below go check it out and show her some love and if you are also struggling you know there are you're not alone there's others of us out there that are also struggling with different issues and there is a Facebook group chronic pain Facebook group which I'll also link in the description below and then pigs channel so go check it out I am disturbed this morning by the two shootings we've had in the last 24 hours one in Texas one in Ohio mass shootings mass casualties dead children there's just no way graceful way to say that I just did a whole post about it this morning in a life of art and self-expression I don't normally post about these things I stay out of the news and political realm it's really not my bag but sometimes you just got to so anyway take it for what it is but yeah I'm greatly disturbed and just there's never a good excuse for harming the innocent ever ever so anyway happy Sunday that's a distressed perturbed laugh that's not a happy laugh just so you know alright so that's been my week it's been strange interesting crazy disturbing yeah all the above anyway let's hope for a better week next week we will be puppy sitting Lily mean and she will be here for four days I think Tuesday Wednesday Thursday Friday Saturday so Tuesday night she comes Tuesday night she leaves Sunday morning I think something like that so anyway for five days so we will probably get up to some antics with Lily and I'm sure we'll be doing some more evening walks and things like that so right now I need to put actual clothes on and take a shower finish laundry you know get my Sunday started so that's it for this week I hope you all have a great day and a great week and you know let's just try to go forward being decent humans and not being assholes and if you see somebody in need lend them a helping hand if you can that's it for right now go out and have a great day everybody do something nice for yourself because you deserve it and I'll see you later bye guys


At Audiology Associates of Prestonsburg, you can live your life the way you want and find the freedom of better hearing. You'll experience patient care that is specific to you with exceptional follow-up care that ensures your hearing and balance needs are being met. Audiology Associates at 1428 Northlake Drive in Prestonsburg. October is National Women's Small Business Month. Pikeville is a city brimming with unique locally owned small businesses, many of them owned and operated by women. Downtown Pikeville has been wonderful to be a female business owner. Because there are so many other empowering women owning businesses in positions with the city that are super helpful. And we all kind of have like just a little bit of a camaraderie about it. So that's been wonderful as far as specifically like in this location. Many women who own small businesses, need included, are mothers. They carry the responsibility of juggling their business as well as their parental duties, both of which are full-time jobs. Women ran small businesses are amazing. Even if you don't have children, women in general carry the majority of mental loads in their homes and their families and things like that. So I think that it's, I mean I think it's so impressive to see such a concentrated amount of women owned businesses, especially in a small eastern Kentucky town. Mead expressed her gratitude for the community of women business owners in Pikeville and the community they've created for each other. Small businesses are the backbone of many communities and supporting them helps keeps more money local. For Mountain Top News, I'm Kelsey Deane.


It is now time for Member Statements. I recognize the Member for Sudbury. Thank you, Speaker. Speaker, the story of government support or lack of support for the autism community in Ontario has not been pretty. As far back as 2005, the autism community had been protesting the Liberal government. And although the Conservative promised 1,000% support for autism families, it has been two years and four months since the provincial election. There's really not much the Premier could brag about, and it gets worse. Last December, they reposted Poland the implementation of a new autism program until April 2021, which is perhaps the cruelest April Fool's joke of all. This month, I had a virtual town hall to discuss autism in Northern Ontario. I was joined by three guest speaker. Sylvie Grenier is a bilingual board certified assistant behaviour analyst. And she spoke about the unique needs of the North and the difficulty accessing services. Shannon Levoie, her youngest child, Tael, was diagnosed with autism three years ago. She spoke about the difficulty accessing Francophone services in Ontario. And Shannon Ketchaboss spoke about her son, Todd. Todd is nine years old. He's nonverbal. And Shannon spoke about the cost to travel to access services for autism families and how it disadvantages them both in terms of time and in finances. Speaker, the autism community in Sudbury and right across Ontario is relentless. They'll never quit fighting for it as right and what is fair. And as the Democrats, we'll always be in their corner fighting right alongside with them. Thank you, Speaker. Thank you. Member statements, a member for Perry Sound, Muskoka. Thank you, Mr. Speaker. I rise today to thank the members of the Muskoka Watershed Advisory Group for their hard work over the past years and for the report they've delivered to the Minister of Environment Conservation and Parks. I've spoken to a number of the members of the group and I know they worked very hard on this report. I want them to know I've read the report and will be talking to my colleagues about how we can implement the recommendations. Of course, after the flooding in 2019, a large part of the report was focused on watershed management and flood mitigation. I ask that the Minister of Natural Resources work with the Minister of Environment to implement some of these recommendations. There are too many recommendations to mention all, but a few I found interesting were about reducing road salt in our lakes studying and mapping shoreline erosion, judging the Muskoka River mouth and researching the causes of algae blooms. And I also was pleased to see recommendations to expand the ash program by Friends of Muskoka Watershed. This program uses ash to address a calcium deficiency in the soil to help trees grow. The committee members are a mix of business people, scientists and environmentally minded residents who brought a lot of different perspectives to the table. Again, I want to thank all the members of the group, Chair Marty Witzel, Vice Chair Dawn Smith, Patricia Arney, John Boccage, Julie Caley, Chris Craig, John Miller, Kevin Trimble and Dr. Norman Yan. Thank you. Member Statements, the member for London Fanshawe. Thank you, Speaker. Today I rise on behalf of frontline workers in long-term care home in London Fanshawe and across Ontario. In the midst of a pandemic, they have been left to manage the impossible situation largely on their own. Time and time again, I hear from staff who have reached out to me exhausted and utterly drained at the sole crushing pace of their workplaces. They tell me they're tired of not having their cries heard for help. They wish they could do more, but there isn't enough time or energy or resources. They've been betrayed by successive governments who chose to incrementally dismantle the long-term care system rather than build it to meet the growing and urgent need of Ontarians. By legislating a minimum of 4.1 hours of direct care per resident per day, my bill, Time to Care, is a practical, effective and immediate solution that would vastly improve the lives of those who work and live in long-term care. Even the government's long-term care commission interim report recommends the implementation of four hours of hands-on care. On Wednesday, Time to Care will be debated and voted in this legislature. The time for reading reports and commissioning studies is over. The time to come up with the strategy is over. The time to stall is over. Residents in long-term care homes are dying. The time for long-term care to pass my bill 13 is here now. Will the government do that? Thank you. Member Statements, the Member for Markham, Thorne Hills. Thank you. Thank you, Mr. Speaker. I truly believe that much of what makes Ontario a wonderful place to live and do business is the diversity and multicultural character of our province. People from all walks of life, background and cultures call Ontario home. That is why it is so important to commemorate and celebrate our diversity. Mr. Speaker, during the month of October, we recognize both Islamic and Hispanic heritage months to provide Ontarians of all backgrounds the opportunity to learn about their rich and vibrant communities. For a generation, the Islamic and Latin American communities have made significant contribution to our social, economic, political and cultural fabric. In my riding, Markham, Thorne Hill, the Islamic Society of Markham and Dennis and Mosque have gone above and beyond to help the community during the COVID-19, including food and PPP donation and saving as a hub for community charitable work. This could also be said of the many Hispanic organizations across the GTA, such as FUAR, ASHA, Latin Community Services, the Leader in Youth Empowerment. Mr. Speaker, I hope everyone takes this opportunity to celebrate Islamic and Hispanic heritage and recognize the important contribution they've made in making Ontario the greater province that it is. Thank you, Mr. Speaker. Thank you very much. Member Statements, the Member for Tomiskaming Cochran. Thank you. Today I'd like to update the House on the circumstances facing Finsir Wah from Timmins, Elijah Hennessey from Malcoma-Mantoulin, and Jeremy Attu in our riding. Those are three young children who have different circumstances but they share one thing in common. They need formula to stay alive. It's the only thing that keeps them alive. And in Ontario, that formula isn't covered by IOIP. So we've spoken to the Minister many times. A member of Alcoma-Mantoulin has brought this forward. A member of Timmins James Bay. A member from Nickelbelt. We continually bring this forward. And I do it with special urgency today. We talked to Jeremy's mom this morning. So when their money runs out, Jeremy has to go back to the hospital because in the hospital it is covered. He's a medically fragile case, chilled, child. And if a decision is not made positively, he's going back to the hospital where the formula is covered plus all the hospital costs. He's got special emergency funding from OASP for one week. Can you imagine, wondering, week to week, if your medically fragile child is going to be able to be home the week after? I urge the minister, urge the minister to step in and actually fix this problem and allow these people to stay home where they should be with their families. David Micks, member for Orlean. Thank you very much, Mr. Speaker. I want to commend the Orlean's Bengals Football Club who cared for our kids inside and outside the white lines for many years. Recently in Russell, Ontario, just outside of Orlean's, a young black youth was bullied and attacked because of the colour of his skin. When organization president Kossum Kahn and Chilly Johnson, Vic and Charmaine Tadondo heard about the story, they leapt to action, meeting with family, providing free team fees and camps in order to show that this young man, that he'll never be alone. Under the leadership of Tammy Kopp, the organization's principles to make football inclusive for all people are constantly on display. Tammy's leadership has created activities to drive inclusion on and off the football field for members of all gender identities and orientations. And the Bengals also believe that no child should be left behind. And that's why George Zagumas created the Eldage Bell Fibersery so kids of any income can participate. In 2009, the efforts of the Orlean's Bengals to stamp out bullying was recognized when the club won the prestigious Royal Auto Inspiration Award for its Be a Bengal, not a bully program. Mr. Speaker, these are but a few of the examples over the last decade where the Orlean's Bengals have gone above and beyond the standard of simply fielding teams and decided to join the fight against bullying, racism and prejudices. The Bengals have stepped up and I want to thank everyone who dons the black and orange for volunteering to make our community a better place. Thank you. Member Statements, the member for Don Valley North. Thank you, Mr. Speaker. Since the beginning of the pandemic, there is a very disturbing trend that calls for our attention and action. According to a recent online survey of 500 Chinese Canadians conducted by the Angus Reed Institute, 43% of Chinese Canadians and 44% out of them were born in Canada have been the targets of threats in sorts and intimidation during the pandemic. Unfairly blamed and shamed for COVID-19, about 30% of the Chinese Canadian experts thus they often feel like others view them as the threat to their health and safety. They also report being victim of racist graffiti and offensive message on social media platforms. As well, the survey revealed that 60% of Chinese Canadian free access unchanged their daily habits to avoid and prison situations and the worry that their children will be victims of bullying at school. Mr. Speaker, I call for action against all racism, building a true inclusive Canada.  Thank you, Mr. Speaker. The member for Brampton North. Thank you, Mr. Speaker. It's an honor to rise and speak about this member statement regarding my community. This pandemic has been really tough on all of us but in recent months it's been particularly tough for small business owners, especially in the hardest hit sectors like restaurant owners. The way I've been proud to show my support for the restaurant industry is by participating in the taste of Brampton. What is the taste of Brampton? The taste of Brampton is an annual culinary event hosted by the downtown Brampton BIA and local businesses. The taste showcases unique eats in Brampton through price fix menus and special offerings exclusively available from October 15th until the 29th. The taste of Brampton will be focusing on takeout and outdoor dining on patios due to Peel Region having a 28-day indoor dining restriction. 20 plus participants will be involved in this taste of Brampton. The businesses of Brampton welcome you to try their latest and greatest dishes during the taste. Now some of the participating restaurants are meat churros in downtown Brampton. They have the following promotions. Three churros for coffee for $4 and 10 baby churros with coffee for $4.50. So I know we're all getting hungry just listening to it. Now together, Mr. Speaker, we can all make a huge difference as part of our NDP Safe Main Street plan. There must be a goal of keeping restaurant jobs afloat by limiting food delivery fees. Our restaurants need support, real support, not photo ops of MPPs taking order out. Thank you. Thank you. Member Statements, the member for Hastings, Lennox and Addington. Thank you, Mr. Speaker. I rise today to say a few words about what our government is doing despite the pandemic. Yes, government does continue in 2020, looking clearly forward to the future of the province and the needs of its people. Today I want to speak specifically about hospitals, schools and long-term care. In each of these important areas, our investments continue despite the pandemic. Our commitment to thousands of new long-term care bed began with construction and reconstruction effort back in 2018 and has continued province-wide after neglect that sadly had lasted for more than a decade. New hospital announcements continue, such as the one last Friday in Picton, a wonderful town that I was privileged to represent as a federal member for almost 12 years. This new hospital is certainly needed and our government is proceeding with it thanks to all the people who worked so hard to get that. And in my riding at Hastings, Lennox and Addington, we recently cut the ribbon on a replacement bridge over the Skoda Matter River, north of Tweed. And last week announced a brand-new primary school with childcare for Amherstview, a growing community in the eastern part of our province. So, Mr. Speaker, this is real infrastructure. This is not just talking about something and not doing. This is actually doing things. This is not pie-in-the-sky infrastructure. Our money-wasting turbines that ruined our Vista that harmed our residents. They cost everybody more money on their electricity bills. The Green Energy Act was a disaster. Our infrastructure program is delivering results. It's about getting Ontario out of the ditch and back on track. Thank you very much. Member statements? Member for Kitchener, Conestoga? Thank you very much, Mr. Speaker. Last week from October 19th to 23rd was National School Bus Safety Week. Every day, 800,000 students across the province rely on school buses to get them to and from the classroom. In Waterloo Region, almost 30,000 students take a school vehicle including my son who uses the bus to get to his middle school every day. Nothing is more important than our children and I, along with my government colleagues, the Minister of Transportation and the Minister of Education are committed to enhancing school bus safety. Within our first year as government, we made regulatory changes that allowed stop-arm camera technology to be used as evidence to hold drivers accountable. But did you know, Speaker, that Ontario is the only province in Canada that doesn't use a dual-lamp amber and red light warning system? This system would make our buses even safer, Mr. Speaker. At a traffic light, drivers already know to stop when it's red and to be cautious when it's amber. And this would be the same approach they would use with a school bus. School bus drivers would flash the amber lights to give drivers clear, advanced notice that they will soon be stopping. And the red lights would come on when this bus is stopped and children are getting on and off. A Transport Canada study found that the amber and red system reduced the speed of oncoming vehicles and prevented more drivers from passing a stopped school bus. I wholeheartedly support this and I am looking forward to introducing a private members bill to make this change, Mr. Speaker. Anything we can do to keep our children safer is worth doing and I hope my colleagues will support it. Thank you very much. That concludes our Member's statements. I've been advised that the Minister of Health may have a point of order. Speaker, point of order. I would like to call to the attention of all members that this week is Respiratory Therapy Week. And I ask this House to join me in recognizing all the hard work that Respiratory Therapists are doing across the province to help our patients, especially now during COVID. So thank you very much, all Respiratory Therapists for your tireless work.