I have a presentation here to talk about contextual awareness solutions that our team has been building with various products that we have in SD MicroSportfolio. Some part of the team that builds these solutions around accelerometers, gyroscopes, microphones, environmental sensors like pressure sensor, all of those. We have existing things that we have all around us, devices that can interact with human beings, the devices such as mobile phones and trackers that we use. What we essentially are trying to do is to put solutions together which recognize the context. Your watch on your wrist is a device that gives you the context, the time.  And then after that, what is done is you take action, and which is where your magic is, which means you can build solutions around context that can be provided to you. So there are diverse applications in all kinds of domains, smart me, your fitness trackers, starting with that. To smart home, the one that very intelligently manages the energy consumption in the home, to smart office, to industrial application, healthcare application, fitness, gaming, virtual and augmented reality applications, and this goes on and on. Now with a lot of work that is being done in the area of human machine interaction with machine learning algorithms, with deep learning, there are so many more applications that suddenly become possible. I will talk a little bit more about all of these in this talk. So I'll start with some examples. Some examples for healthcare applications. So if you can just consider a simple device like an accelerometer, it can monitor periodicity in acceleration and thereby you can determine if the person is walking or running or jogging or stationary. So this essentially has been utilized by many companies that commercially sell fitness trackers. You can also imagine applications, context-aware applications that can actively support elderly or disabled people in performing their everyday activities. You can work with systems that can potentially detect potentially dangerous situations in a person's life. Like a man-down application, like if a person has fallen down to be able to detect that a person has fallen down and send help based on the location of that person is one such application. Industrial applications, there are quite a few. Some examples are like you can make activity-aware applications that can support workers in their tasks. If you can imagine putting together the electronics in a cockpit of a Boeing 787 aircraft, it has so much of electronics in it and the sequence that you need to follow in putting all of those components together, if the environment around you can monitor what the worker in that cockpit has been working on and show the worker an appropriate user manual because things are so complex now, show the user an appropriate user manual based on the step in the assembly process that they're at. This is another one of those applications that can benefit workers in industrial applications. Entertainment and game. So now with motion-memes, accelerometers and gyroscopes and magnetometers that you can wear on the body, different locations on the body, feedback can be provided to athletes or to performing artists on their performance. In case of the golf club swing, there are applications that are available that essentially can help the user improve their golf club swing. And those are all using motion-memes. There are many other applications like you can already see trends where context-aware applications can do mood recognition and bring up the appropriate playlist. So you can imagine that as one of those situations where contextual awareness really helps the application. To understand the context, there are a few things that we just also go through here. The real value is in recognition of high-level context. So what do I mean by that? If you recognize that the person is in a shopping mall and is shopping versus person having lunch with friends at the shopping mall, those two are two different things. And the context here is different. Versus a person that's busy at office doing their work at their desk. So this is high-level context. Now, high-level context is built on determining low-level context components. And those low-level context components, the more accurately you can determine those, you can have a very good estimate of high-level context with a greater degree of accuracy and reliability. So the low-level context you can imagine are like human activity, human environment, human location, human interaction. So human activity is like you can imagine person is walking or stationary or person is sitting at their desk. Human environment, am I in a conference room or am I in a shopping mall? That's human environment. Human location, again, the same thing. And human interaction is the person talking to another person or is the person typing on the keyboard. All of these can be detected. So let me just then, with that, present a generic context awareness architecture. So there's quite a lot of stuff on this. But what I want to describe is everything starts with data or signal, which is the outermost layer here. So your signal could be generated by an accelerometer or a compass or a microphone or any radio signals like your GNSS or from camera or your light sensor. Even clock provides you the data or the signal. So now you take this data or signal and then this goes through the information layer. So you would take the accelerometer data and try to extract information from it, information such as periodicity in the acceleration pattern. Or you can look at variance in acceleration, which determines what is the user doing. So then this can be movement pattern. From microphones, you can determine noise patterns. From radio signals such as GPS or Wi-Fi, you can determine your user location. Camera can give you brightness. Clock can give you your time, date and time. And also provide you calendar or activity list. So now from the information layer, you go through the information processing, which utilizes these pattern repositories. Pattern repositories are the ones that have been built where a lot of analysis has been done on the data. What does the acceleration pattern look like when a person is walking? Or what does the acceleration pattern look like when your mobile phone is sitting on the dashboard of a car? So all of that sits in a pattern repository. So this information layer essentially will do information processing and convert this information into knowledge. And what does that mean? What it means is if I take the movement pattern, I can convert that into a movement tag. So looking at the acceleration pattern, I can say the person is walking. So that's a movement tag. Similarly, from microphone, you can say noise tag. Am I in an environment which is that of a conference room? Same thing for location. Again, you can create a location tag. This is a location corresponding to Santa Clara Convention Center. All of this goes into the context detection service. And context detection service is, of course, driven by a context repository, where you can combine information from multiple sources. And ultimately, you generate the context, and which is service through context APIs. So taking this and applying that to human beings, what we want to do now is to understand human activity. So human activity, if you look at here on the right hand side, here is your time scale. It can go from seconds to minutes to hours. And it can be broken down into multiple such components. The very first one is motifs, or gestures, or movements. Those are of the order of seconds. So you can distinguish activities such as bending the arm, or taking a step. Those are the activities that fall in the first class. The second one is low-level activity. So you can put together pieces of information from the first set to create low-level activities, where you can determine the person is walking or person is cleaning the windows. And then you combine these and go to the higher-level activities, which can result in determining what is the person doing, like person is on his desk typing on the keyboard, or person is shopping at the mall. So those could be of the order of hours. So how exactly do you make this happen with some of these sensors? So I'll start with some examples of that. So for human motion detection, it is an architecture that can be utilized. You can start with a variety of sensors. And these sensors are like accelerometer, pressure sensor, gyroscope, or a microphone. And the information from accelerometer, or pressure sensor, or gyroscope, or a microphone is processed through some windowing and feature extraction scheme. So you would look at a window of a two seconds worth of data, or three seconds worth of data, or a half a second worth of data. You do feature extraction. What it means is that you would obtain your mean, or variance, or number of peaks in that signal, or time difference between two different peaks. All of that is feature extraction. So once you can look at the acceleration signal coming in, goes through windowing and feature extraction, through this process, once you have the features available to you, you can compute the probability of a set of activities that are possible to be detected through acceleration signal. Now, you can do the same with other sensors, but you can, in this case, also combine them. Accelerometer and pressure sensor can be combined. The information from these two sensors can be combined. They're complementary in nature. Same thing, accelerometer, pressure sensor, gyroscope can be combined. If you want to determine the orientation, you can combine accelerometer and gyroscope. If you want to determine the context of the person, is the person walking or person climbing stairs, that can be done by combining accelerometer and pressure sensor. Pressure sensor gives you variation in the altitude. And then you, of course, can combine microphone. It's fairly simple, because let's say a person is walking in a corridor. So the periodicity that the microphone can detect in person steps can be combined that with accelerometer. And you can improve the accuracy of determination of context through these signals. So this was the emotion. Now, what about human environment? Human beings, for example, in this conference room, how do you determine that the person is in the conference room? So same thing. You look at microphone data. You can process that microphone data through some windowing and feature extraction scheme based on the features that you extract. Those features could be like MFCCs or delta MFCCs, whatever they may be. And you can compute the probability for your environment features. And in our framework that we have put together, what I want to show you is what are those possibilities? So for motion activity vector, you can imagine a vector that looks like this here, where your activity could be stationary or walking, jogging. The person could be on escalator, elevator. Person could be on a bicycle or driving, or none of this. So the most important characteristic of this is that each of these elements in the vector, they're sort of mutual exclusive. You cannot be stationary and walking at the same time. Only one thing can happen at a given point of time. You cannot be bicycling and driving at the same time. You're either bicycling or driving. For voice activity, here are some examples. You could have a situation like silence or face-to-face conversation, or a person talking on the phone, or none of this. So none of this is a class which can be expanded. You can put more and more as you have greater number of sensors that are available to you. Same thing for your spatial environment. You can have spatial environment detection like, are you on a street? Are you in a stadium, or is the person in a retail environment like shopping mall, or cafeteria, or restaurant, or is the person at home? Is the person in a moving vehicle, all of this? And then you have none of these. So based on the richness of algorithms, none of this essentially can be as small as you want it to be. So for these three vectors that you can determine at any given point of time, what do you ultimately want to do with it? So what you want to do is to combine the time sequences of the probabilities for each of these vectors to ultimately determine and produce a soft decision. Because remember, in these elements, you can assign a probability at any given point of time. So the element that has the highest probability is your actual activity. So let's say the person is walking. Your vector would essentially contain probabilities for all of these elements, but the one that corresponds to walking will be the highest. Since this is probabilistic, it is different from hard context. This is soft context. So you would have vectors like motion activity vector, voice activity vector, or spatial environment vector. You can combine all of these to ultimately determine high level context. So some notions on what does it take to build a good solution. So number one is the solution should be accurate when you try to predict the context. And how can you achieve greater degree of accuracy when you put the solution together? You should conduct testing with very large number of users for diverse scenarios. So it goes without saying. But I just want to list them here. The solution should be low power. If you need to keep charging a device every few hours, the user experience is not all that good. So smart sensor usage, use of hard acceleration, and if possible, do all the computations on the sensor itself. Again, another attribute for a good solution is low footprint. The solution should not basically require a large computing resource, because many of these solutions are implemented on devices that are like mobile phones or variable devices that have limited battery life and limited computing power. Well, I shouldn't say limited. Nowadays, mobile phones have eight processors in them. But the thing is, battery life is still a finite amount. And you would want to extend that as much as possible. And flexible. Flexible means that you should be able to implement your solution on a variety of platforms. Contextual awareness implemented on a mobile phone, you should also be able to implement some piece of it on your available device, or on your tablet, or your laptop, whatever the device may be that you're carrying, which has sensors plus computing capability with it. One of the other important aspects of this is personalization. The way I ride my bicycle is different from how somebody else would be riding their bicycle. And to improve the accuracy of detection, if we put together algorithms that allow you for personalization or for tuning of parameters that improves the performance, then it's always a very good idea. Because the user experience is enhanced when you have capability of personalization in your framework, in your algorithms, in your architecture. So we basically have a variety of solutions that are available. And these are available on Open.memes. These are available for free, essentially. So some examples of this, I'm listing them here. So they can be used to create your own complete solution. So the very first one is sensor fusion for device orientation. You can combine accelerometer, gyroscope, magnetometer data to determine the orientation of the device, to determine linear acceleration, to compute your quaternions, to determine the calibration status as to how well are your sensors calibrated. Another one that we have is a user activity recognition library, which can work for both mobile or wrist worn cases. It will determine travel mode, like is the person riding a bicycle, is the person walking, is the person a pedestrian, or is the person in a vehicle. We also have features where it can count squats, or pushups, or bicep curls. We have features like that that are available on Open.memes. Gesture recognition, that's another library that's available. It can form a building block for your contextual awareness framework.  So if your mobile phone can detect this orientation, I can use that to turn the volume on or off. Post determination, this library can help you determine whether the person is standing, or sitting, or lying down. And carry position determination library. So this library can help you determine if the mobile phone is in your pocket, or in your handbag, or in the holster, or the trouser pocket, backpack. So these scenarios can be utilized in building better contextual aware solution. So some more stairs. You can count the number of steps the person has taken while climbing up the stairs. So this library will only count steps when you are climbing stairs. It would also detect if you are on an elevator or escalator. It would be able to determine the floor change. We have a library that does bicep curl detection and counting. We have a solution that we have put together, which gives you situational awareness, combining audio and motion memes. So this is for environment detection. We are eventually going to add things like keyword spotting to it, and a number of speakers that you might have in a conference room. And we have a demo here. In fact, many of these are being demoed here on the show floor. We have a demo for predestined and reckoning. So this is a solution which can enable indoor positioning through use of motion and environmental sensors. So to talk a little bit more about our OSX Motion FX, this is a library that's available from open.memes. It combines the data from three sensors, magnetometer, pressure sensor, and accelerometer. And it would give you quaternions. It can give you your magnetic heading.  It has built-in your magnetic calibration library. It has gyro bias compensation built-in. It has dynamic distortion feature built-in, which means the hand jitter is already compensated for. And the library is fairly efficient. So it can be implemented on mobile phones or even wrist-worn devices, where the computational requirement for this is not that large. So this is, again, available on open.memes. So open.memes essentially has many of these libraries where you can look at the documentation which describes the APIs. It has test results, how it has been tested, how to put this together, and some tips in putting this together. We have activity recognition library that I talked about. OSX Motion AR, it'll provide real-time information on whether the person is stationary or walking or fast walking, jogging, biking, driving. The feature about this particular library that we talk about most is that it uses only accelerometer data and at 16 hertz rate. So it's a very power-efficient implementation because it essentially consumes the smallest possible amount of current for accelerometer. And some test results for this are available through this confusion matrix that I want to show you. So we tested this library with 71 unique individuals. We have 48 hours of activity data in this. And the confusion matrix here shows this is the classification output, and this is the actual activity that the user was engaged in. And what you see here is that most of the activities such as stationary walking, fast walking, or jogging, it's better than 90% accuracy for biking and driving. It's better than 83% or 86% accuracy. We have tested this library for use cases like the device was in the cup holder in the car or in the shirt pocket or the device was in trouser pocket. In case of bicycle, we had the device in shirt pocket or in the trouser pocket, many such scenarios. It has been tested. And the aspect that I want to emphasize here is that this is primarily accelerometer only. So if you remember the architecture that we had put together, you can combine accelerometer and pressure sensor, gyroscope, and microphone, and you can further improve this. But what we are showing you here is that the level of accuracy achieved with just accelerometer, which is sampled at the lowest possible sample rate of 16 hertz. We have a gesture recognition library designed using machine learning algorithms. It can detect things like glance, pick up, wake up kind of gestures. Again, available on Open.mem's APIs for this are available, fairly easy to understand and use. Carry position library, OSX motion CP. It can detect whether the device is on the desk or in hand, like if you're texting or near the head, like as if you're talking on the phone, shirt pocket, trouser pocket, arm swing. It's again driven by only accelerometer and has been put together using machine learning algorithms. We have post determination, which can distinguish like standing or sitting or lying down. It uses two sensors, a pressure sensor at 10 hertz rate and accelerometer data at 1600 rates. So the reason why we bring in pressure sensor is to distinguish lying down kind of use case scenario and to improve the accuracy of detection when you want to distinguish between sitting and standing. The performance latency for this thing is less than two seconds, so fairly fast response. So some of the scenarios in which we have collected data for this include when the person is standing with their hands in their trouser pocket and standing, or head resting on the hand, like sitting down, hand resting on the side of the couch while watching television. So essentially what I'm trying to say here is very diverse use case scenarios and a very large number of users that have contributed to collecting the data for this. So in this case our probability of detection for sitting is about 97% and probability of detection for standing is about 88, 89%. This essentially is one of those libraries that, again, just like any other library, you can try it out on our nuclear board or our sensor tile. The APIs and the information that is available to you to integrate it is fairly self-explanatory. Then vertical context determination library. So this is where you can distinguish is the person on an elevator or escalator, is the person taking stairs, climbing up the stairs, going down the stairs, is the person walking on the same floor. Because if you notice, these solutions are built with pressure sensors. And pressure sensors have inherent phenomena that you need to take into account. One example is if you're standing near an air conditioning duct and if the air conditioning kicks in, it would show a spike in pressure. So the algorithm has to be smart enough to distinguish that the person is on the same floor and that the floor change did not occur when the air conditioning kicks on. Or if you walk in, and if you open the door, or if you walk into building, that is air conditioned. So when you enter the door, there's a change in pressure. So that change in pressure should not be you. The algorithm should be smart enough to know that you're on the same floor, that your floor or your altitude did not change. We have another interesting library for fitness kind of use case scenario, which is bicep curl counting. It uses a pressure sensor and an accelerometer and samples them at, again, 25 Hertz rate. And it will detect bicep curls. This is for, of course, the case where the device is worn on your wrist. And it will detect bicep curls. And it will count the number of repetitions. So a library that, again, is based on machine learning algorithms and can be tried out using a nuclear board or sensor tile. So if you have to build your own application, you can start to do that in less than five minutes, essentially. So these libraries are available. And Android and iOS apps are available for GUI. So here is an example here. So essentially, if you take your sensor tile and run this app on your Android device, what you notice here is essentially your temperature measurements, your pressure measurements, your humidity measurements. This one doesn't have a light sensor, so it's not present. So essentially, with the available apps, you can put your solution or your proof of concept, if you want to call it, together very, very quickly. You can put this together in about five minutes. So the hardware components that you need to put this together. So there are two choices. You can choose either the nuclear board or you can choose a sensor tile. These are all available from st.com. So Gerbers are available for both of these. BOM is available. Schematics are available. So if the solution works out for you, you can take components from the schematics that are available for these devices and use them in your own design. You can then download the firmware from open.memps. So you essentially, for the hardware abstraction layer and for the layer that sits on the top, you have the source code available. There are application notes available. There are user guides that's available to you. And something that can help you get started. Then you can download any of these libraries, like Activity or Carry or Gesture, many of these that I have talked about. And there is a simple click-through license that is available to you, which allows you to test it, build your proof of concept with it. If you essentially like this thing and want to go to production with this library, that's also available to you as long as you use ST's sensor solution. This license is given to you for free. So production Lua is provided to you once you determine the use cases in the library for your use case works the way you want it to work. Then you essentially install your app. Fundamental things that you can do is data logging or viewing the output, like for OSX MotionFX, which is your library for sensor fusion. In real time, you can look at your pitch, roll, and your angles. You can obtain your, you can look at your quaternion values. We have a cube demo, which will show you the movement of the cube in a three-dimensional space for your testing. You can test it for rapid acceleration. Or you can test it for a known amount of rotation that you apply to the device. So essentially, you have the ability to put your complete solution together using these building blocks. Then the other piece that we have here is, of course, your STM32 nuclear board. This is the hardware piece that I talked about. This is one option. So the STM32 nuclear board essentially has many of these features that are helpful in building your actually proof of concept. So it has a flexible board power supply. We can power it through USB or external source. It has two push buttons and two LEDs. It provides you means to actually interact with your algorithms to do testing with this. And what you see here is Arduino extension connectors. What it allows you to do is to stack up different shields to bring in different pieces of hardware. So you can create your own proof of concept or your application using a variety of sensors or microphones or if you want to bring in Bluetooth low energy to do any of the BLE kind of applications. Then essentially, the heart of this thing is your STM32 microcontroller. And you can pick the flavor of STM32 that you're interested in, that STM32 L4 is a very popular flavor, which is a very low power consumption microcontroller. And essentially, using this, you have access to all your MCU IOs. So if you want to write your own logic and do your first testing, this nuclear board provides you the hardware environment to do this. This is an example of a shield. So this is your sensor shield. It has a three-axis accelerometer and a three-axis gyroscope on it. So LSM60S3 and DS0 are available. Two flavors of this sensor shield are available. Then a magnetometer, LIS3MDL, a pressure sensor, LPS25HP, and a humidity and a temperature sensor. So this essentially can be plugged on to top of the nuclear board. Once you put these two pieces together, then you are ready to try out any of your libraries like carry position, sensor fusion, gesture recognition, any of those that we have available on OpenDOT MEMS pertaining to motion or environmental MEMS. So now the other option that we have is sensor tile. Sensor tile has multiple components on it as well. So it has your motion MEMS. It has accelerometer and gyro combination. It has environmental sensors, such as the pressure sensor on it. So the LSM60SM, this is our latest six-axis sensor solution. LSM303AGR, this is our accelerometer and magnetometer combo chip. You have a pressure sensor, LPS22HP, on this sensor tile. Sensor tile, as you can see, the form factor is suitable for variable applications. It's 13.5 millimeters by 13.5 millimeters in dimensions. It has a MEMS microphone on it. It's a 3 by 4 digital microphone. And you have your SDM32L4 microcontroller on it, which provides you the computational platform. And for connectivity, you have blue energy. So a complete solution, which is again available to you. It has an SD card slot for extra memory, which is where if you want to log data while walking, running, jogging, whatever, or audio data for any of your use case scenarios, you can log all of that. And fairly easily programmable. So all of the information that is needed and all of the components that you need, like open.audio, open.mems, open.rf, they will utilize this as a platform and building block for contextual awareness. So a little bit more about our free software licensing. So the idea is, as long as SD components are used, the license to any of these, open.mems, open.audio, or open.rf, is available to you. You can do proof of concept. And then if you want to go to production with it, you can get a production license for this as well. Open.mems, this is one snapshot from the web page on st.com, where this is an example where it shows your motion AR and motion CP kind of libraries. So you can see all the detail from this. You can order hardware and download software from this. So here is a list of the various libraries that are available to you, like motion GR for gesture recognition, FX for sensor fusion, carry position, pedometer, activity recognition, and so on and so forth. So the idea, essentially, as I have already mentioned, is to combine components from all these three. You can combine pieces that you find on open.mems, open.rf, or open.audio, all within the open.framework structure that we have put together to create your own proof of concepts or test environments for your own ideas for contextual awareness. So this is a little bit more. We have also our ST Blue Microsystem framework, which puts many of these components together and also adds connectivity to it. So ST Blue.ms is the one that will combine connectivity piece plus sensor fusion with it. So this is a screenshot from your mobile phone, which essentially is communicating with your sensor tile.  That's it. That was my last slide.


Right on time this morning. Good morning. I'm Jerry Manich interim chair of the Vermont committee for the employer support of garden reserve Welcome to the signing ceremony for governor Scott's proclamation supporting the SGR in Vermont Before I introduce Dave wheel our executive director I'd like to announce that mr. Charles Martin government affairs director for the Vermont Chamber of Commerce has Officially accepted the chair position for our committee Charles could not be with us today, but we'd like to publicly thank him for his commitment Dave Thank You chair. Good morning everybody and thanks for making time for us governor. Thanks for making time for us This week our nation honors the civilian employers of garden reserve members who in doing so contribute greatly to our national defense since 1972 ESG are with its strategic partner partners has worked to assist employers in understanding the value of Employing a member of the garden reserve and recognizing the support these employers provide In Vermont, we are very fortunate that we have so many employers of our citizen lawyers who not only do what's required But also provide extraordinary support above and beyond what is required by law National life group represented by director of benefits Michelle Granitz Such an organization and has done so over many years and it's also very appropriate to recognize the national life group was One of the earliest recipients of the freedom award the secretary of defense freedom award the highest award that a civilian employer can can receive This year carry dr. Pepper was our nominee for the freedom award and unfortunately no one from that organization could join us. I Do want to recognize though Jason Patnoe from Alliance Group Incorporated who is president and owner and He's representing a company today, and thank you Jason for making the trip down Like to recognize a few other folks who are here today with us Mr. Dan pipes who is representing adjunct general Greg Knight and Dan is the executive director for the Vermont military department He'll speak briefly in a few minutes senior chief petty officer Richard Bomert Senior illicit advisor from the Naval Operations Support Center in White River Junction We're also very fortunate to have several of our strategic members here today From the US Small Business Administration Chris Harriman who is our the veterans business development officer who we work very closely with and Brian the clue low-record relation specialists and also Vermont Department of Labor commissioner Lindsay Curley Thank you for joining us today commissioner and veteran services coordinator Larry Forsyth Also present our number of our Vermont ESG our volunteers Unfortunately, my colleague Linda Fowler who works full-time is under the weather and couldn't make it today This week the president signed a national employer support the garden reserve week proclamation On Friday the top 15 employers nationwide will be recognized as the national as the national finalist for the prestigious secretary of defense freedom award So today we have asked governor Scott to sign a similar document Proclaiming this to be Vermont employer support of the garden reserve week and thanking and reaffirming How critical our supportive employers are to our citizen soldiers airmen sailors and Marines Um before he signs that uh, Dan pipes. I'd invite you to say a few words. Thanks, Dave. I appreciate it governor Good morning. Thanks for your taking the time to be here and for your support on behalf of General Knight who just returned from northern the republic of northern Macedonia I I want to just emphasize and reiterate that we could not do this without you uh at the end of the day The employers that support our guardsmen and everything that we we understand it's a big ask What we ask of you And we do appreciate your your ongoing support comes down to communication. So if you have questions or concerns Um, and these things do arise Please let us know early and often and we'll address them head on So yes pretty much all I have for you Thanks again for your time All right, so I'm going to I'm going to ask everyone to come up Because you uh, you deserve a lot of credit for everything you've done And everyone who's here if you could come up and be a part of this As well if you'd like to come up as Representative So thank you all for being here today and thank you Dave and Jerry for the introduction We all owe so much to those who serve our state as well as our country Those who put themselves on the line so we can live safely here at home deserve nothing but our respect and our gratitude I believe it's our responsibility as civilians government and businesses to do whatever we can to ensure our service members can thrive in the workforce And the fact is we benefit tremendously by employing these men and women I talk a lot about workforce issues It's one of the greatest challenges we face here in the state because there are still About 13,000 fewer people working today than we had in 2009 It's the number one concern I hear from employers across the state What I also hear is veterans and members of the garden reserves are some of the most reliable and most productive employees in the workforce That's why my administration has worked with the guard the legislature and others on initiatives like licensing reciprocity So when members the military and veterans apply for civilian licenses They're recognized for the experience and skills gained while serving Vermont is a leader on that front So it can be used as a recruiting tool for our guard and for vets looking toward a second career I've also proposed eliminating the tax on military retirement pay another critical recruitment tool Although the legislature hasn't gone along with this as of yet We'll continue to work on this in the next legislative session But probably the most important thing for our reserve component service members Is knowing they have an employer who is understanding Eager to accommodate their needs and get the most of their experience That's why I can't thank the esgr ESRG committee members The employers and others enough for being here and supporting the fine men and women who serve our nation And with that I'd like to read today's proclamation before signing it Whereas national garden reserve forces comprise nearly half of our nation's military strength And are essential to america's national security And whereas reserve component forces stand ready to answer the call to serve Whether serving alongside active duty counterparts all across the globe Or responding to humanitarian crises at home and abroad Whereas employers provide critical support to members of the national garden reserve forces Allowing our citizen warriors to serve whenever the nation calls Often foregoing financial gain Being separated from loved ones and making other personal sacrifices in the process And whereas employer support is stronger than ever More than 47 years after president nixon authorized the secretary of defense to establish the national committee for employer support of the garden reserve And whereas our nation is in debt to the citizen warriors Departing the comforts of home to ensure our freedoms remain intact And whereas america plays special Pays a special tribute to the commitment of dedicated and supportive employers Who continue to make service in the reserve component possible Now therefore i philip b scott governor hereby proclaim august 19 to 23rd 2019 as vermont employers supported the garden reserve week And with that, i'll sign the proclamation And the support of the garden Absolutely, so if you want to come around this part makes for a great picture It's a big big family I need a stool There you go Thanks very much for your commitment means a lot to all of us as well as those who you employ, so thank you


Previously, we discussed the basic principles of deontology or duty ethics. Emmanuel Kant can be considered as the most famous deontologist, as he formulated his categorical imperative. Act only to that maximum whereby you can at the same time will that it should become a universal law without contradiction. Thus, in relation to your actions, you must ask yourself whether you would like the rule that guides your action to become a universal law which is valid for everyone. In this clip, we will elaborate on the implications of deontology as an ethical paradigm in communication. We will focus on transparency. Transparency is a hot topic in all fields of communication. It is related to a lot of communicative situations, such as government communications, how transparent should the government be, digital developments, what do these developments mean for transparency on the internet, and what are the implications for users and society, and communication research. As a researcher, is it a duty to always be honest about your intentions? As was explained in a previous clip, Kant stated that duties could not conflict, but modern philosophers have acknowledged the possibility of conflicting duties. This is also central to the issue of deontology and transparency. In its old meaning, transparency often meant allowing everything to be visible or simply availability. However, social media technologies, websites that contain large amounts of government or other sensitive information, and societal developments have given a new meaning to openness. There are numerous definitions of transparency or openness, but we will use the definition given by Oliver. Today's new transparency implies the increasing expectation of various stakeholders of active disclosure. In deontological terms, being transparent would thus imply that an actor, a journalist, company or government, must disclose information on their own initiative. If we take transparency in a sense of active disclosure as a duty, a universal standard, what implications does this have for communication practices? In theory, this could force governments and companies to be open about their data policies and strategies. Thus enabling citizens, pressure groups and other stakeholders to be better informed. However, it could also be a threat to their positions if there are no rules to protect information classified as vital. In addition, if a lot of policy information, data or other kinds of information is simply disclosed without further explanation or guidance, this could lead to overkill, if not drawing of the wrong conclusions based on it. This is, however, not only a logical way of thinking, as deontology takes the duty of being transparent as a starting point, and does not consider the possible consequences. Transparency can also be a difficult issue in advertising. Take product placement in television series as an example. The audience expects the show to be the result of creative efforts. However, if producers use particular products in the show as a result of a deal with certain companies, it also becomes a vehicle for selling products. This might be considered a form of deception. Let's discuss one last situation. More or less the same problem arises in the blogosphere when bloggers are paid to write favorably about products. To what extent can their blogs be considered as independent commentary, or is this deceit? And what role does payment play in this situation? Is there a moral obligation for the blogger to explain the nature of their relationship with the company? A deontological answer to these questions would say that transparency comes first. You have to be clear about your motives, not for any greater ends, but for the sake of transparency itself.


The next multi-parametric MRI case of the prostate is important in consideration of image quality and our ability to recognize fact from artifact. This patient is a 67-year-old male who'd had a negative transrectal ultrasound guided biopsy a few months before the MRI, but his PSA started to elevate and grew to 3.2. Because of the elevation of the PSA, a multi-parametric MRI was ordered, which is demonstrated here, to make sure that the patient didn't have an underlying prostate cancer. The reason for showing the case is shown here on the T2-weighted sagittal images. First of all, we see that the patient does have evidence of benign prostatic hyperplasia. There's nodular enlargement within the transition zone that's inhomogeneous. And we see that there's associated median lobe hypertrophy that's protruding up into the urinary bladder lumen. So here's the median lobe hypertrophy. And this actually has a pretty high correlation with obstructive symptoms due to the BPH. Now, the reason for showing this case is this little artifact that we see. You see here there's a little inflection zone artifact. It's dark here centrally and bright on the rim. And we see another area right here, dark with a bright signal intensity rim. If we go to the T2-weighted axial images, same thing. Within the transition zone, we see a low signal intensity area with a bright signal rim. Now, it turns out this artifact is actually the least significant on the T2-weighted images. Because this is actually due to metal, the artifact is significantly worse on, for example, the dynamic contrast-enhanced imaging, which is shown here. These are the color overlay images. And we see that centrally here, we have a complete loss of the color overlay that's due to the metal artifact from this particular procedure. Now, more significant is the effect of the metal artifact on the diffusion-weighted sequence. So this is the apparent diffusion coefficient image, the ADC map image. And notice that about 30% to 40% of this prostate gland, literally the entire central third to half of this gland is covered up by this susceptibility artifact that's due to these metal clips. And if we look at the high B-value images in this same case on the diffusion-weighted imaging, the same thing. Here's the outline of the prostate gland, so kind of the level of the prostate capsule. So here's the prostate capsule shown here. But here within the prostate capsule, this is all artifact due to these metal clips. And it turns out this is a patient who's undergone a urologic procedure called a urolift procedure. In this procedure, stainless steel clips are placed along the uroepithelium, so kind of along where you would expect the urethra to be located within the prostate. And then titanium clips are put on the surface of the prostate gland. And there's a little string that connects these clips that helps to open up the prostatic urethra and reduce the obstructive symptoms from BPH or benign prostatic hyperplasia. The problem with this is that these stainless steel clips, as you can see, cause a very large metallic artifact that significantly compromises the diagnostic capability of the multi-parametric MRI to detect prostate cancer.


Tip six, take advantage of the new rich data types. Take advantage of the new rich data types. So in your getting to Comic Guru in Excel, you must take advantage of the new rich data types. So I'll have to jump back to our demo to see how that works. So the new rich data types, I'm just gonna show you one of them. We don't have too much time to show you both. So what do we mean by the new rich data types? If I highlight these, these are locations, right? So these are locations. The new rich data types, they go into Bing online and search for whatever it is you have and see whether it fits into one of these two. Currently, if you go to data, to go to data, right here in the middle, you'll see stock and geography. So these are new data types. I'm sure they're gonna add some more in the future. So we have stock and geography as two new data types. Since I know this is a geographic location, if I highlight these and I come to geography and click on geography, it will go online and check, hey, do I know these things as geography? And if it does, it converts all of them and look at that. So it's converted all of this because these are states in Nigeria, right? So if I come here, if I click on any of the data types, you have these, this button that kind of extracts data from this particular geographic region. So if I click on this, it say, do you want the area? Do you want the capital? Do you want the largest city? Who are the leaders?  If I click this, I say, I need also the population. It pulls out the population. I can highlight this too. I'm going to the edge and double click. And you see, can you see field here? Field here means, oh, this field is not available. So maybe this field wasn't entered online. And that's the new data type. So if I come here, I could come in here and say equals to, right? And I select the cell. When I select the cell, there's a new button that you now click. You remember the hash button that I showed you in the dynamic arrays? Well, this one, you just need to put a dot. So you click on the cell, which has the data type that is the rich data type. And if you put a dot, it will now give you that rich extra information about that data type, right? So that's super. Then you can go check out stock. So stock on its own, you could do that.  Yeah, I put Microsoft as a stock, Microsoft. I put Google as a stock. Everybody knows those two. So if I highlight them and I come to stock and say, hey, this is a stock, it will go check online and say, hey, this is a stock. And see it's already converted it to their actual name of the stock. And the same thing, I can click here and it has all these beautiful rich information about that stock. So much rich information about the stock. Like what's the current stock price? Where's price? Let's check price, see? So this is the current stock price. And this updates nearly, I think every 10 minutes or something like that. So when you're building your model and stuff, you can see the current stock prices. And if you're building your financial model, you can use this information in your financial model. Super stuff. So take advantage of the rich data types. That's another way you can become a guru.


Hello and welcome to the session in which we will discuss section 1250, unrecapture gain on real state. Now, section 1250 assets, which is real estate assets, are subset of section 1231 assets. Now, what are section 1231 assets? 1231 assets are business assets, and we held them more than one year. And under section 1231, we break them down into two categories, section 1245, which are depreciable personal property used in a business and held for more than a year, like a computer, a laptop, a vehicle, a truck, furniture, desks, chair, office, basically office equipment. Those are section 1245, which are movable versus section 1250 assets, which are real property and land. Real property is depreciable, land is not depreciable. Simply put, section 1250 assets are not movable. A warehouse is attached to the land. A land is land. A building is a building. You cannot move them around unmovable. Now, the concept that we need to learn about in this section 1250 unrecapture gain is similar to the concept of section 1245. Now, I don't want you to make section 1250 unrecaptured gain with section 1250 recapture depreciation. This is a little bit different. Section 1250 asset depreciation recapture for individuals applied to depreciable real property that are residential real estate acquired before 1987 and non-residential real estate acquired before 1981. What's special about these states? During that time, the depreciation method used was accelerated method. What do we use now for real estate? We use the straight line. So, what happened is when you sell those assets, you would have to take the difference between the accelerated method and the straight line and the difference between them will be considered ordinary income part of the game. We don't have to worry about this. This is not what we're going to be discussing, but I have to discuss this because the naming is very similar or confusing 1250 recapture depreciation versus section 1250 unrecaptured gain. So, this is the section 1250 depreciation recapture, which is the difference between the additional depreciation, which is the access of accelerated over straight line and the recognized game. That's not what we are discussing. Before we proceed any further, I have a public announcement about my company farhatlectures.com. Farhat accounting lectures is a supplemental educational tool that's going to help you with your CPA exam preparation as well as your accounting courses. My CPA material is aligned with your CPA review course such as Becker, Roger, Wiley, Gleam, Miles. My accounting courses are aligned with your accounting courses broken down by chapter and topics. My resources consist of lectures, multiple choice questions, true-false questions, as well as exercises. Go ahead, start your free trial today. No obligation, no credit card required. Well, we are discussing the section 1250 unrecaptured gain. Again, think of section 1250 asset. So, when a real property is sold at a gain, a part of that gain that would otherwise qualify for 0.15 and 20 is subject to 25. So, the IRS is and the government is not, you know, they're not very nice about capital gains when it comes to those property. They want to get more than 20%. They want to charge you 25%. And this is known as unrecaptured section 1250. Now, some of the gain could be treated as section 1231, which we'll see under what circumstances. So, to compute the unrecaptured section 1250 gain, we have to compute the gain recognized and compare the gain recognized to the accumulated depreciation taken on the asset. Wow, this sounds like 1245. Indeed, it's basically like 1245. So, gain recognized versus accumulated depreciation taking. The best way to illustrate this is to look at an example. We have a business person acquired a retail building for 450. So, that's the cost of the building cost 450. During year X1, the building was sold in year seven for 380. So, we held it more than a year. We applied the straight line depreciation, therefore, we don't have to have any section 1250 depreciation recaptured that subject to ordinary income, which accumulated depreciation amounted to 135. So, we have the cost of the building. We have accumulated depreciation. Now, we can find the adjusted basis. And if my math is right, this should be, that's not, for some reason, when I'm doing this, I don't do the math correctly. So, the adjusted basis is 315 for this building, adjusted basis. Now, we sold this asset, this building for 380. So, if we sold it for 380 minus 315 adjusted basis, that's going to give us a realized gain of 65. Now, what we do is we compare the realized gain to the accumulated depreciation taking and the lower of those two is subject to what? Subject to 25% tax. Therefore, the gain is subject to 25% tax. So, the adjusted basis of the building is 315. The gain is 450 minus 315 equal to 65, which is lesser than the accumulated depreciation. And this amount is subject to 25% tax, the 65,000, which is section 1250 unrecaptured gain. Now, what would happen if we sold this building for more than 450? Now, what is the special about 450? That's the cost. If we sold it more than 450, that additional cost, that additional amount above 450, which is a gain, that's not subject to this 25%. It's subject to 015 and 20%. So, if we sold the building for half a million, then we have an additional $50,000 in gains that's subject to 015 and 20%. Actually, we really have to do the computation specifically, but that $50,000 that's above the original cost is subject to 015, 20%, depending on the taxpayer status, whether you qualify for 015 or 20%. What should you do now? As a CPA candidate, as an enrolled agent, as an accounting students, please go to FAHAT lectures and look at additional resources, multiple choice, true, false, exercises, additional lectures. That's going to help you prepare for the CPA exam. That's going to help you prepare for the enrolled agent exam. That's going to help you prepare for your accounting course. Good luck, study hard, and of course, stay safe.


I start in the name of Allah, the All-Merciful, the Ever-Merciful, and the Everlasting Curse on the Satan and his followers. Allah's blessings and peace be upon Muhammad, the Prophet, and upon his pure family. Our respected viewers allow me as usual to start with one of the sayings of the Master of Martyrs, Imam al-Hussein, when he says, One who pursues a goal, through sinful ways, will ironically distance himself from that goal and will eventually be approaching what he was afraid of. Our respected viewers, peace be upon you and welcome to Who Is Imam Hussain, a series of episodes in which we talk about the different stages of Imam Hussain's life, starting from the beginning of his life, then talking about some of the events and stories that happened to him during his life. And then we mention some of the prophetic quotes, said in his right, by his grandfather, the Prophet of Islam, and then ending up with his unmatchable and paralleled martyrdom. My name is Hassan Hadi and I'm honored to be hosting this program. Our respected viewers, in the previous episode, we spoke about the oppression of the Prophet of Islam. Our respected viewers, in the previous episode, we spoke about the oppression and injustice done unto the Prophet's family and how Imam Hussain, as a young man, had felt that deeply. However, in today's episode, we will continue talking about the same meaning yet in a more elaborate way. Immediately after the martyrdom of the Prophet Muhammad, Allah's blessing and peace be upon him, Imam Hussain suffered the oppression of his family when their house was attacked to force his father, Pledge Allegiance, to the first tyrant, Muawiyah, Allah's curses be upon him. In the course of the onslaught, Imam Hussain saw his beloved mother being assaulted and gravely injured, which resulted in the martyrdom of his unborn brother, Mohsen, alaihi salam.  In the onslaught followed, Imam Hussain, alaihi salam, would suffer the loss of his mother, who would finally succumb to the injuries suffered during the assault. Baba was far from the end of his sorrows, alaihi salam. One after the other, he would have to watch his family fall to the source and poison of the enemies of the prophet house. First his father, then his mother and his younger brother, al-Mahsen, alaihi salam, and then finally his older brother, al-Hussain, alaihi salam. One after the other. What Imam Hussain, alaihi salam saw was beyond the human ability to bear. Indeed, it was that. With respect to the viewers, as a youth, Imam Hussain felt the pain of his family and the oppression they went through, however, and fought for their rights as well. As Suyuti may Allah be pleased with him reports that once, when the second tyrant ascended the prophet's pulpit to give a sermon, Imam Hussain stood up and shouted, Get down from my father's pulpit. Thus, shaming Yazid before the public, he forced the usurper to acknowledge the following. It's the pulpit of your father, not the pulpit of my father. Imam Hussain, alaihi salam would need this bravery in the years that followed when his brother Imam Hassan, alaihi salam was martyred. Imam Hussain was one of those carrying his body. Hassan had already willed that he be buried next to his grandfather, if possible. Otherwise, he will be buried next to his grandmother. Fatima bint Assad, may Allah be pleased with her. All master of martyrs, peace be upon you when you were born and when you were martyred and when you will be resurrected. Our respected viewers, let's pray that Allah the Almighty hasten the reappearance of the master of our time to interpret what his grandfather says, I only desire to spread good values and to prevent evil. This is what we have for you in today's episode, until we meet again. Thank you very much indeed for joining us. Wassalamu alaikum warahmatullahi wabarakatuh.


I was very happy, I was a bit disappointed to be overtaking the last lap, I turned one, I got bumped into, but if not I think we did a good job. Obviously my pace is not exceptional yet, but you can see my ear, my ranking on my racing is quite low at the minute, I need to do a little bit more. The distance that I miss, I need to understand where they are, so I will keep practicing, I will be with the boys and they will keep giving me advices and watching data and telemetry is very interesting.


I'm Sara and I'm from Texas. I just moved here and I'm currently living in Pasco. Well, welcome to Pasco. So tell us how did you hear about Hungry Jen? Well, I was on Instagram and I tapped on the Pasco story and I found Hungry Jen and I went to the website and I watched a couple of sermons and I decided to come. And so tell us how, what happened when you came here and how has your life been since you've been here? Well, I've committed myself fully to Christ and I have, you know, just seen breakthroughs happening and everything has been wonderful so far. And I've got plugged into a home group and on the first time that I went into the home group, I got baptized in the Holy Spirit and received the power of tongues. Let's give it up for Jesus.  No, I have not. And so since you've been here, I know you were telling me you've connected to a home group, you've built friends and you've become a family with the people here. Even though you've only been here a few short months, I know you were mentioning this feels like home already. So what would you advise somebody that is thinking about joining a church and fully dedicating their life to Jesus? Just commit your life, put in first and he will make everything line up and you'll receive blessings and just get plugged into a group so you can have that fellowship with everybody else. Amen. Amen. Thank you so much for sharing. That is incredible. Thank you for watching this content. I hope this was a blessing to you. If you're like me and you like to click on things, click on this, subscribe to our channel and the content will come to you every time we post it. And remember, the best is yet to come.


Everybody forced here up in a box of 2021 Penini one football for Andrew M Let's travel orange right here Trevor Lawrence right here. Right here Give it to him for us Hey, is a jail in a waddle 11 of 25 formula one dual patch rookie auto Nice hit there Andrew dude Let's go four color patch three color patch Good stuff. Thanks again. We'll get it out to you


I'm Miquel, welcome everyone. I work for Bootlin, which is formally a free electrons. I've been quite active recently in the non-subsystem, that's why I'm going to show you today the new interface that has been merged recently to handle non-flash. I live in Toulouse in France, so please excuse my French accent. I will try to do my best. So I decided to start, actually I wanted to show you the stack in Linux, but while I was writing the slides, I found it was kind of boring to spend an hour on that. So I decided to add a bigger part about the physical aspects of non-memories. But then I will explain how non-flashes are linked to your SOC and how you can control them using this interface XACOP. So before starting, I'm not a non-expert. I will probably simplify aspects about the physical part, and I will focus on SLCNAND, which stands for single-level cell. Today there are other technologies, MLC or TLC, that can handle more than one bit per memory cell. But to simplify things, I will stick to SLC today. So before the technical aspects, just some commercial information. NANDs were once designed to replace hard disk drives. You can find them, they are widely spread in consumer electronics like USB sticks, SSDs, SD cards and so on. And they come under different flavors. So the one I just talked about are managed NANDs. You don't see it's a flash, it's a NAND inside, you just see it as a way of storing data. I will speak about row NANDs only, also called parallel NANDs. So let's start with the explanation of how a non-memory cell works. Well I'll start deep into the matter with the silicon atom you can see on the screen. It has 14 electrons and also 14 protons. The electrons are spread across three orbits. The external one is called the valence shell, where are the valence electrons. Each of these four valence electrons will bind with another valence electron of another atom and one silicon atom will bind with four other silicon atoms. It makes the crystal. The crystal is electrically neutral and you won't have any electricity in it unless at least it would be a complete insulator at zero Kelvin. But in our world, if for instance light strikes an electron on the valence shell, it will absorb a quantum of energy and jump to the upper orbit, the conduction band. Here it will drift randomly in the matter and if you would apply a voltage across the matter, it will create a yield of electricity. So to make this state permanent, people invented doping. Doping is about adding impurities in the silicon crystal. I mean if you add other atoms than silicon in a pure crystal, if these atoms have either one more or one less electrons on the valence shell, you will have either one electron that will be free or you will lack an electron on the binding atoms. So it's endoping when you have one more electron because it's a negative charge that moves and pedoping for positive when you have a hole. That means your atom is only bound to three other silicon atoms and four, actually four and one of these atoms will have a free electron which aims to bind with another one. That cannot. If you put side by side these two regions, N and P regions, you create a diode. Electrons close to the junction will jump into the P substrate and combine into holes in the P substrate close to this junction. It makes this area of the P substrate electrically not natural and same on the other side and it creates a small electric field that will prevent other electrons to combine with other holes a bit further. If you apply a voltage across the diode, well if you apply a positive voltage on the N side, electrons will be attracted but you won't have any current.  So this is the basic of the MOSFET, the transistor which is made of in the center, it's a metal oxide semiconductor area because you have one leg which is conductive and an insulator which is the oxide and then the P substrate, the semiconductor. If you apply a voltage across the external legs, you won't have any current. But if you also apply a positive voltage on the gate which is the leg in the middle, positive charges will go on the gate and will repeal other positive charges in the bulk, letting a small channel, letting the electrons from one N side going through the other N side, jumping over the P substrate through a thin channel. So this is the basic of transistor but we'll agree that you cannot store data with that. That's why people added an extra floating gate. This extra floating gate is surrounded by an insulator, still the same oxide. And if you do the same thing as before, I mean applying a voltage across the external legs and also a positive voltage on the gate, you'll still have your thin channel of electrons moving from one N side to the other. However, if you have a lot of electrons in the floating gate, you'll have a big amount of negative charges that will attract the holes from the P substrate and kind of create a big positive barrier that electrons could not jump over anymore. And this way, you actually have a zero because you don't have any current anymore through the MOSFET, through the transistor. So when there is no current, we call that a zero and if I go back one slide, when you have a current that is flowing through the transistor, it's a one. So what you have to ask right now is, okay, but the floating gate is surrounded by an insulator, so how do you put charges into the floating gate? And this is quantum mechanics. It's called the Foller-Nordheim Tunneling Effect. It's when you apply a very high positive voltage on the gate that will attract and help electrons tunnel through the oxide layer until they get into the floating gate. Please notice that the oxide on the top is a bit thicker than the one at the bottom, so electrons could jump from the substrate into the floating gate, but not from the floating gate to the metal gate. That's how you program a cell to a zero state. In the other way around, if you apply a high negative voltage on the gate, putting a lot of electrons on the gate will repeal the electrons that are trapped into the floating gate back into the substrate, and that's how you erase the cell. So this is a much simpler view of the exact same transistor. You still have the floating gate in the middle. If I put two cells like that side by side, I should have an NPN, then another NPN region on my substrate. But instead of doing that and adding a wire between two N regions, what a hardware designer did is to only take one piece of substrate and dope N regions at regular intervals so that your layout is much smaller and you can have much more cells on the same silicon area. Just a side note, when you have like these two cells side by side in series, if you want a logic zero on the right side, you have to apply a logic one on both gates so that this point would be at the ground. This makes, if you put a one and a one, then you get a zero. This is the non-gate, right? That's why we call this kind of memory a non-memory cell. So two cells is good, but not good enough to store actual data. So what we do is we create strings of non-memory cells in series, of course. You can go up to maybe 64 cells in series. The only thing is to cross the diode, you must apply about 0.6, 0.7 volts across it. So the more cells you put, the more higher voltage you will need to make current passing through all the transistors. So how do we read one cell, one bit from this string? Just applying a positive voltage on the gate as we've done before is not enough because if the other transistors in the same string are not passing, you won't have any current anyway. So what we do is applying an higher voltage on the other gates, not that high otherwise you would produce the tuneling effect, that's not what we want, but high enough so that these transistors will be passing anyway, no matter if they are charged or not in the floating gate. And that's how you can read one cell from a string. If you put a lot of cells in parallel, there you have absolutely no limitations on that. You get what we call with our terms a block. For those who are quite used to manage non-flashes, it's called, you know the terms blocks and pages. A page is actually a row of cells connected by their gate. So when you want to select one bit, you actually select the whole page. That's why you can only program and read one page at a time. I lied to you a bit before actually to erase a cell, you do not apply a high negative voltage on the gate because it's kind of difficult to create in a mid-existent and we already need a high positive voltage. So instead we apply the high positive voltage on the bulk. It has the same effect of attracting electrons back into the substrate. However, the bulk is shared across all the cells in one block. That's why non-memories, when you want to erase non-cells, you have to do it blocks per block. So this is a bit to sum up. You cannot program a cell to a one state. You can only program it to a zero state and if you want to erase a cell, you have to erase a wall block and so you have to erase the wall block before writing the page inside it. You can feel that this design is a bit fragile. Depending on the positive levels, you choose, you will have a following time effect which will be strong or weak. There are several flows in the designs and let me explain a few of them. So bit flips, everybody knows what it is. It's your writing, your writing a bit, you expect value and when you read it, actually you don't have the value you expected. If for instance the cell was not fully erased or programmed, it happens because some of the electrons that tunnel through the oxide won't get it to the floating gate and will get trapped into the insulator. This creates a small negative area that will rebuild some electrons to tunnels through the oxide and will prevent the cell to be programmed. There is also data retention issue.  That's because when tunneling, some electrons collided with the material and damaged it so it kind of creates some path between the floating gate and the P substrate. That's why with time, some electrons will get back into the substrate and you will lose the charges you put in the floating gate. And finally, obviously read and write disturbances. You remember the string where you have to apply high voltages on all the gates to read one cell. Of course tunneling is a stochastic effect. You cannot know if other electrons will enter the floating gates. You don't want to modify. So you can do this, read and write on erase cycles about 100,000 times for an SLC NAND. It's much less for ML C NAND actually. And that's all for the physical part. Now you know how, we know how a NAND cell works and let's think about just the NAND chip now and how you can wire it in your design. You do this for parallel NAND of course through the use of the NAND controller. The NAND controller is wired to your NAND chip, is wired to your NAND controller through a NIO bus which is either 8 or 16 bit wide and there are a lot of logic around it, around them. I will start with the lines at the top. The chip enabled line is here to select one chip. The host, the NAND controller will select a chip.  And the read deposit pin, it works in the other way around. It tells the host that the NAND chip is ready or not and maybe it is processing some commands and need more time. The write protect line is here to prevent any loss of data so the NAND chip won't accept any arrays nor program operations. I will go back on the last remaining lines. Just I want to show you the non-protocol, it's only three types of cycles that can happen on the iobus. The command cycles, the address cycles and the data cycles. Data can go obviously in both ways while address and commands are always sent by the host, the NAND controller. That's how we use these lines, CLE stands for command latch enable. It means a command is being sent by the host controller, by the NAND controller. ALE stands for address latch enable and read enable, write enable. The last two lines are here to inform who will talk on the bus if it's either the NAND controller or the NAND chip. So putting together NAND restrictions, you get NAND operation to achieve a real goal like reading something. These are examples. To read, let's start with the simplest one, the reset. If you want to reset the chip, it's just a matter of sending a command which is 30, no it's FF, sorry, and then wait for the NAND chip to be ready again and that's all. For the read page is a bit more complex, you'll have to send the zero command, one command cycle. Then a few address cycles. So the first command cycle tells the chip, okay, I want to read something. I will read the page, actually. Then you send it address cycles to tell it where you want to read. The 30 bytes, the second command cycle is here to tell the chip, to the chip, okay, now you can go into the actual NAND and bring the data into your local cache. At this moment, the chip will asset the busy pin, so you'll have to wait for the operation to finish and once this is finished, the host controller will asset the write enable line so the NAND chip will send the data through the bus to the NAND controller. These controllers come into a very large, there are a few, many flavors of them. Some are really simple, now they tend to be more complicated, more sophisticated. The main job is to talk to the NAND chip, but more and more they embed additional logic like error correction code, ECC, to handle directly the bit flips and also some advanced logic to enhance the throughput. So let's see now how it's handled in the Linux kernel. This is the MTD stack, memory technology device stack. You probably already heard about UBI and UBI FS, it's a file system level. I won't talk about it today. Your request will go through the MTD layer which abstracts the type of flash, it can be no or NAND, spy, row, anything. If it comes to NAND to parallel NAND, it will go through the NAND core also and then the NAND core will translate the instructions from the MTD layer into some understandable request to the controller drivers. So let's see how it was done until recently. We used a lot of hooks to achieve that, who has already been into the NAND subsystem here, please raise your hand just to, okay, only one person, two, three, okay. So these are the hooks that are usually implemented in the NAND core, the NAND controller drivers. Command func is the one in the NAND core layer. It was supposed to handle all the command and address cycles and it calls one hook from the controller driver which is called command control and send it each time one command or one address cycle and that's all. Other hooks from the controller drivers were used like wait foo or dev ready to wait for the NAND chip to be ready. Also various hooks are written write, byte, word or buff to retrieve or write data. But this approach has some limitations. The NAND controllers have become more and more complex and started, old ones could just send independent cycles, command, address or data cycles with no problem. New ones started to aggregate all of that in order to enhance the throughput for instance and well it's not a big issue to, these hooks cannot handle this kind of operation but that's not an issue, the NAND controller can still be driven by these hooks. But some of controllers started to not implement the possibility to send only one command or one address cycle. So developers started to overload command foo from the controller driver and now we have plenty of different implementations of that hook. That's a bit annoying because first when you have to reimplement something that should be in the core, that was in the core, you have a lot of situations to handle and people just supported their own use case. The logic, because it changes from one driver to the other one, cannot be changed as easily as we would like. NAND vendors still add new operations if we trust the Brazilian which is a current NAND maintainer. But we cannot add the support for these operations because it would be too much trouble handling all the different implementations of command foo. And most importantly, something which is really, really dangerous, drivers started to predict what the next move of the core would be because command foo does not provide the IO length. You cannot know from command foo how much data you will have to read or write. People started thinking what would be the length of the data move. It's a clear symptom that the non-core did not fit any more the needs. I'm pretty sure it fit the needs at the very first beginning, at the very beginning and controllers were quite simple, but not anymore. So that's why we introduced XACOP. This interface is in the non-core and like command foo and the other hooks before, it aims to translate MTD request into NAND operations. I truly believe that it will fit most of the non-controllers available today. It has been merged the 4.16 kernel and the Marvel non-controller is already converted. The FSMC12 and some other really close to be or it's on the road map. So how does it work? Well, from the controller driver point of view, you will receive an array of instructions that makes the overall operation. That's the difference with before. Your driver will have to split the operation into sub-operations if needed, if it cannot handle the wall block, and if it cannot handle at all the operation, it will return an error. It hasn't done before neither. So maybe in the near future, the non-core could take over and try with another operation to do the same thing. There are multiple ways to do the same things with the NAND protocol. So for simple controllers, it's just a matter of looking at each instruction and executing it one by one, and that's all. But for more complex controller, we introduced a parser. The parser is here to make the logic much more simple and let the non-core be clever, not the non-drivers. And the way to implement it is to fill an array of supported patterns. Each pattern is an array of instructions, non-instructions, and a callback. This is a simple example of what it could be. The first pattern is a command and can support a command up to five address cycles and up to one K of data move. The second one can handle either a command cycle and or a wait cycle. And the third one can only handle one K up to 1,024 bytes of data. So if, for instance, you want to reset your chip with this kind of driver, you will give to the non-core, to the parser, both the operations that were given to you by the non-core and the parser array, the patterns you support, so that the parser will go through all the supported patterns, find a match, and execute the callback, and that's all. And it makes the logic from the controller driver really, really simple. So in our case, the reset command could be handled directly by the second pattern. The second, the read ID could be handled by the first one, with no problem, even if there is only one address cycle, we don't care. We can handle up to five address cycles in this one, so it's okay. But the last one is a bit trickier. There is no pattern that will handle directly the whole operation, so the parser will split it into three shanks. The first one will be just the command cycle on both address cycles, and the first pattern will handle it. Then probably the second callback will be used to send just the second command cycle, and finally, you'll use the third callback to send the data, but it will be called twice because in this example, you can handle only one K of data at a time. So this is how Exegob is supposed to work. That's all for this interface, but I found interesting to give you a bit more, at least two other hooks, helpers, that you have to implement from your controller driver. So Exegob is one of them. But you also have the setup data interface, which is here to change timings from the controller side, because, of course, you can handle a non-chip at different speeds, and it's important that both your non-controller and your non-chip will run at the same speed. And the last one is select-chip, which is a way to select the non-die, actually, not the entire chip, and for simple controllers, it will be just the handling of the pin that selects the chip. But you can also maybe change the timings if you have multiple chips in parallel, if you are not using the same timings for all the chips. And yeah, that's all for the MTD stack. If some people want to help migrate these drivers, they are welcome. Just a few tips maybe you can use. You should use the user space utils, now not the one in the kernel. There are modules that do the same things, but they are deeply created and might be removed quite soon. And yeah, do not hesitate to read the documentation, even if there is almost none, or it's really, really, really old. So I would suggest you instead to contact us on the mailing list, and please do not forget the non-mentainer, it makes it mean a bad mood when it has to read the whole list. And that's all. If you are interested in the non-framework, I suggest you to have a look to the talk of Boris Brésilion in Berlin in 2016, and also at the talk of Arnaud van der Kapelle, which is about the physics of the non-memories, it goes much more in detail. It was the same year in Berlin. Yeah, thank you very much for your attention. If you have any questions, I'll be pleased to answer. Yeah. Oh, what kind of security did we implement in the parser? We do all the check in the non-core. So both in the parser and the functions that will call you functions from the non-controller driver. So you shouldn't have to worry about all of these errors from the controller driver. It has already been checked in before, both in the parser and in the non-read and non-functions that are in the core. Any other questions? Okay. Well, thank you.