Welcome to another edition of Haiti. Haiti is a series of videos I do where I respond to viewer questions and comments. These viewer questions and comments, they typically come from comments on the videos posted on YouTube and Odyssey. Sometimes these questions and comments come through social media such as Mastodon, Reddit, and sometimes through email. And the very first question is, Haiti, would you mind explaining how to clear the clipboard on Manjaro? The content still pays even after a reboot. Okay, so we should talk a little bit about how the clipboard on Linux works. There's several different clipboards, but the main one, most people are going to be using Xorg as their display server. And Xorg has a utility called Excel that you could use to clear the clipboard. So what you could do, typically just open up a terminal and type the command Excel space dash BC. And that should clear the X11 clipboard. And he mentioned rebooting the computer didn't clear the clipboard's history. Depending on what kind of clipboard you're using, if you're using like a GUI clipboard application, which probably most people on Linux are, most desktop environments have clipboard applets, clipboard managers that ship with them. I know one of the more popular ones out there is a program called Parcelite. I believe it's the default clipboard manager on Linux Mint and probably a lot of other Linux distributions, but all of these GUI clipboard programs, what they do is they save a history. So they have a file somewhere on the computer where they save history. So anytime you add something to the clipboard, it saves a backlog. That way you can always search back through the history of your clipboard if you need it. That's one of the really neat features of using those kinds of clipboard managers. Now to clear the history on those applications, typically you can do it within the application. They'll have a way for you just to delete the entire history. Or if you know where that file is located, I believe the Parcelite file, if you happen to be using that program, is in .local slash share slash Parcelite slash history. Is the name of the file? Just get rid of the file. Moving on to the next question, I get asked this all the time since I made a video about this particular application about three years ago. Hey, DT, are you still using do as? So do as is an alternative to sudo. So anytime you need elevated privileges on a GNU slash Linux system, typically you have to invoke sudo to give you those privileges. Now the BSD guys have a different program that they use called do as. It's do as and sudo, they basically do the same thing. They give you elevated privileges so that you can do things that your standard home user typically is not allowed to do. Like install, remove software, edit important config files, things like that. Now on Linux, again, we typically use sudo and because most of the stuff I do is on Linux and a lot of new to Linux users watch my content, I don't want to confuse them. So I typically on my videos, I'm always going to use like the standard de facto core utilities and standard command line application. So I typically don't use do as on video. And that's because again, I don't want to confuse new to Linux users, they're going to be doing these things imitating some of the commands I do with do as no Linux distribution is going to have do as installed all pretty much your Linux distributions install sudo out of the box. So that would be confusing. That's why on my videos, you always see me use sudo. I have both do as and sudo installed on my systems. But again, because I'm in this unique position of doing these videos, I don't want to confuse people. And that's why I always use sudo on my videos. And the next question is, hey, DT, what Arco Linux do you pick when you install Arco Linux? Okay, so you guys know that I run Arco Linux on a lot of my machines. I use it on my main workstation here at the office, the machine that I actually produce all of my content on runs Arco Linux. It's been running Arco Linux for like two years now. I'm not exactly sure maybe a little over two years. Now this machine has had the same installation of Arco Linux running on it. And then my home computer also has Arco Linux installed on it. But he asked the question, which Arco Linux do you pick when you install Arco Linux? I don't install Arco Linux like on physical equipment that often. Again, I installed Arco Linux on this machine probably two years ago. I installed Arco Linux on my home computer. I don't know when I got that computer seven, eight months ago. It's not like I'm constantly installing Arco Linux, right? I'm one of these people typically I install something. And if it's working, I'm not in a rush to wipe it out. So I install Arco. I've probably installed Arco Linux hundreds of times in virtual machines to play around with for videos and to test things out with DTOS. But as far as hey, if I had to reinstall Arco Linux right now, which one would I go grab? It wouldn't matter because at the end of the day, it doesn't matter which version of Arco I install. When I'm done with it, putting all my programs and config files and everything on Arco Linux, it's not going to be Arco Linux anymore. It's essentially going to be DT's operating system. I used to make that joke all the time. It didn't matter what operating system I ran as far as a Linux distribution because I have all of my packages and all of my config files on GitLab and I'm going to pull them down and I'm going to wipe out the default configs, whatever distribution shipped with. And it's essentially going to be my operating system. And people kept picking at me. It's like, well, if it's going to be your operating system, why don't you just create your own operating system? And that was kind of the point of the DTOS post installation script that I finally made, even though I kind of resisted it for a long time. You guys wanted it. But again, I'm a little bit of a unique case because I've been using Linux for a long time.  They're all the same. Once you put all of your stuff back on that Linux distribution, it really didn't matter what you started with. And then another comment that I've been getting here recently, and it's kind of annoying. That's why I'm going to go ahead and bring it up right now. Hey, DT, pin this comment. Yeah, that's never going to happen. And the next comment comes from Faustodon, which is the Mastodon instance I'm currently on. He says, Hey, DT, it seems some of your videos become a class-central course. Do you know about this new feature? Smiley face. So we included a link in this message. I clicked on it. Classcentral.com I think was the website. Anyway, it's this class course website where you go through these videos. It's like a course kind of website. I don't know if you get a certificate after you watch the videos and you go through the entire course, but there is a class-central course that is one of my YouTube playlists, my terminal user interface playlist. I don't know how many videos is currently in my TUE playlist has been adding to it over the years. You know, I've been doing this for nearly five years now, but it's just this one playlist of mine. This playlist is not necessarily geared towards strictly education. There's some educational material to it, but there's also a lot of fun stuff I do with these terminal applications, theming the terminal random color schemes, things like that. But this guy, I guess he just put this entire YouTube playlist of mine on classcentral.com. And it's a course. So I guess if you watch that entire playlist, again, I don't know if you get anything, a certificate, a gold star, whatever it is. But all of my videos, of course, are licensed under a Creative Commons license. Anybody's free to do anything. And he's actually just linking to the YouTube videos anyway. So no harm, no foul, this guy putting my videos on this site. So I think it's kind of cool that somebody thought this was worth this class-central course. Next up, hey, DT, I'm studying engineering, and I was thinking that I should spend my summer break building software and releasing it under the GPL. But I don't really know how to use it. Like, is it really as simple as attaching a copy of the GPL on my GitHub repo? Or is there something I'm missing? So yes, it is actually that easy. So anytime you start a project on something like GitHub or GitLab, they already have all of the common free licenses already built in to their website. So if I open a new repository on my GitLab, and you know, it's going to initialize it with a readme and a license, and it's going to ask me to choose a license, and you really should choose a license. You don't want to leave it not licensed because anything that doesn't include a license technically is proprietary software and nobody is free to do anything with it. So a lot of people have this misconception that not adding a license makes it free. No, actually, anything that doesn't have a license, we always just assume it's proprietary. And that kind of makes sense, right? Because you know, unless the person actually tells me I can do something with that software, right, it's technically their software, right, it's protected. So make sure if you actually want to license your stuff under a free license, always add that free license to that GitHub or GitLab repo. So in this case, the GPL will be an option on GitHub, and it will just magically create this file, this license file on that repo, which is a copy of the GPL. Anybody that orcs your repo or clones your repo, they'll get a copy of the GPL license with your source code. And that's really it. There's nothing special you need to do. The GPL, you know, anytime you license something under the GPL, there are some things you need to do. The big thing, your source code has to be public. You've already done that. It's on GitHub, right? Your source code's on GitHub. And you always have to include a copy of the license with the source code. And again, GitHub or GitLab, they'll take care of that for you when you create that license file. The next comment comes from a response from a video I did about how social media is dangerous and how it's kind of destroying our society. This person writes in, HeyDT is a high school math teacher. I am flabbergasted by how outrageous students sometimes act in my classroom. I've seen students get up and start dancing and twerking for a TikTok video. The hateful discussions that they have with each other, it cultivates hate and spite of different groups. Thank you for spreading the word. Well, I appreciate the thank you. And it's somebody that has done some teaching in my past life, right? I've been in schools and I've been in some good schools and I've been in some bad schools. And what he's talking about here was students getting up and just start dancing and partying in the middle of a classroom. I've actually seen that. I've actually seen entire schools do this, not just a couple of kids in a classroom, but basically the entire school, you know, kids just running around, hanging off ceilings and walls. Nobody can do a dang thing. It's one of the reasons why I was really put off shortly after college where I knew I was never going to teach. I was never going to teach public school because I'm old school. I know I would choke the life out of one of those kids if they acted that way in my classroom. I know I would do that because these days, teachers, they're so, they have their hands tied behind their back. They're not really allowed to discipline students in any way. And really these kids these days are out of control.  And when that kid got home, then one of the parents would beat the crap out of that kid and strangle them out. That doesn't happen these days either because in many cases, we've gotten into this weird situation where these crazy, outrageous kids, immature, you know, they've kind of grown up to be also outrageous immature adults. And now they're having these crazy kids and you can't call the parents to discipline their kids because the parents in many cases are just as crazy and out of control as their kids. And it's one of the sad states, especially with our education system here in the US. We spend so much more money on education here in the US than pretty much any country in the world. And we have a terrible education system. It's really sad. Now, getting back to the topic of that video is social media to blame for the way some of these kids are acting. I think social media is a big part of especially the way the parents act and probably some of the kids, I would hope younger kids would not be allowed to be on social media. If these parents were responsible, they wouldn't allow their kids to interact on social media at all. I know I would not. The next question, hey, DT, I wanted to ask your opinion on open Sousa tumbleweed. I've been using it for a few months now and I found it to be utterly fantastic. Recently, you made a video asking why KOS wasn't more popular. But in that regard, I think open Sousa is the most unfairly underestimated distro. They ought to be as big as Fedora or Ubuntu. Have you tried it recently? Do you have an opinion? Thanks for the videos. And that's interesting because you don't see that many people using open Sousa these days. You don't hear anybody talking about it until you brought up open Sousa to me in this question. I had almost forgotten open Sousa existed. And, you know, there's a lot of once very popular Linux distributions that now are not that popular and vice versa. Distributions that have been around forever. Nobody really ever took seriously. And now they're starting to gain some traction. That's just the way this thing works. And the problem with open Sousa and there's another RPM distro I want to bring up, PC Linux OS, those two distributions, open Sousa and PC Linux OS were very popular Linux desktop distributions at one time before Ubuntu kind of came on the scene. Before Ubuntu came on the scene, a lot of the RPM distributions were kind of the main desktop distributions everybody ran, such as open Sousa, Mandreva was really big back then. And then kind of Ubuntu exploded on the scene and then kind of the Debian distributions were where everybody was going to on the desktop. Now, does that mean open Sousa and PC Linux OS and some of these other distributions that have lost some popularity in recent years? Does that mean they're no longer good distributions? No, just means not as many people are using them. Does popularity really mean anything? No, right? If you like the distribution, you're running keep running it. I tell you guys this all the time, it really doesn't matter. It's great that Ubuntu has so many users. I don't use Ubuntu, not on any of my desktop machines right now. Does that mean that the Linux distribution I'm using is somehow inferior? Well, I'm using Arco Linux. How many users do you think Arco Linux has in comparison to Ubuntu? Probably less than one tenth of a percent, right? I'm just putting it out there, right? Ubuntu has many, many, many, many more times users than Arco Linux. I don't care. I like Arco Linux and it works for me. What does it matter? Now, one interesting thing about your question you mentioned Open Sousa Tumbleweed not being as popular. I actually disagree with that a little bit. I actually see Open Sousa Tumbleweed actually come up a lot more in discussions these days. I think the thing with Open Sousa is Open Sousa Leap, which is the stable branch of Open Sousa. I think that is really waned in popularity because I think a lot more people are catching on with the fact that rolling releases are kind of where it's at and that rolling releases aren't as unstable as some people make them out. So, in a lot of ways, I think Open Sousa transitioning more focusing on Tumbleweed has kind of been a good thing for them. And I wouldn't be surprised if Open Sousa Tumbleweed doesn't start seeing a lot more users in the near future. And the final question, hey, DT, I know as an arch user that you probably don't need these, but I'm wondering what software do you have installed as a Flatpak Snap or App Image? So, I'm not exactly sure what all I have installed as a Flatpak Snap and App Image. I just pulled up a terminal. I ran Flatpak list and it looks like right now I have OBS Studio installed as a Flatpak. I have Bottles installed as a Flatpak. Bottles as a front end to Wine. It's a way to get some of your Windows applications, hopefully to run in Linux. And I also have Cayden Live installed as a Flatpak. And now I just ran the Snap List command to see all the snaps I have installed on the system. I really don't have that many snaps installed. Really, if you don't count some of the base Snap stuff, like the core package and some theming stuff, I have the Snap Store installed, which is the GNOME Software Center itself. It's really a front end to Snapcraft. So it's just a store filled with all the Snap packages from Snapcraft. And then I also have ZeroAD installed as a Snap. ZeroAD, you guys know, is like my favorite game, real time strategy game. I've done a many videos of me playing ZeroAD on camera. And installing it as a Snap is actually pretty quick and easy because the Snap servers are pretty fast and the ZeroAD download is pretty big and typically installs faster using Snap than it does using something like Apt or Pac-Man, I found. And as far as gameplay with ZeroAD, whether you install it through a native package manager or Snap, doesn't matter. It's the same speed. I don't see any difference. Now I just ran an LS in my applications directory. Applications is typically the folder where all of your app images go. And I, you guys know I'm a fan of app images. As far as snaps, Flatpaks app images, I typically default to app images most of the time. But I don't mind installing snaps and Flatpaks, especially if a piece of software they default to one of those, you know, like if the maintainer of the particular project says, hey, go grab the Flatpak, I'll go grab the Flatpak. Or if they say go grab the Snap, I'll take their recommendation, I'll go grab the Snap. But if they offer multiple package formats and app images, one of them I typically will go get the app image. Right now, my app images, I have Belina Etcher. I have the Brave web browser as an app image. I have Discord. I have Edex UI, which is a fancy terminal. I have the Flameshot app image. I have Jitsie as an app image and Jitsie app image is actually the version of Jitsie I use for every monthly chat with patrons that I do. I have two different Kaden live app images. I have a LibreWolf app image. I have MovieModenad, which is a movie player written in Haskell. I have that as an app image. I have Stacer as an app image. Stacer is a system cleaner. I have VLC as an app image. And I also have Conch, the Conch shell, X-O-N-S-H, because app image, you can actually app image shells. You can app image bash or fish, or in this case, conch, which is kind of neat. One of the really cool things with app images. So there's a little bit of what I have installed on my system as far as these universal package formats. Again, I'm not a package format snob. If I need a program, I really don't care what package format it's packaged at. If you need it, you need it. So these people that for whatever reason refuse to install snaps or refuse to install flatbacks or whatever it happens to be, if you really need a piece of software, then refusing to install it with one of these formats, if that's the only way to get it, that's kind of crazy. I don't understand those kinds of people. Now before I go, I need to thank a few special people. I need to thank the producers of this episode. Dustin Gabe, James Mant, Maxim, Michael, Mitchell, Paul, West, when you ballin' on me, Alan, Armoredragon, Shell, Commander, Angry, Diokai, Dillon, Greg, Marsdrom, Erion, Alexander, Peace, Archimator, Polytech, Reality, Thief for us, Red Profits, Steven, Tools, Devler, and Willie. These guys, they're my high-steered patrons. Over on Patreon, they are the producers of this episode of Haiti. The show's also brought to you by each and every one of these fine ladies and gentlemen. All these names you're seeing on the screen right now. These are all my supporters. Over on Patreon, because I don't have any corporate sponsors, I'm sponsored by you guys, the community. If you like my work, I want to see more videos of Linux free and open source software, subscribe to DistroTube over on Patreon. All right, guys. Peace.


Members' statements for Beaches East York. Thank you, Speaker. I'm thrilled to share a beautiful story from my writing of Beaches East York, the story of a pickup football team at Secord Elementary School that wasn't supposed to win and did. Secord is one of 150 schools in the Toronto District School Board that face the most challenges, a model school, they call it, meaning that many of its students live in poverty. Jason Kuter, a FIZAD teacher at Secord, decided to start morning touch football games as a way to energize students for class. There were no tryouts. There ended up being 11 grade 5 students interested, four girls and seven boys. They started playing just 10 minutes a day in the few minutes of school yard supervision time before the morning foul rings. On the last Monday in October, the school played in a city-wide touch football tournament. They played teams that were better funded, that had sports gloves and personalized jerseys. At half time, they were down 20 to 8 against an all-boys team from the west end of the city. As Caroline Alfonso later wrote in the Globe and Mail, they staged a fierce rally in the second half, forcing overtime and eventually winning the game and the championship. It is the first time in Secord's 103-year history that they have ever won a sports championship. Kudos to the students, their coaches and principal, and the school whose heart-filling victory has caused a ripple effect of pride in our community. A lesson in perseverance. There is absolutely nothing these kids can't do, and we should all be so proud of them. Thank you. Thank you. Member Statements, the Member for York Center. Thank you, Mr. Speaker. Implemented over a year ago, the King Street pilot project has been suffocating downtown Toronto traffic, killing King Street businesses, and made one of Toronto's most magnificent streets into a ghost town. Traffic on adjacent streets, namely Adelaide, Richmond and Wellington, has become unbearable. The streetcar does not reduce traffic. It clogs up roads, creating congestion and causing pollution. King Street is known for its wonderful dining, but since the project started, 11 restaurants have shut down. Police are busy enforcing rules no one understands. And what did this ideological exercise achieve? According to a city staff report, a decrease of four minutes out of a 21-minute commute and a meager 10% increase in ridership barely above the increase in population. And they have the audacity to be proud of that. Moreover, they realize that they're killing King Street businesses when they realize that city council passed measures to subsidize those businesses with reparking at taxpayer expense. This classic modern liberal thinking of killing jobs and then suffocating businesses with regulation and then subsidizing them back to living makes no sense. Enough is enough, Mr. Speaker. City council will be voting on the pilot shortly. I urge city council, all 45 of them, to exercise common sense and end the streetcar monstrosity. And if they're not going to end it, then find a compromise. Open one of two lanes or open King Street to traffic outside of rush hour for 20 hours a day when the streetcars are half empty. To save these restaurants, to relieve traffic, to restore some common sense to beautiful downtown Toronto. Thank you, Mr. Speaker. Member Stevens, Member for Scarborough Southwest. Thank you, Speaker. Speaker, last week saw the long-waited launch of the Scarborough Health Network. This is the new name of Scarborough's only acute care hospital created from the merger of the Birchmount, the general sites of the Scarborough Hospital and the centenary site of the Rouge Valley Health System Network, system back in 2016. It now becomes Ontario's third largest community hospital employing over 5,000 people. Yet it's one of the most underfunded hospitals in the province. This hospital is in dear need of upgrade. The operating rooms at the general site are some of the oldest, still in use in Ontario, having first been opened in 1956. That's more than 60 years, Speaker. In 2015 an expert panel recommended a range of essential capital projects. But we heard crickets from the Liberals about funding these projects until you guessed it earlier this year, right before the election. So when I attended the launch last week of the new Scarborough Network, branding, what I had hoped from this government was that help was on the way. But what we heard instead was that the all too familiar from Scarborough's residents same messaging, loss of platitude but no firm commitments to funding the urgently needed new operating rooms or the emergency departments. Speaker, for decades successive liberal and conservative governments have neglected healthcare in Scarborough. It's time to make investing in Scarborough healthcare a priority so that the new Scarborough Health Network can be more than just a branding exercise. Thank you, Speaker. Thank you. Member Statements, the Member for Northumberland, Peterborough South. Thank you, Mr. Speaker. It gives me great pleasure to rise today to pay special tribute and to thank everyone. With the recent municipal elections we saw a number of great people in my community put their name for it. I wanted to thank them all for their commitment to public service and make special acknowledgement of a number of outgoing mayors who's through their tireless service they've served our community with dignity and brought us forward to the great place that we are today in Northumberland, Peterborough South. So special thank you to Mayor Mark Wallace, outgoing mayor of the municipality of Brighton. Mayor Mark Coombs, outgoing mayor Terry Lowe, from the township of Hospital Norwood. Gilbrock and Ear, from the town of Coburg. Reeve Dave Nelson, from Autonomy South Monaghan Township. And finally, Mayor Mark Luffchin from Hamilton Township who is also our outgoing county warden. Thank you all for your tireless service to our community. Thank you for your commitment to public service for bettering our community of Northumberland, Peterborough South. You'll be missed. Thank you for your service. Thank you. Member Statements and Member for University Rosedale. Speaker, the recent fall economic statement saw $1.4 billion cut from Ontario's transit infrastructure. Yet this government refuses to come clean about its plan for Ontario's transit systems. So here's what we don't know. We don't know what projects this government is cutting. Is the Huron LRT going to be built? The Huron Ontario LRT going to be built? Is Toronto getting its relief line? Is the Huron's BRT does this government have a firm commitment for two-way all-day go to Waterloo Region? Is the Bowmanville expansion still on track? Will Kingston get the ferries that were promised? I and my colleagues have repeatedly asked about these projects, but this government has refused to even provide us with a simple yes or no. So we are left guessing and wondering which projects are included in this government's cuts. What we do know what takes no guessing at all is steamrolling ahead with its disastrous plan to break up the TTC. In Toronto we need transit relief. We need more integrated and reliable service. We don't need to further disjoint, sever or privatise our system because that will make our commutes longer and more expensive. Transit experts and advocates are already mobilising to stop this government's attack on transit. I want to thank and acknowledge them for their hard work. I'm also happy to say that I'll be joining them tomorrow morning at Queens Park subway station as they continue their work to educate and engage Toronto's 1.8 million commuters on the devastating impact this upload will have on their daily lives and Toronto's economy. Thank you. Thank you, Member Statements. The Member for Guelph. Thank you, Mr Speaker. It's an honour to rise today and thank the many water protectors in the city of Guelph and if you'll permit me, Mr Speaker, as neighbours to thank the many water protectors in Wellington, Halden Hills as well. So I'd like to thank Wellington water watchers, the many Indigenous water keepers who do water walks in our area, save our water, get concerned and protect our moraine for the amazing work that you do for our community. Water is our most precious resource and I believe government has a sacred responsibility to protect it as a public trust managed in the public interest. I want to extend my thanks to the city of Guelph to our mayor, our city council and city staff. Guelph has done something remarkable. Our water consumption is actually going down while our population growth is going up. This not only saves water, it saves our community money and not having to build more water infrastructure. Guelph indeed is the largest city in Canada that solely relies on groundwater for its drinking water. But we need to do more to protect our water. We're under drought restrictions almost every summer in Guelph. So next week I'll be introducing a private members bill the Paris Gull Moraine Protection Act and I really appreciate and I want to thank many of the members in this assembly have given me feedback on that act designed to protect our region's water. So thank you Mr. Speaker and thank you to the members. Thank you. Member Statements, the member for Don Valley North. Thank you. Thank you Mr. Speaker. I rise today with great news for my writing of Don Valley North. Earlier this month, Dr. Stephanie Klein of North York General Hospital was named the 2018 recipients of the Ontario College of Family Physicians of the Year Award. This award is recognized outstanding clinical research, leadership and teaching skill in a family medicine residence. A graduate of University of Toronto Medicine School Dr. Klein recently completed her family medicine residence at North York General as co-chief resident she designed and implemented the wellness curriculum for family medicine residence at North York General. She has presented nationally and won multiple awards for her works. I have the pleasure of meeting with Dr. Klein on last Friday at my constituents office in Don Valley North. She is an amazing example for all of us. I thank Dr. Klein for her service. Don Valley North is lucky to have such a dedicated community member. Thank you Mr. Speaker. Thank you all. Thank you Speaker. On November 13th over 150 residents from Black Creek in York Southwest packed a town hall meeting in my home community to express their outrage at a system of auto insurance that penalizes them simply for where they live. The NDP have held similar town halls in Brampton and Scarborough and the feelings of the crowd were always the same. The NDP members were overjoyed. But that satisfaction turned to anger when they learned that the government voted it down. In fact, it is the second time in many years the PCs have voted down measures to stop auto insurance gouging based on postal code. The NDP members voted it down. In fact, it is the second time in many years the PCs have voted down measures to stop auto insurance gouging based on postal code. Why? Because they take direction from corporations such as the auto insurance industry and not the people, the workers, the voters. Rather than address the problem of postal code discrimination the PCs offer measures with a loophole so large you could drive a truck through it. But don't take my word for it. Ask the many lawyers who have written a letter denouncing the PCs handling of auto insurance reform. When will this government evolve past slogans and actually put the people in the spotlight? I'm proud to be part of a team that will keep fighting for a fairer system of auto insurance. My community, all communities deserve better. Member statements. Member for Kitchener, South Heskler. Thank you, Mr. Speaker. I'm rising this afternoon, Mr. Speaker, because I want to tell you a little bit about how our government for the people is working to end hallway health care in my riding of Kitchener, South Heskler. At St. Luke's Place, which is located in Heskler in 18 new transitional beds, the CEO, Stacey Bartlett, excitedly informed me that their first three new residents moved into last week, and they're hoping to move in five new residents a week until they hit 18. Good news. Ms. Bartlett and the team at St. Luke's Place have always considered it to be, in her words, incredibly important for them to be a good community partner. She said she was looking for ways that they could help alleviate the pressures on the system as we enter flu season, as known in our local hospitals as surge season. When she came along the Ministry of Health and Long-Term Care Plan for short-term transitional model care funding to open up these new beds, she wanted to be a part of our pilot program. This new unit is specifically designed for patients whom the hospital is no longer the appropriate place for care and is intended to prepare patients for the next destination, which will likely be long-term care. The staffing for these ratios for the beds is higher than that in the hospital and in long-term care. And these are community beds located within St. Luke's Place. So there are no fees to the families as well, and they will have recreational activities, and they have their meals in a dining room to give them that preparation for being in a long-term care setting. So thank you, Mr. Speaker, for the time today to highlight what we are doing to help end hallway healthcare. Member Statements. Member for Mississauga Mall. Thank you, Mr. Speaker. The Riding of Streetswell is home to Pill Hill, one of the top life sciences clusters in Canada. On Friday, November 23rd, me, my fellow MPPs and I had the opportunity to learn more about the innovation and service this industry provides. The life science industry is an economic powerhouse in the Riding of Mississauga Streetswell. There are over 400 companies that provide 15,000 well-paying jobs to the people of GTA. These companies have invested hundreds of millions of dollars into local economy, billions of dollars into provincial economy, and the innovation, production, research, and development, and these companies they provide is priceless. Mr. Speaker, we are pleased to meet with these three companies in particular Glaxo, Smithkin, Fordis, and Roche, Canada. Each of these companies have been making investments into our economy, spending hundreds of millions of dollars on new manufacturing facilities, R&D, training, and education. Additionally, they have contributed millions of dollars in taxes. Mr. Speaker, we are excited to continue to work with these companies as they continue to expand in our riding and across Ontario. Our province is open for business and will continue to work to provide the environment these businesses need to succeed and make life better for all Ontarians. I'd like to congratulate and welcome Mr. Ryan Locke from GSK, Veronica Carlson from NOVO, Nordisk, and Lorraine Hudson from Roche, Canada. Thank you so much for coming. Please come. This concludes our time for member statements. Next we have reports by committees.


Assalamualaikum warahmatullahi wabarakatuh Annyeonghaseyo, I'm Dawood Kim Finally, 2020 Ramadan is coming Yay, applause! So I'm also preparing Ramadan now There are not many preparing things but you know, mindset is Ramadan So this will be your first fasting and Ramadan as a Muslim I'm so so excited You know that Ramadan is so much important to Muslim You can see in Quran 2.185 The month of Ramadan in which was revealed the Quran Or guidance for the people and clear proof of guidance and criterion You can serve Allah and close Allah's mantawa And you can endure your desire and make you refresh and be clean Your sins are gone And also we can the charity for poor people can be blessed a lot in Ramadan So today I prepared a special video for Ramadan 2020 How to get my mindset in front of the Ramadan Named five Ramadan tips for success So we're going to watch it together, I'm so excited Okay, let's go I love this mindset, it's good Number one, don't eat or drink too much Eating too much is a common mistake made by many who fast during Ramadan Once it's time to eat, we eat and drink like there's no tomorrow Overloading our stomachs until it's difficult to move This then makes us lazy and unproductive Keep in mind that Ramadan is about self-control, not self-indulgence So let's try to stick to the prophetic rule on eating Fill our stomachs with one third food, one third water And one third breathing space, insha'Allah Number two, give daily charity Charity important The Prophet Muhammad peace and blessings be upon him Was always generous, but even more so during the month of Ramadan The rewards for charity are increased so much during Ramadan That we strongly advise everyone who can To donate a little amount every single day during Ramadan The reward will be multiplied many times This way you can also guarantee your donation is on the night of power A person who donates only 10 pounds on the night of power Will have the reward of donating 300,000 pounds of charity SubhanAllah, don't miss out Number three, pray five times a day During the month of Ramadan You will find the masjids completely packed out during tarawih prayers Which is amazing But then during the five daily prayers You will notice the masjids are nowhere near as packed Unfortunately, many people have mixed up their priorities The farf, obligatory five daily prayers Have been put below the sunnah, tarawih prayers Although nobody can deny the importance of the tarawih prayers Which comes with an abundance of rewards and blessings The five daily prayers will always be greater And above all the sunnah or optional prayers So please do not neglect your obligations this month Number four, month of the Quran During Ramadan Many Muslims try to finish the Quran as fast as possible Some people finish reciting it two, three or even five times SubhanAllah As though it's a speeding competition It is recited without any understanding or contemplation Although there is always benefit in reciting the verses of the Quran There is a greater benefit in reciting with understanding Because the purpose of the Quran is to guide mankind And how can we be guided if we don't take time to understand the verses So make this the month you truly connect with the Quran Number five, attain taqwa, God consciousness The Quran prescribes fasting for the believers in these words Oh you who have believed Decreed upon you is fasting As it was decreed upon those before you So that you may attain taqwa Hence the intent and effect of fasting As described in this verse is to acquire taqwa Presence of taqwa helps protect a believer from committing sins And to overcome the nefs' desires There is no equivalent English word for taqwa In Islamic terminology taqwa refers to a state of consciousness Where one constantly feels the presence of his creator Obey his commands to attain his pleasure And avoid disobeying to him Not only out of his fear But also for the love of him These are just five tips from the merciful servant team Wishing you all a very blessed Ramadan Please share these tips with your friends and family And let us know if you want to see more top five videos this Ramadan Share to family My family is not Muslim But I can try Like, oh, you know, in our sub-christianity Fasting is recommended, so can we do it together? Like this? Maybe? Okay, so this video was, wow, so amazing, so amazing Wow, it's a really good tip Like, they say many people already know But many people also don't notice Usually don't need too much, obviously And a mandatory prayer and do more charity And also Quran, yes, I really agree this point Like, many people try to Quran very fast Like two times, three times But even if they don't understand the meaning of the Quran Then that is useless, right? Wow, these tips, very good And I want to say one thing This year, Ramadan is not normal, right? Masjid is all closed now Maybe it would be a little bit more hard But I think this is also a message of Allah swt You know, like, this is the world pandemic Many people are suffering from this But this is the perfect timing to help each other And make our community more strong and have more blessed I'm sure that this Ramadan would be a really amazing And beautiful journey of my life I'm sure about this Actually, I'm really excited You know, like, fasting is not easy Of course, I know I already tried last year, but But the feelings in Ramadan is so amazing, you know, right? Fasting together all over the world Brothers, sisters, pray hard, read Quran hard Be close to Allah swt And we can also follow the Sunnah, Prophets, Muhammad, salallahu alayhi wasalam So, I'm excited, I'm done today I hope you guys also prepare well this Ramadan 2020 Thank you for watching my video Take care and be safe Alhamdulillah, masalama Thank you Bye


Allison Whelan and Candace Sipos here and we are wrapping up day two of DCD Connect Virginia here in Dator Center Alley and you know we just finished a full day of interviews, topics to no one's surprise, AI, sustainability, demand for power, supply chain, all things we heard repeatedly like I said absolutely no surprise. The panels talked about it, the DCD debates talked about it and I think our interviews were just all very relevant with the trends and what's moving forward for 2024. Yeah it's been a really, really strong event. Every piece of feedback that I've heard has been super positive. You know every panel, every session that we've been to has been packed including the Expo floor. You know very, very busy, lots of great excitement and great debates. The DCD debates were really lively and interesting and insightful so really, really excellent content at this event overall. Absolutely and in just 30 minutes we're heading to DCD Talks Path to Greener Data. Yes the Path to Greener Data it's featuring Lantana LED's CEO Sam who was actually our very first interviewee this morning which feels like a very long time ago but it was this morning. So we will be there to see what he has to say so I hope you can join us there at 2.30. Yeah and then we're gonna hit the Expo floor but before we finalize we just want to say thank you to the entire DCD team for having us and for the partnership and we'll see you guys next time. Thank you. Happy networking.


in a world. Oh, we're recording. All right. So category theory for mortal programmers and the reason for the title, because some of us would actually like to grok this stuff in our lifetimes without actually having to obtain a PhD in abstract math. If you Google category theory, you're likely to come up against this thing. A monad is just a monoid in the category of endofunctors. So what's the problem? And I know we all had a prof like this in university, right? Now, disclaimer, speaking of university, I've only got undergrad maths. And I have, and that was 20 years ago. So limit your questions to simple, please. So a little bit about me. You all know me, Stefan. Work at Pivotal Lab Singapore. Shout out for the old Twitter feed there at Beard Papa. And then the blog, which you may wish to visit, even though it was last updated in November of 2015. Right. So what is category theory? In as simple as terms as I could possibly explain it, I would start by saying that as so many things that we programmers love, it's an abstraction. Programmers like to work with abstractions. We like to think in terms of abstractions, because it makes our jobs easier. It allows us to think about the larger issues without having to necessarily drill down into the details. Category theory is exactly that for mathematics. It's a branch of mathematics which was developed specifically to encompass really abstract thinking, where the thinking is ordered at such a high level abstraction that the things which is A, B, and C there, they're called objects, can literally be anything. It can be a person. It can be a human being. It can be an object, like a fan. Or for our purposes, they're going to be elements of our programming languages. Specifically for the purposes of this talk, I will be limiting our discussion to functional programming languages, because that is where category theory is actually most applicable. People do apply function or category theory to languages like C++ and JavaScript. And if you're interested in that, you can actually find quite a lot of information about that out there as well. But we'll only be limiting ourselves to talking about functional programming languages, specifically Scala, because that's the only one I know. So sorry, Clojure and Haskell guys. Objects, anything. They are the A, Bs, and Cs in this little diagram. The arrows are called morphisms by category theorists. We can call them arrows. I will probably keep calling them morphisms, because it makes me sound a lot more intelligent about the stuff than I actually am. So the blue bits are morphisms. They are directed lines between the objects or between the things. And next slide will give us immediately, I'm just going to jump into how this stuff relates to programming, because that's really what we want to know, right? So for our purposes, a thing, F, A, and B, A and B are types for our purposes. F is a function with an input A and an output B. So F takes a parameter A and returns something of B. G is a function that takes an input of B and returns something of C. And then G following F, that little notation at the bottom of the screen there. This is a special mathematical notation that category theorists like to use. G following F, which will make sense in a minute, because it looks like it should be F, little circle, or composition G. But it is actually correct to write it in this way, because you'll see in a second that what it actually translates into is the composition of these two functions, meaning that you call the one and then you call the other. So when you say G following F, the way which we normally do this in programming terms, is we call function F first, pass the output of function F into function G. And that gives us the composition, which translates into a new function, which takes an input of A and gives us a result in C. That bit at the bottom, this composed function, this is the thing that we're interested in. That is actually the thing that makes category theory interesting for programmers. One more thing, domains and co-domains. The input is normally referred to as the domain. So A, in this case, would be the domain of the function. And for those of you guys who did numerical analysis in university, this should be familiar territory. And the co-domain B, same thing. So categories have a definition. So there's a standard definition of what would actually make something a category. Although it is a little bit abstract, there are specific rules which govern what can and can't be a category. And the reason for that is in the universe of category maths, same as with all other branches of mathematics, unless you lay down some rules, things start falling apart. And you can't really have firm proofs, the way that you need this to be able to mathematically prove something. Is you construct a little magical universe constrained within the laws that govern what is what. The little graph on the right-hand side contains pretty much everything that would constitute a category. All of this, so very important to note, this whole thing is a category. It's not that A is a category, or B is a category, or C is a category, although they could be. But that takes the level of abstraction one level higher. We'll keep it simple. We'll just say that all of this stuff is a category. And for our immediate simple purposes, A, B, and C are primitive types, maybe objects, an integer or a string or a sequence could be an A, a B. And a function would be an F or a G that takes those types as inputs. A slightly higher level of abstraction, which I'll get to next, would be where we work with higher-kind types in functional programming, generic types, or templates in C++, where you have a type constructor, meaning that the thing that you pass into the function is not actually a realized type, like a sequence in Scala, for example, or in Java. It could be a list of string, but before it's a list of type string, it would be a list of anything. That list of anything, that unrealized type, that is also something we're interested in. Now, if you haven't done functional programming before, you are maybe not aware of the fact that functions themselves are first-class objects, meaning that functions can be passed as parameters as well. For the purposes of category theory, and for what we want to do, we want our A's, B's, and C's also to be functions, meaning that the input and output potentially of our functions F, G, and G following F potentially also will be functions, not just necessarily data. Let's look at some of the definitions on the left-hand side of the screen there. You have the objects in our category, our A, B, and C. The morphisms, or the arrows, are F, G, and of course G following F, which I didn't write in. Then composition is a very important part of a category. In order for something to be a category, there needs to be, if you have an A that goes to B and a B that goes to C, in order for this to be a category, you must have composition in it. So the little inverted E there is my attempt at sounding, again, a little bit more mathematical than I actually really am. That, of course, is just the mathematical symbol for there exists. So given a function F that takes an input A and returns a result B and a function G that takes an input B and returns a result C, there should exist a composed function G following F that takes as its input A and returns a result in C. That is composition, and that is a requirement in order for something to be a category. Then there is the identity of the category, meaning that the identity function is defined as an A, it's this little arrow right here. So it is the same as the F in the G there as meaning that it is a morphism or a function. It is just a function that takes an input A and returns an A. But very important distinction between the identity function and something that they call endofunctors, meaning I'm not going to talk about endofunctors. I'll talk about that later. The distinction here and the important thing to note, if A is an integer, the identity function is not a function that takes one and returns two. It is a function that takes one and returns the same result, one, meaning that it leaves the, it's a function that when you apply it to your input, the input remains unchanged. That's what we define as identity. Now these things are still all a bit abstract and we're going to get down into the integrity immediately after two or three more slides. So category laws, the associative law and the identity law, again these are just constraints placed on the branch of mathematics so that things make sense and so that we can think and reason about these things in a mathematical manner. Associativity, familiar to all of us, it means that if I have a category diagram that as the one is on the right-hand side here, where I have a g following f, a composition of a g following f, and then, so this one is in here just to draw a similarity with the one from before so that things don't get too weird and then a h following a g following an f, which is just nested function calls. You're calling the one function with the next function with the next function, right? So it's simple composition. This has to compose meaning that if I evaluate h following g first and then evaluate the composition of f, it should return the same, it should be the same and have the same effect as first evaluating h and composing that with the result of the composition of g following f. And then the identity law is just as I previously explained, it is that the composition with identity works both if you apply the identity after or before the actual function and, sorry, let me start again. This is a composition of the function f with the identity function, right? So it is calling the identity function using with f as input or calling f with the identity function as input. Both of them, they should work both ways. And the reason that works is because f takes input as a, the identity function would take input as a and return output as a. So if f takes input as a, I should be able to pass the identity function as a parameter to f and the result of that should be the same as when I pass f into the identity function as input. And the result of all of that should just be f, meaning that the identity function does not mutate the actual composition in any manner. Are there any questions before I continue? Can you make this more real for me now? Okay, we're gonna get into it. So I've laid these things down just so that we can have sort of a baseline with the graphs in a little bit, but that would be the end of the little graphs and the abstract bits. So for our purposes, it is really nice to think of categories as functional design patterns. The origin of these things, since category theory was developed in the 1940s, but it only really became mainstream in the 1990s when the Haskell hackers realized that they don't really, since they don't have mutable state, everything is immutable, they didn't have a clean way of working with mutable objects. And category theory allowed that for them, it allowed them to construct transformations that where you could take an object, wrap it and work on it as if that object or collection or whatever was mutated and then the result is the mutated version of the original thing that you worked with without having had to disturb that immutable original item, right? I'm going to show you guys something that's gonna be very familiar to you. Doesn't matter which programming language you know, this thing is gonna be very familiar to you. The function definition there is in Scala, but it is actually just as applicable to anything else. If I, and the question for you guys is, and you guys will know this immediately, if I wanted to apply a function which takes an integer and returns, or that should be the square, and returns the square of the integer that was passed into it, and I wanted to apply it to each of the elements of that sequence, what function would you actually construct in order to do that, or what is the method that you would call on the sequence? Great. So pretty much every programming language these days, Ruby, Python, most of them have a map method which allows you, sorry? JavaScript. Yeah, JavaScript. They have a map method which allows you to pass in either a lambda or an anonymous function that will operate on each of the individual terms in place, and return you either a copy or a mutated version of the original sequence that you have applied it to. And yeah, map is the correct answer. We're gonna jump straight into an actual implementation of a category. This is a very special category and it's called a functor. And now I suddenly have a sinking feeling that I've actually skipped over something here which was important. And okay, I'll explain, I'll run through the code. Is that legible or should I bring up the ID? Can you guys read that? I could also just, is it okay? Okay. All right, so. Yeah, I'm okay, I'm okay. I should have made sort of like an animated bullet thing that went through it, but. Right, so we are defining, let me first explain what it is that our objective is here. The objective here is, or our use case is, we have this thing called, or this type called a my box. A my box can contain any other type. So you can have a my box of string or a my box of integers or a my box of swams. Anything, right? It could be a future. It's anything that contains something else, an option of future, a sequence. Anything that contains something else. In our case, I've specifically made it a my box. It's not a collection. It holds a single value. That value is the same as the type of the type constructor, right? So my box of T is that's the full class definition in one line in Scala, right there. It's nice and concise and to the point. We've constructed a, it's not a realized type, right? This is a definition of a type. My box, so now I'm gonna define a map function and this is the interesting thing. The first thing that you'll notice is that there is a direct correlation between the map function. The map function is sort of a commonly used word and can be used interchangeably for the categories of functors. So there's a category, a mathematical category called a functor and in programming people have just started using the map method as interchangeable and as sort of the defined method to call anything that is actually a functor. With a flat map and the rest of them have equivalence as well. For a functor, this is called map. The method is called map. So what does my method definition there actually say? Well, I'm defining a method that takes, or it's a typed parameterized method that takes a function and that's an anonymous function F that takes input A and returns output B. And the function, so that's the first parameter. The first parameter is a function without shape. The map method itself returns a function in this case. And the function that the map method returns, so let me just quickly check if I, no I did not. I thought that I added in the, I think I accidentally deleted it. I added in the general shape of the thing that I'm talking about there. That's why I was saying something got left off. Anyway, I'll try to make this clear without, so this is the bit that you should please ask questions because this might easily go over your head as it did mine for so, so many hours. So again, we have a map method. It takes, as the first parameter, input a function. It returns another function. And the function that it returns is my box of A as input and my box of B as output, as the return value. The implementation of that method is that it, the way that, what it actually returns is again, the first parameter is just the definition of the my box A, but then the return type, it actually applies the function that was passed into the map method to the value of the first parameter. And inside the box. Right, so the thing inside the box is getting transformed. Now what this actually allows us to do, and the reason why this convoluted thing without an explanation has been constructed, I'm gonna back up quickly again and talk about the fact that let's say you have a container that has something in it, in our case, a string, and you want to get the length of that string out, but you don't want to go and peek into the container. In fact, let's assume that you can't peek into the container to go and look at the thing that you want to know the length of, right? So what are we gonna do? We're going to use this functor category, which will allow us to obtain the value that we're looking at, but the value will be wrapped inside the same type as what we actually passed in. As if our whole universe were only allowed to really work with my boxes from the outside. That's correct. The value is in them, but they're okay. Yes. But maybe I could look inside what I have, but I can't call methods on it, right? I can only look at pure value only, if I wanted to shoot it as an opaque box that has a value. So I can't go in and push the boxes, it's giving the length of this string, but I have something here that will do that for me and give me a new opaque box and if I look at it, has the length of it in the box. Precisely. It has three values. That's right, that's right. So that is what we are doing here. We are actually constructing a function. So the map method here will be slightly different to the map method that you're used to. The map method that you're used to would actually already return you the wrapped value of the my box, right? The map method that we are actually implementing here, and I'll explain why it's implemented this like this in this naive example, is returning us a function that will give us the eventual result. So the function that is returned will have to be called again with an actual my box instance, which it will then calculate and compute. It will wrap whatever it is you pass into it, which is where we, which is the next line there, create a boxed value. So our boxed string, now we construct a boxed string, which is an actual instance of a string and it has Hello World inside and it's a my box of type string. What do we want back? We want a my box of type int, meaning that we want the length of that string. So what we want back is eventually a my box of type int. So what do we do? We create an instance of the function we want to apply. And the function that we want to apply is a function that goes from string to int. And this function is gonna be called rolling. It's gonna take a string as an input, return int as its output. This function is then going to be used to construct a transformation. And the transformation, so we are working on several levels of indirection here. And this is where it normally gets difficult to follow along. And it's also why your map function in your library will just return you the thing that you asked for without you necessarily having to construct all these several different levels of indirection. Now again, I will explain in a minute why in this naive example we are doing it this way because all these things normally hidden by the library for you, but they're actually important when we reason about our categories. So a transformed length is going to be a new function, which is the function that the map actually constructs for us. So the map method now will take as its input a function, in this case it's our raw length function, right? So we construct a new object or method or value in this case, all of which are by the way equivalent in this instance, since it's called transformed length of. And transformed length of is now the final function which will take as its input a my box string note that we're going to pass the box string into it and return us the my box of value int, which is the thing on the left-hand side there. If we were pairing, I said instead of the name transform length of, I want to call this the result of the map of raw length of, I want to call that variable length of box value. Would you say that made sense? Or like, because that's what I'm thinking of what transformed length of actually is, it's a thing that specifically is going to do, it works on boxes, right? Because map is specifically bound to handle boxes. So can you repeat the question I wouldn't quite follow? Okay, our definition of map above, it only works with this class my box, right? So I kind of feel like raw length of is nice because it, well, I guess he only works with strings. I'm just thinking like, transform length of doesn't tell me that I can only use this function with box things. Oh, absolutely. So now one thing to note about this naive example is the fact that all of this stuff can actually be hidden inside my box. So they've been pulled outside of my box right now. But what I could actually do as a next version of the implementation, for example, would be to take, to put all of the stuff inside my box to actually make map behave in the way that we're all used to. This is just the implementation details. And these are just the implementation details on the inside of it. So that from the client code point of view, it doesn't, it becomes simpler. Cool, okay, thank you. Right, so I want to recap the functor because, and I think actually that this slide should have been the previous slide because it would have been a leading, but I've left off the left-hand side of the stuff there. But we can go back if you guys have more questions about this. The general shape of a functor is what is on the first line there. It is the transformation that you're trying to figure out when your client code will be presenting a function that takes input A and output B. You always, in order for you to construct a functor, need to figure out how to the function, the map function that you want to construct or the mapping function, whether it's hidden or not hidden, will have the shape of the thing on the right-hand side, meaning that it will be the type that you, in our case, my box value or my box, the type of A, a function that takes the type of A as its first parameter and returns the type of B as its second parameter. This is sort of, this is a definition, this is a law. This is the definition of what a functor is. It is not, there are other shapes and that's why they're called design patterns because the shape for the flat map is actually a monad and there are specific, and no matter what you need to do or how you want to reason about the categories that we're working with, that general shape will always be the same for all functors. Every functor that you ever, all map operations always have the shape, meaning that you always have a function that you want to pass in that has the types A and B and then internally, either you yourself have constructed it or the library has constructed it for you, there will be a function that looks like what is on the right-hand side of that arrow. It will first create a typed function or a parameterized function that takes as its input whatever type it is of A, whatever type, and returns whatever type it is of B. And just to bring it back to category theory again on the next line there, the category here goes from A to B and what is on the left-hand side of the category, the object on the left-hand side here is actually the function. Because remember before I wanted to specifically mention the fact that functions are first class objects in functional programming, right? So the function on the left-hand side is the object A and that function can actually be further decomposed into a category of its own where the A and Bs are a string and an int. But at the higher level of abstraction at this point we are talking about A and B where the left-hand side, the A is a function with that signature and the right-hand side for our implementation is another function with the signature that you see there, meaning input of my box string, output of my box int. The F, our morphism or our transformation in this case is actually the map method and that again is what makes this a function. Yeah, Diego, question. Trying to rework this. So the left-hand side of the general state today, if I recall to have an operation, then the function would be something, a function that takes an operator and creates a map method, so to say. You implement the map method. The map method is what the, either the library or the programmer has to implement in order to provide the transformation that's on the right-hand side. Yes. So the function is, so you spit out the map methods that take up the operations on each one of them. Precisely. So the result of the map method will always be another function in this case. It's a function that again needs something to be applied to it and typically the thing that you apply to it is the function, some sort of a function in the shape of the thing that's on the left-hand side, but that's normally left up to you because each individual instance tend to be the same. The functor implementation for applying a map operation on a sequence of objects will need to iterate over those objects and construct a new sequence in order to construct the return type, which will be, for example, if I wanted to go from a sequence of, like the original example where I had a sequence of integers and I wanted to square each of the integers in place, I would have to iterate over them. I would still return a sequence of integers, but they would not be squared. I could just as easily have returned a sequence of strings from that. Any more questions or any other questions about exactly what's going on here with the functor? So in my head, I see map, but what I say in my head is make me a map function, make me a map one. That's right. Okay, so we're almost done. I wanted to keep this as small and simple as possible. The monad has a similar shape to the functor, meaning that again we can think about this and reason about this as something on the left-hand side that goes to something on the right-hand side. Flat map is the monadic operation that is implemented pretty much everywhere. The shape of the thing on the left-hand side for flat map is always looks like that. It's a function that takes as its input A and returns something that's wrapped in a B. Sorry, something that's wrapped in a T. Something that wraps a B. A T that wraps a B, right? And the transformation that you want to implement, the transformation function that you need to implement looks exactly the same as the transformation function for the functor. In fact, the functor, the monad, the applicative, the thing on the right-hand side always looks the same. The thing on the left-hand side always changes. And think of it in this way. The thing on the right-hand side is an intermediary step. It's the transformation function that you need to construct in order for what you are working with to be similar types. Once you're working with similar types, then it becomes much easier for you to compose things. And this is simply because same things compose easily, different things compose difficultly, or not at all. Functions are notoriously difficult to compose, some of them, because the composition sometimes does not actually do what you think it would do, and sometimes it will fail. Okay, I've got a bunch of references, and I'm now open to questions. If there are any gaps in anything that I've said, please ask me now so that I can explain a little deeper. Monads. You want me to dig into monads? No, we don't have time. I thought you were going to take a shot. So, I'll ask you a different question. Sure. We have this little kind of fonturist monad, and I suspect that there's value in understanding these terms because it lets us communicate ideas to each other more efficiently or effectively. Yeah, right? The same way that we're getting to a re-factoring, and I say, right, well, let's replace it like 10, right? That has meaning to people's understanding of some of the common re-factoring, how it really enables. Yeah. Is that why, as a programmer who's learning functional learning, I hear about rocking the words, what is the fontur and what do I want to use it, and what is the monad and what do I want to use it? I would say yes, but I think that there's even a more basic instance of why I think this is useful. The map, flat map, and all these different operations that have been defined on the standard library have been defined on a bunch of different things. You can map over a future, you can map over an option, you can map over a sequence of things, and obviously the implementations of these things are different. But if you understand the general shape of what the map actually tries to achieve, then it becomes immediately obvious what the thing you're working with should end up as, or how to end up using it. So if you understand, if you have a general understanding of the categorical shape of, for example, of the functor, of the map operation, right? Then it becomes obvious that what is actually happening, let's take the example of an option. It's easy to reason about the fact that a sequence might have map, but an option which can either be none or have an actual value, an optional value in Scala, if you think of what the map operation does to that, it does exactly this, which is that it first transforms in the implementation over here, for example, in our implementation of the map method, right? The function that needs to be returned here on the right-hand side will either return the value or it can check for whether or not, it will internally check for whether or not there is actually something to return and then return the non-value for you in its case, which is why I can use map on an option as if, instead of an if statement. It behaves like an if statement. So that behavioral nuance becomes obvious once you understand what the general class of functional shapes or design patterns or what the design pattern looks like underneath. The same for future or in the case of flat map, the fact that the four construct in Scala behaves like a sequence of flat maps that are evaluated either one after the other or in sequence depending on whether or not you're passing values back and forth. They're either composing the flat maps one with the other or running them in parallel depending on, right? So that becomes a little bit more obvious and, yeah. Okay, so again, that comes back to your statement that these are really, these are functional design patterns. So there's a bit of a value to be understanding of the function design pattern says I can take a job when I have a thing, I want to convert it to a one. Again, it's not normalizing the values, right? So that now I can pass those on to other functions that are all here with values under a similar shape. Because one of the things, for example, remember we had the problem that I was trying to solve with the functional composition of the domain model where we ended up needing a lens. Well, we didn't end up using a lens but it ended up learning a lot as a consequence about the stuff and that's why I ended up digging into category theory was the lens looked interesting and I knew there had to be a way somebody came up with this as the consequence of the same problem that I had. They needed to look deeply into something that they didn't have access to, a wrapped value that was nested three levels deep and they wanted it to be easily accessible. And I guess that libraries like Scala Z take a larger domain of functional patterns and have wrapped them within a library and most of those things are actually monadic, monadic operations, so yeah. So have you read the book Introduction to Category Careers that you recommended? I have. It's extremely dense. I haven't read all the way through. I read the bits that I needed in order to make sense of what was going on. It gets, the field of category theory is vast and it gets extremely abstract very quickly. Like mind numbingly abstract. It's serious reading. I think that I've read pretty much as much as I want to read in that book. It's a Kindle book, otherwise I would have passed you my copy but if you have a Kindle account, I can lend you my copy. Yes. So I'm just trying to understand, completely grog the concept of category theory. So from what I understand, most functional patterns can be considered as a category, right? Is that correct? So could you make it more clear by giving me the answer? I would say the other way around. I would say that these, so a function is a category. Monad is a category. And these can also be considered as functional design patterns, rather than the other way around. So give an example of what is not a category. Something that wouldn't be a category would be something that doesn't compose. I would say any method that relies on a statement or it would cease to be a function in the first place and you can't use any of that. Right, so cease to be a function. Cease to be a function. So one of the interesting examples that I saw is if you just, in this relates to monads, is if you just think of first what monoids are.  So if I have the set of all things that can be in A and in this case I'm gonna say it's the set of all integers. That means one, two, three, four, blah, blah, blah, blah. Right? A monoid is basically a binary operation that operates on two things in a set. Meaning that I can add these two things together. So addition is a monoidic operation that I can apply there. And remember before when we were saying that RAs or Bs or Cs in the category. In this case there would be ints. That would be an int. Because it composes but minus or divide would not. Right, minus doesn't compose, it does not compose. And remember that in order to figure out whether or not something composes we have to go back to our composition laws, right? So if we evaluate in terms of the law of associativity does plus evaluate associatively? In other words if you have a function that operator can add things together. One plus two plus three. That composes, right? It composes because that result is exactly the same. It doesn't compose because this doesn't provide the same result as this. So minus, sorry I need to put one operator. Minus does not compose because the order in which you evaluate, and the minus here would be the monadic operation which you're trying to evaluate whether it composes. So that is an example, the minus operation here of something that does not compose. The same holds through for functions as well. Functions on certain types of input compose. Functions on other types of input do not compose. And it's those edge cases where functions on types of input that you're interested in do not compose that you want to go and build your specialized transformation function like a flat map which make them compose. And that is sort of the interesting part of monads. That you can actually construct your own monads that allow your own types to compose once you've figured out that they don't compose. Identity, right? For instance, you would think multiplication is associated and therefore for any integer it should be at a category, but zero screws up because zero times and the identity function is one in this case, is actually zero. And zero times seven is also zero. So in fact, you can't include zero in your set of objects. So if you take zero out and just have one to infinity then it becomes. Any other questions? Is it a wrap? Can you send around those links or the slides? I'll send the slides now.


A warm welcome to the 38th session in the first module of the course Signors and Systems. We have been looking at convolution in the last few sessions and we have been trying to understand how to carry out this basic operation between two signals that emanates from basic considerations in the context of signals and systems. In this session, we would like to embark on a study of two very important properties of this operation, convolution. And though I had hinted at those properties earlier, in fact, I have kind of used them, I would now present a formal proof of the two properties. And the two properties that I am going to discuss are as follows, two important properties, commutativity and associative of convolution. What we are going to do, we are going to prove these two properties formally and together for discrete and continuous convolution. I had given you an exercise, you will recall much earlier on in our discussions, I had given you an exercise to prove these properties, but now I will complete that task for you both in continuous and in discrete independent value. So, let us take up the first somewhat simpler property first, namely commutativity. Essentially says that x1 convolved with x2 is the same as x2 convolved with x1 and this is true both in continuous and in discrete time, true in continuous independent variable and in discrete independent variable. We shall prove it for both, let us prove it first for discrete, that is a little easier. Let y be equal to x1 convolved with x2, of course x1, x2, y are all sequences, so yn is by definition x1k, x2n minus k summed over all k, running over all the integer. And now we make a very simple transformation of variable, we put n minus k equal to l, remember this is true for each n and for that n, we put n minus k equal to l, which implies n minus l equal to k and when k goes from minus to plus infinity, then l also goes similar and therefore we could replace in the sum n, we could replace k by n minus l and we could replace n minus l minus n minus k by l and there we are, it tells us that y of n is also summation l going from minus to plus infinity x2l, x1n minus l, because essentially x2 convolved with x1, for every such n, x2 convolved with x1 evaluated at n and of course this is true for every such n, so naturally the convolution operation is commutative, so we have proved it. Now let us take the continuous independent variable. Here again let us write y is x1 convolved with x2, the only thing is x1, x2 and y are all continuous variables, which then goes on to say that y of t is integral x1 lambda x to t minus lambda d lambda running from minus to plus infinity. And we will take a q from the discrete case and we will make a similar transformation of variable, put t minus lambda is equal to alpha, where upon lambda is t minus alpha and when lambda runs from minus infinity to plus infinity, alpha run, now note it runs from plus infinity to minus infinity for a fixed t and t lambda is minus t alpha, so all in all we must now make the replacement of variable as follows, let us do it here. t minus alpha needs to be replaced by lambda, well t minus alpha by lambda or t minus lambda by alpha it is the same thing. And d lambda is minus t alpha and here this would go from plus infinity to minus infinity, so what we see in red is the modified form of thing and now we need to put the integral back in the form which is familiar to us, so let us write down integral first, y of t is plus infinity to minus infinity x1 t minus alpha x2 alpha minus d alpha, but then now you can take the minus sign and absorb with the reversal of integral which makes it minus to plus infinity x2 alpha x1 t minus alpha d alpha and that is the same as x2 convolved with x1 evaluated at that specific t, this is true for every t, hence we have proved that y is in general the same as x2 convolved with x1, so we have proved what we wanted to. So, we proved the commutativity of convolution both in discrete independent variable and in continuous independent variable, now we shall take up the question of associativity. We will first do it in the discrete independent variable case as before and then go to the continuous independent variable. So, let us take the meaning of associativity. Associativity as the name suggests is a question of association between pairs, so what you really want is to consider x1 convolved with x2 first and then with x3 and to question whether y is also equal to x1 convolved with the result of convolution of x2 and x3. So, if convolution is associative, yes, let us prove, let us begin with the discrete case of electronics, for it x1, x2, x3 and y all be sequences, the discrete case. Whereupon, we first consider x1 convolved with x2 evaluated at n and that is summation k going from minus to plus infinity x1 k x2 n minus. Now, x1 convolved with x2 and then convolved with x3, all this evaluated at n is essentially summation l going from minus to plus infinity, x1 convolved with x2 evaluated at l multiplied by x3 evaluated at n minus l and we can expand. This is the expansion and now we need to make a change of variable. But to make that change of variable, we must first see where we want to go. So, let us write down the result of the other side, x1 convolved with the result of convolution of x2 and x3. Let us write down the expression there. So, look at this expression here. Here, we have essentially calculated x1 first convolved with x2 and then convolved with x3. Now, what we shall calculate is x1 convolved with the result of convolution of x2 and x3. Now, first let us convolve x2 and x3 and evaluated at n. That is very simple. Summation k going from minus to plus infinity x2 k x3 n minus. And of course, so as not to confuse it with the previous k that we had, let us call this variable k1. Now, what we want to do is to calculate x1 convolved with this result at the point n. And that is going to be equal to summation l going from minus to plus infinity or if you like l1 going from minus to plus infinity x1 l1 x2 convolved with x3 evaluated at n minus l1 and we can expand this. This is what we have. Now, we need to make a correspondence of variables and then decide upon an appropriate transformation. So, let us go back to the previous expression that we had. Look at this expression here. You see, what you had here was this expression finally and you need to bring a correspondence with this expression here. Now, what is the correspondence? It is very clear that x1 has essentially the same kind of variable. So, there is a correspondence between l1 and k. I will show you both of them again. With the correspondence between l1 and k and we need to make a correspondence between l minus k and k1. Look at it, l minus k here and k1 there, k1 here, l minus k there. So, let us make that correspondence. Now, essentially what we are going to do in proving associativity is to make this correspondence. And for the discrete case, there is no problem. We will have no difficulty in making the correspondence and then transforming the double summation in such a way that we make the summation look the same. But in continuous variable, we will have to do a little work in the sense, we will have to bring in the notion of a Jacobian. And we shall do that in the next session, both for the discrete case to complete the argument and for the continuous case to add those few little details which will make the proof complete. We will meet again in the next session and complete the discussion on associativity. Thank you.


Unvailing Lady Justice on reforming the justice system in Nigeria. Lady Justice, you most likely have seen her stretch you in front of a court of law one time or the other. In the event you haven't seen or you don't remember her, she's that lady with her face covered with a veil. Usually she's holding a scale of justice in one hand and a sword in the other hand. The history of this justice dates back to Roman mythology. Justice was one of the virtues celebrated by Emperor Augustus. Since the 16th century, the justice has often been dictated wearing a blindfold. The blindfold represents impartiality. The ideal that justice should be applied without regard to wealth, power or other status. Let me repeat that. The ideal of the blindfold is that justice should be applied without regard to wealth, power or other status. Justice is a word that has been seriously criticized. In fact, it can be described as a relative term because in itself, in some occasions justice is to one person, sometimes an end result of injustice to another. So in Nigeria, how has justice fit in order the challenges of the justice system in Nigeria? What are the limitations and what status be taken to make justice available and fair to all who are in search of it? A little definition. My website dictionary defines justice as the process or results of using laws to fairly judge upon crimes and criminals. Going by this definition, it is clear and apparent that justice is still to a large extent a foreign concept on many of the issues that were grappled with in Nigeria. As a matter of fact, on the global rule of law index, Nigeria ranks 108 out of 128 countries, 108 out of 128 countries and 22 out of 31 countries in the sub-Saharan African region. Again, let's talk about the rule of law. What's the rule of law? The rule of law in plain terms implies that every person is subject to the law, including persons who are lawmakers, law enforcement officials and judges. In this sense, it stands in contrast to tyranny or oligarchy, where the rulers are held above the law. So now imagine again, the global ranking of Nigeria being 108 out of 128 simply means that Nigeria is trending more towards a tyranny than a country that respects the rule of law. Now what are the issues responsible for this? Recent in-depth research carried out revealed eight major issues to be dabbling the justice in Nigeria. The issues are one, the on forthcoming informants. I'm sure many of us have experienced that, let's not go and dive into that. Number two, funding. Number three, corruption. Number four, training of the investigating police officers. Number five, missing case files. Number six, delayed duplication of case files. Number seven, lack of forensic laboratories and insufficient number of trained forensic experts. And number eight, poor public records keeping. These are very obvious but very critical issues. And I advocate that the government should order to look at these issues for a quick resolution with the aim of getting back a country into a more civilized society. Well, you have the question and I think we should start with that, that in your view, how has the justice system fed? I think the justice system has been unjust. Point blank. You know, the justice system has been, it's, people don't have confidence in the system. And that is a big scare because no matter what you say, no matter what, it's like your appearance matters at times you judge a book by the cover. That's one of the first experience you have. No matter what you say or do, it matters a lot. The Nigeria's justice system, my biggest problem with the justice system is not just that the fact that it might not get justice is the process of the justice. And why do I say not the fact that it might not get justice? I've seen people who are ordinary people go to court with their facts and in one cases, that people have wondered, wow, so you could do this. There was a time I went to get passport for my son and when I got there, the man, I think I asked my wife to go, so I left her there or something. And the person there looked at me and said, wow, okay, both of you are here, say yes, say why are you asking? And he told me, he said last year, there was a case, somebody sued immigration and won. Why? The other family issue, the wife picked the kids, got passport for them and took them out of Nigeria, relocated. And the man wondering that how did my kids travel but they didn't have a passport. Realized that she did a passport for them without his consent, so he took immigration to court. Which is not... It's supposed to be both parents' consent. In the normal legal process. And he took the immigration to court, of course, prolonged. But he won. So at that point, immigration, that was when they were very harsh and said, no, you must come, both parties must come, sign and blah, blah, blah. What am I saying? I'm sure that has happened to so many people. And out of fear that I can't get justice, they haven't tried it. Exactly. That's why I use the idea that when it doesn't look convincing, when you don't see, you're not able to have confidence in the system, then you let so many things go. And that is bad for our system. But like I said, the biggest fear for me is the fact that you start a process. And I think of this program, I spoke about the injustice of Nigeria's justice system some time ago, where I said, listen, we all talk about the influence of the executive. That's even a lesser devil to what happens in the justice system. Because listen, I spoke about this, the kidnapper, what's his name again? Is it Imau, what's his name? The one that, Evans. Evans, yeah. That was arrested. I said, okay, when this guy was arrested, so many talks came about the crime he committed. People came, all the people he had kidnapped, came out and stopped. They were ready to testify. The case was solid. Within that time, Ipeba was charged to court, was accused of collecting bribe for fixing a match. He was charged. He lost the case. He appealed the case. I think he had the sentence reduced. Between that time, I said George Floyd, case came up. He went to court and came back. Between that time and now, Bill Cosby was sentenced. The thing was tried, his sentence was reviewed. All this has happened. Yet, we are still in courts over Evans's case. And that has nothing to do with executive power influence. This is just the process of the courts. So all the processes of our courts, people's nonchalance, the person who has the carry, the far like we hear and says, you have to pay me this or this is missing and that is missing and that's a loom. Because this problem, because we are fine judges who criminals are scared to get into their chamber, their courts. They know that when they get into their courts, they've lost. We have so many fine judges. Yet, the system prevents and just causes a back and forth. And again, the way our police or our security agencies build cases makes a mockery of a justice system. Because some cases you go and you see in court and you're like, there is no nothing in this that you can use in winning a case. So a lot of things, if you're able to deal with this, then we'll be left with the executive arm of issues. And that will be amongst the big men. But for us as the average person, you can go to court and you know that you have justices when you're fighting one man. They're even, when you see average people on the street, they don't even have confidence in going to court. Even an average magistrate court, they would not attempt it because they feel you wouldn't get it.  And these are the challenges you are faced with. Well, this is a very serious issue. But I will say this first, who be just, he be lamenting on my guest, that's what you want to see, right? When there is justice, Mr. Tulu, who be just he be remedium, right? Please, we're not going to do it, it's politics. I don't want to work. She's describing, you are describing the woman, the woman that is carrying the balance. Yeah, the woman carrying the balance and then the sword. If you are found wanting, she cuts you. She's blindfolded because she's impassioned. Even if it's a child, she will still cut her child if the child is found wanting. So that's why they say when there is justice that is remedied, that is who be just he be remedium. That's what it is. So government should be of laws rather than of men. We watch movies, Nigerian movies, now I want to be specific, how justice are being carried out in the matter of weeks. But in reality, is this who? Is it supposed to be like that? You get to cause a case that will take a year or six months, will be lingering for several years. They keep back and forth. So we lose confidence in the system. There should be a total overhaul of the system. That is one number two. So I remember I had the opportunity of interacting with one law student while I was in university some years back. And then she was telling me that in Nigeria, our system is advisory. Justice system is advisory. Why in the US is investigative? I don't know that you've had something like that. So can we have a clear distinction with the job of the police, another law enforcement agent, and that of the court? But sometimes, I will mention the name of some persons of interest that are currently facing charges now in high courts or supreme courts in Abu Jannu. And you hear cases like people already mahandling them, government agencies, especially the DSS. We mahandle some of these people and almost treat them as though they were criminals as if they don't have any rights on their own. And the judges will be telling DSS, please do it this way. Yeah, they will not listen. So like everybody should know where your power stops and where your jurisdiction stops and respect it. And the other person or the other arm should do what they need to do. Let's make the system work, enough of all these back and forth. It's more like a ridicule now. You know, Tolu, I'd like to just say that why, I mean, it's a very interesting point that you've brought up, right? Why this hasn't really worked, right? Why he hasn't worked is because, and again, the offshoot of this is people are raped and they can't talk about it. People are unlawfully defrauded, battered, assaulted, physically abused.  So on that as rape somebody's moving free and making noise about it and being proud about it. In fact, moved on with his life and the rape victim is just there. So the process, like Kay said, is really so long, right? Again, bringing technology, how do we even really leverage for the legal system to bring justice quicker, faster, asexual, easier, seamless to the people? Anything that stresses us as Nigerians, we want to avoid it. We're tired, we don't want to get it. No, because talk, talk, talk and nothing happens. So that's why, I mean, that's even the history of, you know, let me just run it when there's no need for it because running away is easier than getting justice. Then I'm going through the whole process. And you know what even makes it difficult, which we've all alluded to it, but in a very silent way. Well, let's bring it out to the fore now is that the first line of justice is not the court. It is the security agency. Exactly.  And once you get that wrong, no, it will be difficult to believe in the court system. Well, if we have to talk for the country to be better, please let's keep talking. That is it. That's what we're just going to do. But Tolu, we can go on and on. How do we bring this home?  But I mean, I personally feel very strongly that new breed of people, whether I would like it or not, they're going to emerge. People that in respect, the rule of law, people that care about the rights of citizens who are talking about rights now, talking about the rule of law. What is that? It's very simple. Just means that nobody's above the law. It's really as simple as that. True. You know, and the truth is there's no way in the world where they've gotten right 100% but can see some level of progress. Looks like, you know, never started. Looks like we're still, you know, we're still fitters. We don't even understand where we are. We don't even know where we are. So, at some point, you know, people start making those actions that take us to where we need to go. Okay. Please do stay with us. Elijah is next after the break.