Hi, I'm Brad. I'm at Purdue University. I use the pronouns.  My virtual background shows the Purdue campus. It is my pleasure to talk to you about the lessons learned and strategies we developed for improving the accessibility of biomedical lab environments. I hope this will be instructive for further conversation on promoting the inclusion and active learning experiences for persons with disabilities and stem. Traditional biomedical lab environments or wet labs are pervasive in secondary and post-secondary educational institutions and research centers across the country. They typically have similar features and fixtures, sinks, fume hoods, cabinets, lab benches. And a variety of scientific instruments for different life sciences and engineering disciplines. However, frequently these elements pose significant barriers for students with physical disabilities, preventing them from actively participating in basic lab activities. I like to show this slide that shows us where we've been and kind of help us prepare ourselves to where we'd like to be. In this slide on the left side is a World War II era poster that reads, America needs all of us. And it shows a worker with a hand amputation performing some type of engineering task. This was a reaction to the dearth of workers needed at the time because of the absence of able-bodied workers that joined the war effort. On the right hand side are two pictures of motion studies being conducted by Frank and Lily and Gibreth, both professors at the time at Purdue University. They evaluated the movements of returning soldiers with disabilities performing vocational tasks such as typing. This work began during World War II and continued on until after World War I continued to after World War II. They saw such a large influx of disabled soldiers that were unable to return to the workplace due to inaccessible conditions. There's a quote by them that reads, The injured man must be made to feel that he is not an object of charity, but that he is a handicapped contestant in the world of active people. So they saw this challenge of how to get these young people back to their original lives. The prevailing thought was among really a lot of people in the healthcare in this area was that how do we fix these people to become more normal again. And many of you are from area with the medical and social models that portray the prevailing idea or view of disability. But the Gilberts were big proponents on defining that the problem is not in the person, but in the environment. So how do we make workplace conditions more accessible? We go today and look at the area of STEM inclusion. And we see that there's a same number of students with disabilities or without disabilities that are wanting to enroll in post-secondary education in the sciences and engineering. However, the number of students with disabilities that actually and ultimately get a career in STEM is quite low. The attrition rate is very severe of students with disabilities going and getting a degree, a doctorate, a master's in STEM, which are important to become a scientist or engineer or physician. So this is the problem that we decided to look at an initiative called the Institute for Accessible Science, or IAS, which was established through the NIH Director's Pathfinder Award. We wish to facilitate the practical or hands-on lab activities, which we found to be a major barrier to the ultimate success of students in post-secondary and advanced graduate degrees pursuing STEM. One of the reasons is activity-based learning is critical to STEM pedagogy. And we found that students with physical disabilities often stayed away from lab-based undergraduate courses due to their perceived and real barriers. And then upon reaching graduate school, there is a need for conducting independent research that is also daunting to those with disabilities. So we focused on how to promote their accessibility, not to do away with practical education and independent research, because research is very dependent on the technologies that you use, the scientific equipment. Understanding how that equipment works and their limitations is very important in designing experiments for research. So we first wanted to look at the lab environment, the architectural access. We were lucky to have access to a state of an art wet lab that we could investigate. In this facility, we found that in the periphery of the lab was the stationary fixtures, the fume hoods, the sinks, the cabinets. And then the metal center of the lab were mobile lab benches that could be reconfigured according to how many students were taking to the class or to accommodate those students with disabilities that needed more space. In addition, these lab benches were height adjustable so that you could accommodate wheelchair users, those wanting to stand, those seated on stools. In terms of performing activities, lab tasks within this environment, we decided to look at three stations, the lab bench, the fume hood, and the sink. And you see all these are wheelchair accessible. Using the idea of the kitchen work triangle, again proposed by Lillian Gilbreth. And if you're not familiar with that, that's the idea of for maximum efficiency in the kitchen. Think about the proximity of the kitchen sink, the refrigerator and the stove top. But instead in the lab, we look at the sink fume hood and lab bench as being three crucial areas that students with any disability or without disabilities need to navigate. If they're two clustered together, it causes a lot of congestion. It's too far apart, cause a lot of wasted energy, also very inefficient. So the different sides of the triangle show an optimal position distance of these three areas. For students with disabilities, especially those with visual or mobility impairments, being able to navigate that without really having to worry about running to other students without expanding a lot of energy really increased their efficiency. Another aspect of the wet lab environment was looking at lab safety. Of course that's an important part.  You can see here in the left image. But we had to extend them out from the waterline, because it didn't allow for the near the clearance of wheelchair users. We also added another pole for the emergency shower, because the other one was too high and could be reached from someone sitting in a wheelchair. Other tips that we found was using motion activated containers for receptacles for sharps disposal for waste for soap and paper, paper dispensers. This allows it to be very accessible, because it's hands free, does not require fine motor skills, and also decreases overall contamination among different users. The lot of the solutions that we found that makes the lab accessible for people with disabilities, really this makes good common sense and improves efficiency for all users. Last I'll be talking about lab instruments. Every physical, every wet lab has an array of different lab instruments. Some more sophisticated than others. A basic tool of most biomedical labs is the microscope in a project called access scope. We automated a research level microscope, so it could be completely operable through a computer interface that could be adapted easily according to one's disability. We had those with upper limb mobility impairments who had difficulty hitting all the buttons, turning all the knobs of a microscope, as well as incorporating an automatic slide loader. So they didn't have to put the glass slides on the stage. It could be done through this robotic platform. We found this system to be very useful for those with low vision by bypassing the eyepieces and allowing them to use a large monitor to view a microscope specimens. But not all accommodations for instruments need to be high tech. We had a study where we helped a veterinary technology student who had low vision. We were able to use many off the shelf solutions for histology and cytology. We used a microscope, this is a student microscope, with a video camera and a laptop specimens. For near viewing, such as through for dentistry and gross anatomy, she used an illuminated head loop, typically worn by surgeons. And for long distance viewing, she used a monocular that could be used to observe such things as the gate of running horses to check for lameness. So a lot of these solutions didn't take a lot of money or high tech problem solving, but just the ingenuity and be able to put your place in the person that needed help. One more area that we're currently looking at is incorporating more lab robotics. These robots can be used for not only high end scientific procedures, but also for more mundane lab tasks, such as a mobile robot for conveying specimens from one location to the next, without worrying about spelling it or dropping them. Or using a robotic arm for manipulating glassware for pouring solutions from one container to the next. The issues that we found to be most difficult when using operating robots so was needing to use different ways of interaction. No contact operation using speech and gesture recognition was found to be very helpful. Also getting feedback from these robots is very important. Instead of relying solely on visual inspection, you can get auditory or haptic or temperature feedback of objects you're manipulating. I want to briefly talk about some other barriers to inclusion and stem that we found was that students have been shown to really benefit from science or stem internships. But many students with disabilities, such as those with difficulty with self care cannot simply go to another state during the summer for an eight week internship. Sometimes that is not practical or feasible. So how do we provide these internships to students with disabilities and making sure they have the accommodations that they need to be successful current supplemental support to accommodate students through NSF NIH and other agencies. In a survey of Purdue researchers, we found that most were willing to provide some level of accommodations, many more were willing but needed assistance. And just a few felt that accommodations were too difficult and why bother since they already have access to qualified students without disabilities. So where supplemental support for accommodating a student in the lab is very helpful in retaining them. It doesn't do a lot with recruiting students in the futures. Because this supplemental support is dependent on the advisor to already have an existing an award. So they can anticipate on the next order come, or if the length of an award, which could be two or three or four years is long enough to support that student with the disability. We find that most students with disabilities do need extra time in their programs doing research. And that also can be a problem with their success. So the basic factors, such as working with a professor that is non-tenured means that that professor has to come up with funding they may not have yet, putting out a lot of publications in a quick time frame. Simply having a tenured advisor with consistent funding and having a lab with other staff and students to support the student with disability can dramatically increase their success. Include these factors that are really important to overall inclusion of students with disabilities in STEM. Since the pandemic, we have found a renewed interest in doing providing virtual training using virtual reality. We also looked at this, and on the left you see a video, someone using a typical VR headset. And on the right, the exact replica of the wet lab I was just discussing previously. But in this case, they are able to perform a lab task that is annotated and giving views, take the specimen there. And this allows them to understand the lab procedure prior to going or visiting the lab. Also it shows here a wheelchair navigating within that work triangle of the fume hood and lambage and sink. And so it allows them to see what are the space restrictions they may face. The importance of this is that too often when you go into a lab, you're faced with how do I get accommodated? How do I know I'm not going to hit something, break something? And they cannot focus on really the science of what they're supposed to be doing in that lab. So VR gives them that preparation. Another benefit of 3D modeling is that it can also allow other people without disabilities to get a perspective of what someone with a disability is viewing in the lab. In the left-hand top left is a picture showing a wheelchair user at a lab bench. Wheelchair users are faced with the inability to laterally move side to side. So if something is on the lab bench that is beyond the reach, they have to back up the wheelchair, pivot, reposition the wheelchair. Doing that several times can be very inefficient and tiresome. Likewise, there's another picture that shows a tunnel vision view of someone with visual impairments and what they see the lab. Scanning the lab, seeing all the different areas is very difficult for them, although they can focus on one area. Anything outside their field of view they cannot see. So when they're doing a lab task, they may be able to use their vision, but getting objects outside their field of view, they rely on the fact that some objects are going to be where they put them. That they're not going to move, that they're not going to change. So they can focus on the lab procedure while reaching for the different objects they need to perform that lab task. Last, I just want to mention that we also incorporated ergonomic analysis in this 3D simulation. So that even though something is accessible, perhaps using ADA guidelines, if someone is at the 95th percentile, they also face issues of male, musculoskeletal strain, especially doing repetitive motions such as pipetting, that is very common in lab environments.  Whereas height adjustable lab benches really benefit. So let me just conclude that STEM does need all of us. But I don't see it as simply as an issue of wasted resources, of not using people with disabilities, or equity of not having a deserve a place that is important. But it's also a missed opportunity not to engage people with disabilities in STEM, because they have unique perspectives that they can offer. People with disabilities have a special insight in medical conditions and healthcare that those without disabilities frequently don't have. Likewise, currently how we interact with technology and view the world is very visual centric and rely upon manual manipulation. People with disabilities can view and interact with the world on a very different level, which affords us great possibilities in research in the future. So thank you for this opportunity to share what we found. I'm very grateful to the National Academies of Science, Engineering and Medicine for this opportunity. I provided some contact information. Feel free to reach out to me. And I look forward to furthering this conversation during the series. Thank you.


Yeah I mean I was just ready to ready to go. I wouldn't I wouldn't say I was a little nervous but I just wanted to be out here you know practice so the coaches you know what I can do you know and it was a fun day so a little bit of everything you know can't say too much but he was working this though what do you want to kind of show what kind of impression you're gonna make maybe on coaches teammates right at the start what kind of impression you'll make maybe on coaches teammates maybe right at the start here you say a pressure what kind of impression oh just just you know letting guys know that I can I can play you know I know my stuff and and I'm gonna help them help them win so information today or did you put you're on top of it okay now I wouldn't say there was a lot of information I feel like I was on top of most of it so issues perhaps with that what was it like for you it was definitely different you know from I'm coming from Michigan so it was I mean it felt nice you know it was hot but it felt nice out here so I can't complain I am most definitely you know we put big 10 on the map a little bit you know so I'm glad to see them I heard with me and I get to play with them so Has Coach Brable given you a hard time at all about the big game? Yeah a little bit a little bit we've been going back and forth but it's all love How much have you followed Derek Henry's career and have people drawn any comparisons to you of you know taller guys bigger guys I mean I really don't be paying attention to all that you know obviously he'd be doing this thing you know I haven't met him yet but I heard all great things so I can't wait to meet him What do you think of the way Malik handled himself in the huddle and translated things given it's his first time you know we all getting better out here you know Malik is a great player you know so we just all learning getting getting getting our feet wet so he did a pretty good job


Hello, everyone, and welcome to the STM32-L5 Hands-On Virtual TruzZone Activation Webinar. Wow, that's a mouthful. My name is Bob Waskiewicz, and I'm a staff field applications engineer with ST Microelectronics. I've been doing STM32 embedded design support for the past 15 years. Recently I've had the opportunity to champion the release of the STM32-L5 within the United States and gotten very familiar with the TruzZone. Who would have thunk it? A virtual hands-on webinar in these crazy times which we are all experiencing. I guess this is par for the course. This original webinar was released in May of 2020 as a continuous two-hour webinar. It is being re-released as a nine-part series of videos for the ease of following the material. The nine-part series consists of four lectures and five hands-on, which demonstrate the ease of using and activating the TruzZone in an STM32-L5 device. The nine videos vary in length from 10 minutes to a maximum of approximately 15 minutes. The structure of the series is such that each of the lectures is followed by a hands-on, which further emphasizes the principles described in the previous lecture. In part one, we introduced the STM32 current family isolation features, which do not contain the TruzZone. There are some pretty good physical features, but we then introduced the STM32-L5 and the ARM Cortex M33, which houses the TruzZone. Part two is then a hands-on introducing the user to the STM32-L5 nuclear board. We use a blinky example and the colored LEDs on the device to introduce the user to some programming tools and some different features of the nuclear board with the TruzZone disabled. Part three is then a little deeper dive into the ARM Cortex M33 core, which is housing the TruzZone and the specific features within the M33 that allow you to have a TruzZone. Hands-on number two, which is part four, then actually activates the STM32-L5 TruzZone with a singly secure application. Part five will then introduce the TruzZone as from a practical user application of where you have a secure zone and you also have a non-secure zone. The part six video will install the non-secure blinky application into the previously installed secure blinky application. So once the secure has started, it'll jump to the non-secure. You'll notice the difference in the flash rate of the LEDs, so you know you have two separate type applications running. Part seven will then show the user how to configure the secure and the non-secure project for debugging to be able to go back and forth under a single IDE workspace. In the case of the TruzZone, it's not a dual core type of debugging environment. It's a single core with protections going back and forth, and we'll show you how to configure that. Part eight then gets into additional flash features, which supplement the TruzZone to make the device safer, more secure. We'll also get into faults, how they're handled, and then we'll get into the TruzZone deactivation. How do you revert back in case you want to change the debugging that you're doing? And then hands-on number four, which will be part number nine, will actually go through the deactivation and the two methods to revert the TruzZone-enabled bit. What do you need to perform the next four hands-ons? Well, you need the nuclear board, which you should have received, along with the type B cable and the type C cable. So also I just found out that all 100 boards that we had sent to Digikey have been given out, so that's good news. The CUBE Programmer runs under Windows 10, so you should have that CUBE Programmer version 2.3 already installed. In the download file there was some subfolders. There was a doc folder, has the user manual for the CUBE Programmer and the nuclear board. There was also a subfolder for the hex files, and we'll use those hex files one, two, three over the next two hours for the hands-on. And then, of course, this PPT presentation. We'll make a suggestion if you haven't done so yet. If you don't have dual monitors where you can look at what's going on and what you need to do, you just split your monitors somehow screen-wise and have the session up on one and maybe doing the hands-on side-by-side or something like that. As I tried to develop this, it's hard to do on one monitor, or it's impossible to do on one monitor. I want to start by discussing some STM32 isolation mechanisms. I don't mean social distancing that we're all currently experiencing. As we go through the slide deck, you'll see a color code sequence. Green representing secure, pink representing non-secure functions. Why build a device with a trust zone in it? The underlying assumption? There's something in the device that needs to be protected. Those protections didn't just start today. From day one, since code has been put into micros, there's been certain things that need to be protected. In the past, ST has built STM32s with other physical features, and I'll discuss those in the next few slides. If this were a security seminar, I'd be discussing the three prevalent types of attacks in today's world on MCUs or MPUs. Those three types being a physical attack on a chip, a board layer attack to an assembly, or a remote hack through a port into the device. Believe it or not, 95% of the hacks today are through remote ports into devices. The STM32L5 with the trust zone cannot protect against physical attacks. That's not the intent. Those are secure micro devices. ST is a leader in those. We have our ST safe products. We have our TPM products. We have our secure micro products that are in credit cards throughout the world. The STM32L5 was built to protect against remote hacks. By enabling the trust zone. So when the device boots, it's going to authenticate itself, check things out, make sure you are who you are. It will then call or not call a user project. The project could all be secure, or just the portion of it that authenticate itself is secure. That's what the STM32L5 was designed for. ST Microelectronics released its first STM32 device back in 2006. It was the STM32F1 family. That family was based upon the Cortex M3 core, which had the option for an MPU. ST has included the MPU in all of its Cortex devices that has an MPU. There is one family, the F0 family, which is built upon the Cortex M0, which does not contain an MPU. Memory Protection Unit is a physical protection feature. It allows you to define access rights based on a memory map. And SRAM, flash, and peripherals all can have different access rights. A couple constraints. One, the MPU needs to be configured in Privilege mode only, and the handlers are always in Privilege mode. So that means that everything is assumed to be trusted if you're going to use interrupts. Second drawback is that the STM32 family's, a lot of micros today are built on DMA. The DMA masters out on the AHB bus are not constrained by the MPU. So one common attack internal would be to configure a DMA to read from flash or SRAM and dump it maybe out to a physical port, to a UART or so. So there's limitations as far as what the MPU can do. However, it's better than not having an MPU at all. In 2010, don't quote me, maybe it was 2011, ST Release, the STM32L0, which was based on the Cortex M0 plus core. And then a couple years later, 2015, I think, the STM32L4 based on the Cortex M4 core was released. The Cortex cores themselves did not have a firewall. ST developed a piece of IP called the firewall, which is a physical hardware snooping of the transactions out on the AHB bus between SRAM and flash. So you allocate a section of flash, you do a start and stop address, you allocate a section of SRAM, start and stop, and you put your proprietary code, your keys behind there. And if there's any intrusion into that firewall, a reset is generated automatically. The improvement of the firewall actually protected against that DMA hack because, yes, it was based on the AHB memory map. And if the DMA was trying to access, quote, that physical region of flash or SRAM, it would generate a reset. The drawback of the firewall, my opinion, and others concur, you can't, processing of interrupts when you're behind the firewall has to stop, so you have to disable interrupts.  So the firewall can then also coexist with the memory protection unit because things outside the firewall are then protected by the MPU. So securing peripherals is not possible by the firewall because it's only protecting a region, but the MPU can secure peripherals. Around 2018, ST released the STM32G0 family and the G4. He's had a new physical security feature called Hide Memory. The Hide Memory was also added to the STM32H7 release in 2019. The Hide Memory allows you to allocate a section of flash, runs only at reset, authenticates the device, then jumps to the user application. So it's called once, never again entered until a reset occurs. These devices also had the MPU on them, so you could still do some physical memory map protections as well, but they don't have the firewall. So in January of 2020, we officially released the STM32L5, was the first ST device with the Cortex M33 core in it. The L5 contains an MPU, the trust zone is a much better firewall, and it also has Hide Memory in it as well. And over the next hour, 50 minutes, we're going to discuss the trust zone. What makes up an STM32L5? For those who have not seen or used an STM32 device previously, this is what one looks like. The dark blue is what we get from ARM, basically the Cortex M33 with the trust zone, with the floating point unit, with the memory protection unit, with the external trace module. These are all optional IPs. We add them to the L5. And then the light blue stuff is what ST does. So we add our own DMA controllers, the flash, the SRAM, the connectivity, encryption, analog, IOS, time, redigital, parallel interfaces, that's all the STIP that we add to this, so that's unique to us. The light blue to the L5 is the instruction cache, which allows this thing to run pretty good at 110 MHz. We also added the OctoSpy interface, which can do on-the-fly decryption, zero weight states, reading from external NOR SPI flash. It's got a public key accelerator that's very quick as well. The new feature for security on this device as well is that dynamic tamper. Previously, all of our devices had static tamper, ground or VDD for a switch closer. This is now PWM out and a capture back in. So you can run a frequency much harder to jumper around. Cortex M33 from ARM. The M33 has always been a large user of ARM cores predating the Cortex M. Starting in 2006, we released our first Cortex M3 core, which was the F1 family. Since then, we've used the M0, the M0 plus core, the M3 as well as the M4 core, the M7 core. In January of 2020, we released the STM32L5, which was our first Cortex M33 core. In the ARM Cortex Trust Zone series, there's the M23 core and the M33 core. ST is only using the M33 core. So in the L5, that's what you have. It's a higher performing core, more interrupts. We've got the DSP option as the floating point option, which we do include more break points. So this is in the L5, and you'll see that in additional devices being released in the future. Thank you for taking the time to view part one of the nine videos. I encourage you to continue with part two, which will introduce the STM32L5 nuclear board. Use later for the non-secure and the secure applications. Also, take note of this YouTube comments. The site, the link to where the hex files can be obtained for hands-ons number one, two, and three will be listed.


My name is Diana Mechley. I am an instructor slash professor at Niagara College in the Allied Health Program for the pharmacy program specifically. I teach second year students primarily in sterile prep, in hospital labs, and computer labs. Pharmacy entails the retail side, our community pharmacy, and also hospital pharmacy. So we do incorporate both. Our students are really fortunate. We have a great facility here. We have a community pharmacy setup where students can role play that they are actually working in a community pharmacy, where they're dispensing, compounding, doing billing, actually entering into the computer, counting the medications that are required, and then we have a whole other lab that is set up for hospital pharmacy, which is different in community where we have more IVs. So we have a hospital lab where the students are filling 24-hour unit dose cassettes that is mainly used in hospitals these days, that type of delivery system. And then we also have a sterile preparation lab where the students are getting hands-on experience with IV medication. We have the National Association of Pharmacy Regulatory Authorities, which actually sets competencies and standards of practice for pharmacy tax. So pharmacy technician is a profession. It is a healthcare profession. We are regulated. We join about 25 other healthcare professions that are self-regulating. So we have competencies and standards that every course in college across Canada has to fulfill. So we're very lucky that we can build our program around these competencies and standards. There will be written tests, and a lot of it is the hands-on. So if they're entering prescriptions, they'll be marked for their accuracy of all the fundamentals that they have to get correct. The patient, the doctor, the drug itself, the quantity, the day supply. So they are marked on what they're inputting and of course their understanding of the prescription because that's what they have to input. For the sterile prep, we are marking them on their actual skills that we build on from day one. We start off with maybe just getting them used to handling syringes and needles and the different sizes and the selection that they would take. And then we build upon that and there's four skills altogether that they have to do. The first one would be the aseptic garbing and hand washing because there's a specific way they have to wash and dress before they go into the clean room to actually prepare sterile products. And then there's removing fluid from an ampule, then from a vial and then reconstituting a powder that's in a vial and removing that, injecting into the bag. So we're building every week on their skills and every skill set they're tested on along the way. And then at the end it's a cumulative test where they have to do everything from the hand wash to the garbing and all of the skills that they have learned. Our students do have to go two month placement at the end of their two years. One month in a community pharmacy, one month in a hospital. So we're really proud that we send them out really well equipped because they've been working for months in the life life setting, doing the actual skills that they will be having to do when they go out on placement and hopefully get a job. So they kind of hit the ground running. There's a company that provides everything like for the sterile prep. There's a company that provides it so it's in ampules, it's in vials. We get the mock label so it's a practically amp on it and it's only water inside. But the needles and syringes absolutely are real life. We order from the same distributor that supplies hospitals. And for the actual drug side we use tic-tacs and candies and things. And we do have actually a Pac-Med machine which is a machine that actually provides unit dose of every medication which is very common right now in the hospitals so that every pill is individually packaged and labeled and the nurse dispenses a 24-hour supply. So the hospitals have a very large computerized system but we do have the miniature version which is exactly like what they have in the hospitals. So that is real from the manufacturer or the distributor that provides the same equipment to hospitals. We provide our students with simulated prescriptions but they're all the same what they would find in the real life situation. We like to get, there's a list every year. The Ministry of Health will provide a list of the most common prescribed medications. So we like the students to build on that because when they do go out into the workforce we want them to be familiar with all the more common drugs. So we will give them prescriptions, they will have case scenarios that they work on that we will enact so that there's a teacher and a technologist in every lab. And oftentimes one of us will be in the office, we will be calling the students when they're in the community pharmacy, we'll pretend we're a doctor's office or a patient calling in. The other technologist or instructor will actually be bringing prescriptions up to the counter they're actually filling and they have to problem solve, they have to manage their workflow, they have to work as a team, we don't let them pick their own teams because we find students will form their little groups so we don't want them kind of in their comfort zone because when they are, we try to get them their hard skills the skills that they actually need for the trade but we also want them to practice their soft skills because that's the feedback that we're getting from our placement partners that they really need good team players, they need students that can converse with the customers so communication is a big deal also. So we do a lot of group activities with them and we get them out of their comfort zone, we'll select their groups and we'll try to see how they work together and we will emphasize that that is part of the real life experience you don't get to pick your co-workers and you just have to learn to get along some have weaknesses, some have strengths and you just all have to kind of pull together because as a healthcare worker the primary concern is the patient so they have to know that it's not them or their co-worker it's about the person on the other side of the counter or in the hospital bed that you have to think about


All right. Hey, friends, hey, hey. Lower your expectations now. If I get any of this to compile, I'm going to consider that a personal success. If it works and everything works as it's supposed to, then that'll be a miracle. So just expect nothing, and you will not be disappointed, because I have no idea what I'm doing, which is fine. Also, a little advertisement. I have a podcast. I've had one for 13 years. It's a non-denominational podcast. I have all kinds of cool open source people. I've had over 600 episodes of it. It's only 30 minutes long. Check it out. It's a good show. I work here, but I don't actually work in Seattle. I work in Portland, which is kind of like the forest moon outside the tractor beam and the reality distortion field. I originally worked in open source outside of Microsoft, and for many years did open source 10 years ago. And I went to Microsoft explicitly to open source everything or be fired for open sourcing everything. So if I've been fired, it either means I've made a mistake and been fired, or I open sourced something I wasn't supposed to and I've been fired, or it's all open and I have nothing to do. When I went there, people said I was a sell out, though, because I was in open source, and then I went to Microsoft, and it really hurt my feelings. I didn't really know how to feel about that, but somehow I was able to work through those feelings because this is me before Microsoft. This is me after Microsoft. It's been quite a ride. Now, you know that we open source.net. You may have heard about this, that we open source.net. Did you know that we open source.net almost 20 years ago? And we did a shitty job of it. We actually just zipped it up, took all the good stuff out of it, and put in a problematic license, and we said, hey, we open source.net. Look, don't touch it, just look. Look at the .net. But a couple of things didn't exist when we did that. What didn't exist? Git, the social web, a large choice of licenses, lots of problems, the organizational will power, not being pure evil. These are all things that we needed to work through in order to make successful open sourcing of .net happen. We actually did this, and we called it rotor, and it was basically a read-only drop of .net, and it caused things like Mono to be made because it was a minefield that we didn't want people to go into. And I went there in about 2008, and we created ASP.net MVC, the Model View Controller version of ASP.net. I wanted to call it .net on nails, but I was told not to. It would have been a way better name. And as we open sourced more and more and more stuff, we slowly trained the legal department at Microsoft to say yes by default instead of no by default. Now we actually have to have meetings to talk about why not to open source stuff. We have to convince people, hey, I really shouldn't open source that. But why? Is it got a secret patent? Well, no, it's just shitty code and no one should ever see it. But everything's open by default. And what's great is that the stack that I work on is open source all the way to the metal. And I'm gonna talk about what that means, what the metal means in that context and what it means to take something open source all the way down. Right now about 60% of the contributions to the core framework are outside of Microsoft with the Googles and the Samsung's and people like you bringing that code in. So more people work on .net outside than work on it inside, which is really exciting. Now this is a diagram with some bombs that Microsoft have dropped on various countries that marketing told me to put in. These are contributions to .net in 2015, 2016. And then in 2018, .net finally destroyed New Zealand, which has been my secret goal. And the other exciting thing about this chart is the people that are actually contributing to the .net source code from boats. Actually on a boat moving this way, this is either a boat or zero comma zero. I'm not sure. It's possible it could be zero comma zero. Actually my data could be all bad. Now there's, we say .net, .net, .net, like it's this word, it's this marketing term that Microsoft has used for so many years. But how dare Microsoft take over a top level domain? Like what if we called it .org? You think anyone would have allowed that? Who would have the audacity to name something .net? It's so offensive that they would just do that. It would be like as if you took like an editor and just called it code, right? We, modern Microsoft would never do that because it would be too audacious. .net now is not a thing that you can touch and point to on the disk and say, look, that's where we installed .net. In the past it used to be C colon, backslash, windows, backslash, Microsoft, da, da, da, da, da, da. And you would be afraid of it. People live in fear of .net because it moved slow, it became part of windows and updating it was problematic. You'd have to go and reboot the machine. And you'd have situations where somebody would be on .net four and they've got a great app and it runs their business and they just don't wanna touch it.  And then someone else would come out and say, I'm gonna build my app in the new .net 4.8. It's gonna be great. They get the application working and then they wanna update the server and the people who own the server are afraid. They don't wanna bother, it works. Can we just not anger it? And then that person then gets angry, quits the company, becomes a node developer and then they're lost inside of node modules and we never hear from them again. What we need is a .net that can be side by side, that can be flexible, can have self-contained installations. We need multiple .nets. We need plural .nets. So Microsoft made the .net framework, which is on Windows and then .net core, which was originally planned for cross-platform services. Now, all the while, because of problematic licensing and patenting and stuff, Miguel and friends decide to make a clean room re-implementation of .net. Clean room re-implementation. Clean room means they can't look at the source and re-implementation means that one day Miguel and friends went file new project. It was totally in a clean room. I assume they had no pants on and they were just on a non-networked machine and they said file a new project. How did they do that though? They knew what .net looked like, but they couldn't look at the code. So they looked at the shape of it. Like if I asked you to write system.string again, I would say make me a string. It has to work exactly like system.string. It has .contains and .length and .toot. You know, all the things strings do but just don't look at the code. He would write string and it would probably work the same as my string. And then I would say, okay, do the same of that for the rest of .net. And you'd have your own system.file, io.file. You'd have your own system.text.regularexpressions.  All of it in a clean room without looking at any of the bits of .net that were problematic from a licensed perspective. And why did Miguel and friends do that? I guess Miguel, you wanted to make a mail application and they were like, we're gonna make a mail app. It's gonna compete with the best mail apps but before we do that, let's write .net over from scratch. It'll be fine. It's amazing. And it turns out you did it and it was nice and then we bought you and now there's three .nets.   Clearly there can be only one. It's like the Highlander. There's only one .net allowed. Except people forget that there's innovation that happens at different times and different ways across the .nets. .net full framework on Windows has cool things happening in the jitter and garbage collection space. Some really neat computer science happening around 64-bit jitters that use specific new processor instructions. There's speed improvements inside of .net core with span of T and some of the new memory improvements. There's amazing stuff happening on mono with ahead-of-time compilation with tree trimming. It's all really just one family of .nets and there's no reason that we can't cross-pollinate because now they all have reasonable licenses. We can actually refactor via subtraction and we can have these things work together as opposed to fighting with each other. So I could theoretically go out to the command line here and I could go to, do-do-do, Scott, desktop, make a folder. That's not a right folder. I don't know what that folder is. I don't know what's, there we go. Hang on, go away. Do-do-do. Yeah, see one of the things that's hard about coding in front of a whole bunch of people is you're looking at me. If you would just look away, that would be great. I type 100 words a minute, but 90 is backspace. So that folder is empty right now. So I'm gonna say .net new and I'm gonna see all the different .nets that I could potentially do. I could make console apps and tests and all kinds of fun stuff. I'm gonna go and I'm gonna say dir .net new console dash o we'll call it FOSDEM con. Okay, and I'm gonna go like this. I'm gonna go into FOSDEM con. I see that I've got some code. I'm gonna say .net run, one one thousand, two one thousand, three one thousand, four one thousand.  Microsoft with a dollar sign. That took five seconds, bleh. And then you immediately go and do some other thing, right? That says, and then you're also like, that says low world, not hello world. It actually says hello world, it's just cut off on the screen there. Okay, that took too long, right? One one thousand, two one thousand, that's too bad. But in fact, what was going on when I said .net build and .net run, I was building this DLL right here. And if I wanted to say .net that DLL, it in fact runs really fast, right? .net run implies restore and build and all the checking, that net run is an SDK thing. .net runs that DLL really really fast. And now I can do some official benchmarking and I can prove that that scales, right? Now I can then put that in a container in Kubernetes and I can do it a cloud scale, containerized hello world, right? Awesome. What's interesting though is what if I went out to, let's see if I did this, what if I went to mono? We'll give mono a tiny font and then zoom in. And then I go to the desktop, to Faw's Demcon and I say mono that DLL. That's the LL part of DLL and that worked. Mono doesn't know about .net core. How is that possible, right? Well, it's because it's using IL. So if I go and open up a developer command prompt and I run ill-dasm, the IL disassembler and then title of my mixed tape ill-dasm and I can say file open. I'm gonna open up that DLL right here and we're gonna say hey Faw's Demcon, zoom, zoom, zoom, zoom. Someone actually drew that icon in the late 80s and they did not know it would be this big on the screen. And then I can see this here. I can see the IL. Now IL is a really interesting thing because effectively C-sharp is apples. IL is applesauce and it then turns into apple juice. This is the applesauce stage of our software. The really interesting part is that I can also take oranges like Visual Basic or cumquats like F-sharp and they also turn into applesauce. That's a whole other talk. What's interesting about it though is that we've got no op, load a string into the stack, call system.console.rightline then no op and then red. And then that's it. There's nothing in there that says Windows. There's nothing in there that says anything. We don't even know where this came from. Additionally, it's calling system.console but we don't really think about who's system.console. It depends on which framework you ran it in. Whether you ran it in Monos and then they ran system.console or whether you ran it in Windows or whether you ran it in the cross-platform.net. And this is a thing that probably not people at Fozdem but people outside forget about is at some point somebody has to call the syscall. Windows ultimately has to do that work or Linux has to do that work or the container has a syscall that is gonna do that work. Somebody's gotta do that work. We forget what's underneath. We're so used to driving self-driving cars that we forget about how stick shifts work and manual shift cars work. And when we remember that, a lot of power happens. In this case, Monos system.console works just great. Works exactly like .net cores. .net core didn't work just fine and it went and it ran no problem. So now I can go back over here. Let's go back up one layer. Here's Fozdemcon and we'll go and say .net new class. Did you say class lib or do you say class lib? Lib or lib? Is it a lib? Do you get books at the library? I'm just saying. I'm just saying. I'm gonna call it lib and I don't care. But you never know, right? It's Europe. We get the books at the library. I'm gonna go here into class one and we'll call it greeting and we'll say public. This is not an IDE and it's not Vim. If I ran it in Vim, I'd have to reboot Windows to get out because I don't know how to get out of Vim. Okay, magical. All right, now Fozdemcon, let's go down in there. That one's gonna go and use Fozdemlib. I'm gonna say var because it's better and I'm gonna say greeting.hello and then we'll go and we'll say are and then this will fail because it's never heard of that before. So then I'm gonna go and I'm gonna do the command line equivalent of right click, add reference to that previous project.net, add reference up to there and then into here and then I'll go and run that and then it says, oh, this file's open. It's because it's open over here. Close that and then it worked, okay? No, I don't want your pity applause. If I'm gonna get it, I gotta earn it. Okay, so just be like, okay, that's fine.  Good job, Microsoft guy. We here at the Fozdem appreciate a little bit more effort in our demos. Fine, what if I then went out to, let's go.net new slash o, not a new razor slash o. Fozdemweb, okay, and then we'll go down in there and then I'll hit that and we'll run code and that's yummy and then we're gonna go in here and let's try using Fozdemweb, doesn't feel right. I'm gonna say h1 and we'll say at greeting.hello, hello. Got net run. Then I will open up competitive browser and one of the fun things I'm doing with competitive browser is that I have this thing called Bing new tab. It's really great because when you open a new tab in Chrome you get Bing, but then when you search for something it uses Google and that, and what's nice about that is it allows you to have the really nice Bing home screen and then also find things on the internet, which is really fun, so. Now I just wanna point out that in just a few minutes I've gone and made a cross-platform DLL and had it running the exact same DLL shared inside of Mono, Windows, Linux, the web, but you clapped for a Bing joke, so just kinda letting you know that it's a little disappointing. So in this case here, that DLL is interesting. We've been taking that lib at live and we've been doing stuff with it all over the place, so let's go and say Fozdemweb and we'll go and say look at that CS Proj and that's cool, what's going on there? It doesn't say Mono, it doesn't say .NET, it doesn't say Windows, it says .NET Standard. .NET Standard is an agreement, it's an API level agreement, it's like Android API levels. With Android you say I don't wanna support that weird phone I've never heard of, I support Android API level 14 and that will allow me to support all of these weird Android phones and then if I support Android level 16 some of the weird cheap phones fall out and some of the new shiny phones work, you decide how many APIs you need, you pick the lowest common denominator and it allows you to target as many things as possible. The .NET Standard works the same way. You go and you say hey, I learned how to do system.io.file and I did that in the web for years and now I wanna work in containers or I wanna work in the cloud or I wanna work on an iPhone, I wanna work on Android, you expect system.io.file to work. So the .NET Standard is a contract, it's an agreement that works everywhere and then anyone can go and do that. You could go and you could take .NET, fork it, search and replace all the namespaces, call it scott.net and distribute it and it would work and it would be .NET Standard compliant. You could write your own .NET from scratch and give it that compliance and as long as you can run .NET Standard DLLs, it'll work. If I were to put that in a frame, am I having a stroke? No? Is that me? It's not me. You ever have that sense where something's beeping? It's like, is it my computer? It's not, fine, okay. So in this case, as long as the .NET Standard is implemented, you could put it on any device at all that is written with .NET Standard. So in this case, I put that DLL on a bunch of different places but if any of you saw, Michaela's excellent talk about WebAssembly, WebAssembly becomes really, really interesting. So I'm here in Ubuntu on Windows because Windows runs Ubuntu and OpenSusa and all kinds of great stuff. And by the way, to be clear, it is pronounced Ubuntu, period, not Ubuntu. Don't ever say that. The reason I know that is my wife is a Zulu. It's a Zulu word and Ubuntu is the correct way to pronounce it. True story, person at work, I won't say his name, told me it was pronounced Ubuntu. I showed him a picture and a video of Nelson Mandela explaining the meaning of the word Ubuntu. And even after seeing the videos, I don't believe it, fake news. So anyone you know says Ubuntu, smack them. Now, here is hello.c. So there's a C application and Michaela talked about how you could potentially go and take that. Actually, it works better if you see the whole words. There you go. The C application says hello world to the console. We can go and GCC that. Make sure you run GCC. It works great. And then I could go and compile that with M-scriptum for safety's and speed's sake, I won't do it. I've already done it. And I've gone and compiled that into the applesauce of the internet, which is WebAssembly. It's that middle place. And WebAssembly doesn't care what got compiled to WebAssembly. It just cares that it's applesauce. If you made it out of oranges, it doesn't matter. So I need to go and run that hello.html. So I need a tiny web server. I'm just gonna say .NET serve. This is gonna make a tiny web server. Port 8080.  And there's that. Hello.html. So now I'm running that C application there. That's cool. Now, what's interesting though is when Microsoft was making a cross-platform.net, they were using Visual Studio and the Visual Studio build system and some C and C++ isms. That doesn't make it super portable. It's portable. It's just not super portable. However, when Miguel and friends were making mono, they were like, hey, get clone, app get build essentials, configure, make, wow. Really nice clean portable C code. What is really nice portable C code good at doing? Being portable. You could go and compile it on a Nintendo Wii. Like that's why other technologies use it. That's why mono's so great is that places mono wasn't expected, mono shows up. Mono's just like that friend.  What if you compiled that create wonderful C code into something like WebAssembly? So what if I went back up here and I said.net new blazer-o-fos-dem-blaze? Go and run that and then we'll go into Fos-dem-blaze. And then I'm gonna go and say, add a reference to that live. Now I'll run code. And this looks like I'm back in another one of those web applications like I was before. And I'm gonna say using Fos-dem-live. And I'm gonna say H2. And I'm gonna say, hey H2. Greeting God, hello, hello. Now that was a Dutch hello, hello. And then I'm gonna go out here and I'm gonna say.net run and I'm gonna wonder if something else is on that port already. Pause for effect. Thinking about shutting other things down that might be on port 5000. There's not. Port 5000's my favorite port. Boop, okay. This DLL shows up in another web app, yay. Hit F12, hit F12 again because the F key is always in the wrong position. Much like a USB port, you only ever get the F lock right once or twice a month. It's always wrong. Then I'm gonna hit Shift F5. And I'm gonna go in here. And I'm gonna say, what? There's mono. And there's that DLL. So that.net standard DLL is now running inside of the browser. Did I compile that DLL for WebAssembly? No. I delivered it. Just literally did an HTTP get and got that binary and it is being executed in the context of the browser. Who's doing the work? That lovely portable C code for mono with a lot of work and a lot of engineering magic compiled into WebAssembly so I'm running a run time of CLR inside of the V8 virtual machine, inside of the process or the 6,000 processes that Chrome spawns inside of Windows or my iPhone or my Android phone or whatever because Wasm is already on your machine. Now at this point you might be like, hey Microsoft guy, you're trying to sell me server light again and I already said no thank you. Except this is the internet. This is the open web. This is WebAssembly sitting on top of HTML. Microsoft didn't kill server light. The internet killed server light. This whole stack all the way down is open source and that's really exciting and then for .NET people who are just getting into this environment for them to go and take an existing DLL or an existing code base and be able to reuse that is super powerful. Now let's pop all the way off the stack to the beginning of the thing when we were talking about that original .NET 10 year old, 15 year old .NET that maybe people are afraid of. Maybe they're writing WinForms apps or WPF apps and they write it on Windows and somebody says hey I wanna install my Windows Forms app because it runs the company and then we have to say well you have to install this version of .NET first and this patch level and then reboot da da da da. Well there is a Windows .NET. It's built into Windows and it's very stable but if you wanna go and do daily builds your own private fork of C sharp, your own compiler, WinForms and WPF we open source those two. How would you do that? Well what you would do is you take Windows Forms and you do a brain transplant. You take your 15 year old app and you put the brand new .NET Core 3 underneath it. Then you'd have a fully open source stack on that front end and you'd be able to put it all in one folder and then theoretically even turn it into a single executable. Now you might say gee why do I want two and a half gigs of .NET into a single folder? That would be not awesome and now you're saying you'll zip it up? No. What you'll do then is apply some of the other tools available to you like the great tree trimmer from Mono. Mono's got this tree trimmer where you would take your app, you'd hang it where you've got all the methods and all the dependencies and you'd give it a good shake and the methods you're not using fall off. So then you just ship the methods that you are using and you can have a white list where you can add in other things if you're doing dynamic loading and then I can get a .NET Core installation down to 30 megs and run it in a Docker container. Now it all depends on what you're doing and how much work you want to put into it but then I could put this onto a USB key and I could run it on a machine without having to worry about dependencies and that's when things start getting really interesting. But that doesn't really make me feel like I'm doing damage or I'm doing anything really amazing. So what could we do that would be really amazing? Let me load up an application that is a very old Windows Forms app. So this is like a 15-year-old app for like a memory matching game and basically this is like a WinForms app that brings up a grid and then I'll just pick the icons from this app. There we go. This is a very old app, okay? The logic, I'm not very good at it either apparently, the logic behind this is a .NET standard DLL.  So then what could we do? How much of that code could we get running on an alternate platform? How much of that could I get running literally anywhere else than Windows? So we'll go and we'll open that up in a different project that I've got going here and then I'm gonna go ahead and run that. And what we've done is we've gone and taken the logic of that game, so what it takes to win and all that kind of stuff and made it abstract so that things like clicks call out to this card object and now I'm gonna run it in the browser and that is a 15-year-old Windows Forms app now running in the browser using open technologies all the way down. So that's interesting. Now, is that, are you gonna clap for that? All right, we'll clap for that. Now, that might mean that you may be at Fosden but you may also be paying the bills with a Windows Forms app back at the office, right? And you may be thinking, wow, so that means that both of the people who have well-factored Windows Forms apps can go and do this. Well, yeah, there does require a little bit of factoring in the sense of everything had to be platform agnostic. Remember when we talked about all of those calls to native things, right? If you decide to go and new up a bitmap and your platform doesn't have bitmaps, you gotta think about that. Ultimately somebody's calling C, ultimately somebody's calling the platform so you wanna make sure that platform supports it. In this case, I'm using the dotnet standard as my basis and then these things, instead of being graphics in a tree inside of Windows Forms, they are dibs inside of a DOM inside of the web. In fact, with Blazor, again all open source, this is the HTML that describes the game card and that thing right there that says functions from line five down, that is all C sharp. That on click event gets hit when you say on click in the DOM notices the event, that runs and then it delegates to the card which is in the dotnet standard DLL, the exact same one that we send down the wire. So it could be tax calculations, whatever really great well-factored thoughtful code that you have that already works will now continue to work anywhere on a stack that you can change the source code to. So that's cool, but where else could I potentially run this thing? That would be cool. Well, I could go and I've got another machine here that I brought, I actually brought a bunch of different machines, another machine here, this is me. I brought this through airport security, so let's just give me a little credit. Airport security was not appreciative of this and I'm screaming, it's pie, it's pie, it's raspberry pie. But you know, after the questioning it went okay. This is called a crow pie and this is done, this is, they did a Kickstarter. You could use any old raspberry pie but I think one that looks like a spy case is even cooler. It's got the thing here, it's from a company called Elec Crow. I don't have any relationship with this company other than I'm a fan. And I've got buttons and stuff hooked up to the GPIO pins up here. I've got LCD displays and all kinds of cool stuff. And I've got that hooked up to my machine here and then I'm gonna switch over to PowerShell and I'm gonna go here and I am gonna shush into that machine. Yeah, we're trying to make that turn into a thing. If you would help me out with that, that would be great. We wanna basically just start casually throwing that into conversation. So when you're at work later, you'd be like, yeah, we did a little, and then I shushed into production. But don't make a big deal out of it. Just do it casually and then see if it infects your coworkers. And if they start shushing into production or other things as well. And then if you could then later add a little jute and you just, I just shushed into production and then you just kinda do a little, just a little body English, right? You know, I just shushed into production. And then see if you get the whole office doing it and then let me know. That would be great. So I'm shushed into the Raspberry Pi and I'm running top right here and this is cool because Raspberry Pies are fun. And in fact, I shushed into it with Open SSH which is actually built into Windows, ships with Windows now. You don't have to go and install Putty or anything. All the key management and stuff, it's just in Windows. You do all kinds of like really weird things like shushing into Windows, running PowerShell and stuff like that. So what I'm gonna do then is I'm gonna go over to Visual Studio Code and I'm gonna run that. And then I'm gonna go into Visual Studio Code and open up some .NET Core code right here. And this .NET Core code is using something interesting that we just released which is called system.device.gpio. Okay. So this is actually gonna talk to the LCD. Now I could call the .NET Standard DLL once you get the idea and I'm gonna say, hey LCD, pins, pins, pins, low level stuff. And the driver, driver for LCD is just source code which is basically sitting down with the spec and the wiring diagram and lining it up. It's not rocket surgery. And here's the interesting part. From Visual Studio Code, I'm gonna do a couple of interesting things. I've gone and I've modified Visual Studio Code's launch.json because everything in Visual Studio Code is extremely configurable. And I've set up a pipe transport. So I'm telling Visual Studio Code that I want you to build this application specific to the Linux ARM runtime. Have a self-contained folder with all of the Linux ARM stuff that I would need for .NET and Raspberry Pi. Then I want you to shush into the Pi and run the Visual Studio Debugger Linux ARM edition and connect to it. So then, go like this. Da, da, da, da, da, da, F5. Push F5, it goes and builds it. It then runs the tree trimmer from Mono which makes it smaller. Then at SCPs, right there, the files across. Now it's gonna turn orange. Now it turned orange. Now it is starting the Visual Studio Debugger over a secure channel using the keys that I've already set up. And then it's gonna hit a breakpoint on line 47 and or 42, probably 42. Boom. So now I'm doing cross, thank you. For that smattering of applause. So now we're doing cross platform, cross CPU architecture debugging where the build, to be clear, the build occurred on Windows. It built Applesauce. Then it got the ARM specific build for Applesauce. That's where the entire analogy kind of falls apart. When you talk about Applesauce in the context of processor instructions, you don't have like risk-based Applesauce. But anyway, work with me. And then I've got even variables and watches. So I can go and look at those variables across in Visual Studio Code. Didn't have to pay Microsoft to penny. That's exciting. Now, go back over to the pie. I've got all kinds of cool stuff that I can run over there. Where am I on the desktop? I can go and then the crow pie is great. It comes with a ton of Python examples that I'm slowly converting and trying out different things. So I can like see if we can do matrix demos and stuff with the Raspberry Pi. So I can do Python or I can go and do .NET. And then we'll say, I'll just run it again. Run SH. We'll go back to the here. Wait for it. There it is. Wait Microsoft guy with a dollar sign. This is a quad processor, two gigahertz, super computer, $35 super computer. But still, this is a lot of processing power. It's really overkill, wouldn't you say? To use a complete micro computer disguised as a bomb. And to just say hello world. You're really, you're just kind of pandering to the audience at this point. Micro computers aren't where it's at. Real programmers use micro controllers, right? Don't they? Well, what could we possibly do there? What I did is I talked to our friends at a company that has no relation, I have no relationship with, nor does Microsoft and we have a relationship with them called Wilderness Labs that worked on Mono and Xamarin and we're in the community working on things like Netduino. And they gave me something from their recent Kickstarter. Let me go and run Photo Booth on this thing here. Okay, this, this. Somebody took a picture of me once like this and they were like, there's no effect at all. It's his actual forehead. This right here is a meadow board from Wilderness Labs. And this is a tiny micro controller. This is actually the development version. There's four of these in the world. It's an alpha build. The actual one, I'm not trying to flip you off, will be about the size of a middle finger. But this one has some extra headers on top because right now I can't just plug it in and hit F5. It's actually using an ST link and I've got to go and flash the firmware. This is a micro controller, not a micro computer. So it actually boots into NutX, NUTTX, and then effectively boots into .NET. So without a full operating system, kind of with a micro kernel operating system, we boot into that. I'm gonna go and then build that whole thing. So, here I am in the lovely Visual Studio for the Mac. We have Visual Studios for every occasion. And they're all free for open source. Visual Studio community is totally free. Knock yourself out. And I'm gonna go into my app and here I've gone and said hello, pay attention. And in this case here, I'm gonna go and talk to this LED because this is not overkill. This is a tiny embedded device. If I took a tiny battery like a 2,000 milliamp hour battery and I plugged it into a Raspberry Pi, it would run it for tops, four hours without a screen. Tops. Because it's a freaking computer and we have to power the whole thing. But if I was to do an IoT device, I might want that to run for months or weeks on a small battery. It's a single tasking thing. So rather than booting into an operating system and then shushing into it and running stuff, why don't we just boot into the app itself? So let's see if this works. What am I doing? I have no idea what I'm doing. Okay, hang on. I'm gonna turn off the Raspberry Pi because I don't have a cable for that.  I'm gonna unplug it.  So I'm waiting, send it down. There we go. So USB cable for five volts. USB cable for five volts. Plug it in. Right there. Y'all sing when you do debugging? No? I hope this code compiles because it doesn't die on my failure. And I'm gonna then plug in the ST link. And then I'm gonna go out to the command line. Now, this is a little funky because it's an early build, so bear with me. But in the future, you'll just plug it in, you'll hit a five and a miracle will happen. But it's nice to know what's happening underneath. So what we're gonna do is we're gonna go and we're gonna run STUtil and GDB, we're running GDB server and we're listening on 4242. And then in another window, I'm gonna go and do a remote target over to that other window. So now we just connected to 4242. All right, there you go. So the dots, the dots mean it's working. Hang on, don't applaud for dots. We don't applaud single dots. You applaud when the dot makes it all the way to the other side of the screen. So what that's doing is it's literally flashing the firmware of the entire operating system of this thing using these four pins plugged into that ST link. And if we go back into photo booth, okay. What we're gonna expect to see is this app booting into dot net. Now the wire's a little bit small. So this is actually using mono for the work. But it also brings up some really interesting computer science questions because dot net is traditionally jitted or just in time compiled. But things like generics kind of explode when you just in time compile them. But you can also do interpretation of dot net code, but that would be kind of slow. Or you could do AOT or ahead of time compilation that mono can do. Or you could potentially do all three. What if you could have a hybrid execution that would do the thing that was most appropriate? Having all three execution contexts happen while the same CLR context kind of runs through them. Let's go back to photo booth. And there we go. That is a microcontroller running dot net no problem. Isn't that cool? So that is from Wilderness Labs. And the thing that's interesting about this is that none of it would be possible unless Microsoft started thinking about open source the right way. Why I went there, why Miguel works there, why we all do open source now. The compiler all the way down to the metal enabled these folks to put it on actual metal. Whether it be WebAssembly or 15 year old WinForms apps, Docker containers in any cloud, Azure, Google Cloud, Oroku, Amazon, whatever, you can do this code anywhere with a toolkit that is open source and flexible enough that you can plug in the pieces that make you happy and remove the pieces that you don't. Whether I was using Visual Studio Code or Vim or Emacs or Pico, I can do whatever I want. And it makes me very, very happy. I'm gonna have all of this stuff available and I'll be outside to be able to talk to you. But that's my talk. It's a very exciting time in the dot net space and I'm happy that we're here at Fozdem. Thank you very much. This is the Battle Angel Alita version.