Dr. O. In this video I want to review the differential stains. So sometimes you'll hear me call these diagnostic stains because what I like about these is you know there are simple stains that just color something, stain something to make it easier to see. Differential stains, they answer questions, they tell you something as well so that's why I like to use the word diagnostic stains but differential stains is just fine. So I'm going to jump right in here and cover all of these so let's go ahead and dive in. The first one is the Gram Stain. I did a separate video on the Gram Stain because it is so important but the Gram Stain is generally the first stain you're going to use on any organism, any unknown organism because it'll help you determine what kind of cell wall it has. So gram positive cells are going to have big thick peptidoglycan cell walls, gram negative cells are going to have a thin peptidoglycan cell wall with a lipid outer membrane that can make them a lot harder to deal with in a lot of cases. So I don't want to spend any more time on that because just watch the separate video on the Gram Stain. So here we see just a close up of the purple organisms would be gram positive, the red or pinkish organisms would be gram negative here. The acid fast stain is very important so now the key thing I want you to know is which types of organisms we're looking for when we do a stain like this. Now with the Gram Stain I do expect you to know the actual stains you use and the order you use them in but that's the only one. So acid fast organisms are going to be two types and that is the mycobacterium and the nocardia. So here you see an example of mycobacterium tuberculosis obviously the causative agent of tuberculosis. The other big mycobacterium is mycobacterium lepre which causes Hansen's disease or leprosy. So acid fast stain is used to determine if you're looking at a mycobacterium, a nocardia or anything else. You see how there Gram Stain tells you something about almost every organism. The acid fast stain is not going to do that. So if you want to know the real quick basics of the of the acid fast stain you use here it says to use basic fusion that's fine but I prefer Kinyun's Carbofusion. I feel like it's a more effective and then you use acid alcohol as your decolorizing agent and then you add the counter stain Methylene Blue. So here we see a close up of that organism. So the red organisms would be acid fast positive and the blue organisms would be acid fast negative. So what it's looking for specifically is what organisms have a waxy material in their cell wall called mycolic acid and that would be your mycobacterium and your nocardia. So that's the acid fast stain. Next we have the spore stain or the endo spore stain. So when would you use this? Well, you'd use this anytime you're concerned that you're dealing with a spore forming organism and that would be the clostridium and the bacillus. So bacillus you think like bacillus anthracis, the causative agent of anthrax. Bacillus serious, bacillus subtillus. These can sometimes cause foodborne illness. But the clostridium are to me the really big ones. You have clostridium difficile or C. diff. Anyone that works in healthcare knows that's a big concern. Clostridium tetanus, the causative agent of tetanus. Clostridium botulinum, the causative agent of botulism.  But the spore stain will highlight them. So there are multiple staining techniques to look for spores. But primarily what you're going to use when you're looking for spores is you're going to use malachite green as the stain that should stain the actual spores green. And then whatever technique you use, you're going to counter stain with saffronin, the same saffronin used in the gram stain. So here we see a close up. So you see the green spores inside the regular bacterial cells. Then you see some vegetative bacterial cells that don't have spores. So that's the spore stain. Just a reminder, it's useful when you're looking for a clostridium or a bacillus as far as the two genus here. All right, next we have the flagella stain. So like the name implies, the flagella stain is going to try to identify organisms or help you see flagella if they're there. So this would be an example of a mordant. I don't care if you know what the mordants are, but mordants are generally used to attach stain to an organism. And the flagella stain is where we need a mordant to actually thicken. So it makes the flagella more visible by layering the mordant, the chemical compounds on them. So the flagella stain is useful if you are trying to identify organisms that have flagella, which were used for movement. We cover that in a separate video as far as bacterial anatomy. Here you see a more close up of a really awesome one. Obviously, when you think of flagella with human cells, you think of that kind of one whip-like flagella on a human male sperm. But the flagella is a very powerful, very complex system in bacteria. Pretty awesome, so we'll cover that in other places. And then lastly, we have the capsule stain. So here's the key with the capsule stain. This is actually not a great image, but capsules can't be stained. So a capsule stain is an example of a negative stain. So very important to understand that term. A negative stain is where you stain the background. You stain everything else but what you are trying to identify, which is the capsule. So we can go a little bit closer here. Actually, we have two images here now. The one on the right is better. So notice the white, the clear areas around those microorganisms. Those are the capsule. So you stain the organism inside the capsule. You stain the environment outside the capsule, but you couldn't stain the capsule itself. That's why it's called a negative stain. You stain the background. And what you see is what isn't stained. So all right, so that is the capsule stain.


Last class, we looked at interfacing using Tiva launchpad for PWM interface ok. So, how do you run the motor by using PWM interface? We took an example of Tiva, but that can be extended the syntax is different, but the philosophy remains the same. So, the same thing can be extended to any other microcontroller as well. Now, today's class we are going to look at interfacing of encoder by using this dedicated quadrature encoder interface QEI interface in Tiva launchpad. So, again here we will introduce first this philosophy of like how this encoder interfaces, they were typically what kind of registers or control registers are there for like getting these interfaces done and then we will look at little bit more details about programming using Tiva launchpad. And further than that we are going to look at also the sampling time, how do you set up the sampling time in the in the mechatonic system working ok. So, microcontroller needs to have some specific sampling time for the system to work ok, why all those kind of things we will discuss in the in the class. So, let us get started here. As you know this working of incremental encoders we we are just recalling we have seen it before. So, what happens is we have just slits in the wheel and then you have this light source and light detector photo diode and these light source and detector they work in pair and when the light passes you know you get pulse light passes through that and then the this slit passes the slit cuts the light you get a pulse ok. And then we know that there are two sensors needed A and B to sense the direction in this case ok. So, these two outputs A and B are 90 degree out of phase with each other, how they are made 90 degree out of phase by their proper placement with respect to each other electrical domain like you do not need to have them so closely spaced. One can be sensing here and other can be sensing somewhere else since this all the slits are uniform you will get 90 degree out of phase all the time. And we may use another sensor to to get a position absolute position of the of the encoder field ok that is called index pulse ok it is typically termed as I or Z. So, we we know that these are the pulses that we have we get and in one direction you will get this kind of pattern of the signals in other direction you get some other pattern of the of the of the signals. And A and B signals they they are to be processed in some way to to read these patterns and get you know encoder output ok. So, this is what encoder like you know the any circuit for decoding this you know they do they they recognize this pattern and then they produce some pulses corresponding to each of these phase or each of these kind of a combination of A and B. And so, the then the the the the pulses are to be counted to get the encoder count ok. So, that is how the the internal circuitry would would be designed or positioned to to count these pulses and then change the direction based on change the direction the count up or count down would be changed ok. And then the direction change will be sensed by saying ok look after 0 0 if there is 0 1 then there is a clockwise direction and after 0 0 there is a 1 0 then there will be anticlockwise direction. Something of that sort some logic will be used to get the direction sense ok. So, this is there are many advantages of using this incremental encoders as we have seen there digital output sensors. So, there are there are noise free. So, there is no noise error in the signals. And small amount of noise if it all that is in there that can be also taken care of by some filtering as we will see in this QEI interface of Tiva. Then it has a quadrature output the 4x kind of output. So, 4 pulses will get per one hardware slit ok. So, this is what will happen like you know these are the 4 kind of a signals you will get in one cycle of A for example ok or of one cycle of B would so to say. So, one slit will correspond to 4 pulses that is why it is called the term quadrature ok. This is a quadrature output. And then you get a very accurate speed estimation by looking at like you know time between two pulses or like you know number of pulses in a specific amount of time ok. That is a way like you know you get very accurate estimate of the speed in the in these encoders ok. There are two ways one is like you know look at time between the two pulses or you look number of pulses in a given amount of time. Now how this is up and down count is done in Tiva, how the speed can be estimated we will see in detail for the Tiva interface ok. So, as we have seen for this interface is for up and down counting of the incremental encoders as the position changes for the encoder. And then also for the speed and estimate. Now see in the absence of this interface like you would need some kind of a circuitry to do this job ok. So, if you are interfacing encoder with not with Tiva, but any other kind of a microcontroller and does not have this QEI interface ok. Then what to do? Then you will use this chip called HCTL 2021. That HCTL chip is going to do this job of what this interface is doing. So, basically idea is there is some kind of a clock based on the clock you will take this inputs A and B and process them internally to as I said like you know to generate like four pulses per one kind of a cycle of A. And then those four pulses are like you know those number of pulses will be counted by using some kind of a counter ok. And that up and down count will be changed based on the direction what direction logic ok. So, this is how this interface will typically work and we will not get into the details of logic circuit to do that and all, but we just need to kind of understand that it will have to take inputs of this A and B and process them in some way to kind of get you the count. So, this will happen in QEI interface which is already there in the microcontroller circuit itself like know it is part of the microcontroller. So, you do not need any extra chips as for a for Tiva kind of a microcontroller if you are using this interface. So, there are two modules in Tiva for QEI. So, you can like know interface two encoders in in Tiva ok. And each of the module has input signals A and B and index pulse also is input. So, three inputs are provided in each. And typical features are like there is a position integrator to track the encoder position of course, it will it should give us a position that is what we are interested in. Then programmable noise filter is there ok on inputs A and B and Z. You can have some kind of a noise filter to be applied. Then velocity capture that is done using some bit in timer we will see how this velocity capture is done. And the input frequency can go as high as up to 1 by 4 of the processor frequency ok. So, this is really fast kind of a interface. So, see so, then you can capture very like large amount of speed or very high speed data can be captured. Because higher the speed the number of pulses coming you can see would be much more quicker ok. So, for example, if you see these pulses that are coming like higher the speed this time duration between the two pulses of this A or B is going to like start reducing. And it may reduce at some very high speed to some extent that you may not be able to count at fast ok. So, this that is a limit that is given here ok 1 by 4 of the processor frequency is what. So, if you have 50 megahertz for process frequency typically 12.5 megahertz will be the frequency of input ok. So, that is pretty high I mean the depend upon encoder of course, your resolution you are using. If you are using encoder with a nanometer kind of a scale resolution then your speed will get limited by this number ok. But if you are using micrometer kind of a resolution for the encoder then I mean I am talking of linear right now, but it is applicable in the rotary case also as well ok. So, higher speed if you want like you know you need a faster kind of a microprocessor to get that higher speed encoder readings recorded. Otherwise you will have a trouble ok. Otherwise you will you will miss out the or you will lose the pulses. And when the pulses are lost and then your count will be will not be faithful. So, if you are using only the speed kind of a application there are some different kind of a ways we can one can do this operation you you do not need then depend upon how fast your speed application is. You can just make use of index pulse only to do the speed monitoring ok. If your speed fluctuations between the two kind of a index pulses or within the rotation are not too many to not bothering to your application then that can be done. But for all the robotic applications you will need a accurate positioning where you are interested in not just the index pulse, but you are interested in entire speed of the robot from starting to end kind of a trajectory point trajectory. Then like you know you will have to have you know plan your hardware I would say to do this high speed kind of a measurements faithfully ok. Then there are additional features where there is a interrupt generation also possible. So, you can generate interrupt on index pulse this will be useful for resetting your encoder value for example, in any in case. So, so say for example, if you have a robot kind of application it is a homing or zero position of that robot on the power up can be done based on these kind of a idea. Then you have a after velocity timer expiration there is some kind of interrupt generation. So, these are these kind of different possibilities for interrupt direction change happens you generate interrupt. The then phase signal error head then in that in that case you can generate some interrupt to kind of halt your application or something like that ok. So, this interrupt how do we how we can use this up to you to use this, but this is a facility that is provided by the by the interface ok. Now, let us see little bit more detail of this interface in Tiva. So, there are two phase signals phase A and phase B that is what they call it N is like no channel 1 channel 2 something and they can be swapped before repeated by the module ok. So, these are additional facility that is provided in Tiva. See many times it happens like when you say rotate the encoder you see look to set up things properly for our mechatomic system to work as what we do in our normal you know calculations or mathematical model. The positive voltage given to the motor should result in positive displacement ok. Many times this is this may not be true based on your hardware connections ok. So, if that is the case then we need to just swap this phase signals ok two phase signals. Then what will happen is for positive suppose for positive rotation like you know the count is actually going down or count is counting down then by swapping like you know you can correct for that ok. That is the facility that is provided in the. So, you see to correct some miss wiring of the system is what they say ok. So, you miss in the wiring. So, you can correct it by checking the wiring and like you know doing it correct wiring also, but this is a software facility that is provided by the interface to avoid the injury. Then input signals will have this digital noise filter that filter can be enabled by using this bit in this control register. So, see these are the kind of registers that you need to look for you know doing this using this facility ok. So, if you want to filter like you know use noise filter then you use this kind of a bit in the in this control register and you will get that facility. So, we will see there are two again as we said. So, in the case of PWM here are there are two kind of a ways of philosophy of programming ok and two ways of programming that both ways can be ok to kind of go ahead with. One is like based on these registers understanding how these registers work in the case of Tiwak in particular here and other is by using API libraries that are provided by the manufacturer ok. So, we saw that philosophy and how that can be used in case of PWM. We are going to look at similar kind of a thing in the case of this quadrature interface today. Then the mode of operation that can be changed there are. So, this you can see what are the modes of operations that are available, but that can be changed by using some other kind of a bit in the. So, there are these kind of a description will be given and then this model you know block diagram is given ok. So, this how do you read now this block diagram ok how to make sense of this ok. So, you need to read a little bit of a data sheet see these are the these names that you see here they are basically registers ok QI status register QI CTL is a control register then some like kind of a timer load register is there then you will have these signals are coming and getting into this some kind of a some circuitry which will give us output of the direction and number of pulses. So, phase FHB like know for one cycle it will generate 4 pulses here and those pulses are going to get kind of counted somehow up and down and the output will be available in this QI post kind of a register and these are the kind of a ways one can think about reading this ok. Then there are these interrupt control that is there here. So, some bits to kind of do this interrupt control some control registers to do that interrupt control ok. So, this is so, you need to see what are the inputs out of these what are the outputs and see whether like say for example, you can set this QI time or QI load kind of a register ok. And this QI count and QI speed are the results or outputs that are to be seen actually ok. So, these are the output registers QI post is again output register QI max post is where you can write this maximum position beyond which like know the this counting will get reset. Like that there are some things some of these things like I am telling from reading the data sheet, but you can also find out like you know these register details and you can start making sense of such a such diagrams ok. Then we will have little more description now about these ok. So, so, this after swapping like you know the signals are coming up here ok. So, these are already swapped signals ok. So, swapping algorithm is somewhere like you know something will be there in the control ok. So, then let me get this. So, then we have this more description of a. So, position integrator block is what is using these signals as we saw here. So, position integrator is here it uses this signals which are processed by this quadrature encoder and then like you know directly gives us this position in the QI post register ok. So, see this is so, easy I mean so, I do not know if you have an experience of like no reading encoder, but we had done it as a part of some other kind of activity and where to interface that HCTL chip to get to this point where you are actually start reading this. So, you need to have this circuitry in place ok. So, you need to connect wires you need to have a hardware like or design some PCB and then get that HCTL chip to interface instead of that in T Y it is happening all internally done you just need to program it and start using ok. So, this is way this way it is so, easy if you have this kind of a interface that is directly available as a as a facility for user to program in the microcontroller itself ok. So, this is good to use this encoders this kind of a microcontroller which will have this QI interface for many mechatronics applications it will be very useful. Because encoders are what like you know give very accurate kind of position estimate we have seen we have seen because of low noise and it is that is why it is more kind of a prominently used in in mechatronics applications and that is where these interfaces or microcontrollers with these interfaces will become you know important for the mechatronic engineer to develop some applications ok. Then velocity capture is is using configurable timer and a counter register and then the count timer this counts number of phase edges in a given time period. So, if you see this block diagram like this is this number of this edges. So, this say we have seen that ok these are the on this line you will have some pulses which are you know coming based on the phase A phase B signals ok. So, these pulses will be typically 4 pulses in one kind of a cycle and these pulses will be counted for a given amount of time and then you will know that ok this is a speed ok. So, that is what is being done and then there is some kind of a velocity pre-divider which will be available in the control QI control register you can set this pre-divider value. So, that you get some kind of a facility of you know reducing the number of counts to do some accuracy or like you know to make sure that the numbers do not overflow the register register that are that are used to store them ok. So, so this this is what is this how this philosophy of velocity capture works ok you the timer will count the number of phase edges in the in a given time period ok. Now the how do you set up this time period for capturing it is QI load register ok. So, this this count in this register will count a number of clock cycles which are there for and then this QI load say suppose like I have QI load value to be 100. So, 100 clock pulses is counted before the timer is before this timer is reset. So, for that 100 clock pulses we see how many edges of the you know microcontroller how many edges of the encoder phase signal they are counted or how many counts of encoder happen in the 100 kind of a value of this QI load ok. So, QI load when it is 100 it will count 100 clock pulses. So, that much is a time that is given for this timer ok that is how one can think about see typically this comes from like you know you cannot say ok I will give some microsecond or millisecond kind of a time in this timer know that time is not typically given. So, everything in the in the microcontroller happens with reference to the clock ok. So, if the clock is running at say whatever frequency number of clock cycles is what you will typically say as a time ok. So, this when timer load register this is see so, typically we deal with all integer values in these registers ok. If you think carefully like you know all these values that we are dealing with are integer values in the register. So, you cannot say like know some unit time you say that unit in terms of like you know number of clock cycles and that will be like a integer value. So, that is how like you specify typically in the microcontroller philosophy these different values of register. Then the count is also pre this pre divided pre division of the velocity count will be possible which can be set in QICTL register ok. And then this value current value will be available in QI count register and once this is timer is finished then that value will be transferred to this QI QI speed register. So, this count is current value and once the count the timer is finished that value will be transferred to QI speed register and it will be available till the next time it is getting reset ok. So, current speed will be taken from this QI speed register and then depending upon how fast you want to update the speed you can like you know put a counter put a timer value accordingly ok. Now, let us see like how do you find the speed of motor shaft in rpm if the counter specifications are known and relevant register values are known. So, this is a question that you need to ponder over ok. I will leave it at this point like you think about suppose I have a motor which is using 1024 kind of a counts in one revolution or now 1024 slits for the one revolution of the motor that is a encoder specification that is given ok. So, we have 1024 slits ok. So, quadrature like you know will have like those be number of counts you know 1024 into 4 counts will be there ok 4096 counts will be there. Now, these kind of counts are coming and then like now we want to know what is a motor rpm when we have set up some we know the clock signal coming at some frequency and we have set up timer for some duration time duration and in that time we are counting like you know how many number of pulses are coming. Then based on some simple mathematics you may be able to estimate this value of a motor rpm ok. So, think about how will you do this ok maybe we can have this as an assignment or you know quiz problem exam problem ok. Then you have again as I mentioned two ways to program QEI interface ok. First is register based programming ok. So, I am giving you the some reference here also. So, that you can go to that you know page 1310 of this microcontroller data sheet that we have shared ok and in that you will find all the details of the different registers that are there ok. And steps that are required to be done to to program this interface ok. And second way is using API libraries ok. So, this again there is this functionalities of this API library are provided in the syntax of API that is again another data sheet that is provided. So, typically microcontroller manufacturers will provide you with this data sheets of you know the details of this how do you microcontroller can be programmed. In some cases you will have this API library files. In some cases you will have to work with only this register for XCP. For example, for XCP 100 kind of microcontroller we have only the like you know this register based programming happening and in TIBA you have possibility of both. And see this API libraries are nothing, but you know if you see these functions if you see the function details you will find the same thing like know that these functions use finally, the register based programming. So, this is like you know the base level programming register based programming ok. Now typical steps that are used in programming this QAI using APIs are you know first you need to have these library files available and initialize these are important so that you can you make use of the functionalities that are provided and then initialize some variables that you want to use in the system. Then for initializing hardware these are the steps for QAI to be followed. So, configure clock frequency this is the typical step for many interfaces like we need to do. Then enable this module ok this peripheral module enabling some functions will be there to you use them to enable the module. Then now see we if you see this map of the pins of this TIBA microcontroller launch pad in these there are programmable GPIO interfaces which can be changed to act as a QI interface or it can be changed to act as some other kind of a interface ok. So, we need to before we start using it as a QI module we need to tell microcontroller that ok look I want to use this particular pin provided for the QI kind of a module ok. So, for example, depot has some pins which are used for QI module ok. We need to enable those particular kind of a ports and then further you know map the pins to act as a QI ok. So, this is done this GPIO pin type is to be defined in some function. So, this is a function that is given for making these pins to act as a QI pins. Then the pin configure which I configure these pins for AB or index kind of a pins ok. So, these are the kind of typical steps that will be given this is all given in the function library data sheet or manual ok. So, you need to find these functions how they are working what is input output and you know all those details you need to find and it will get that. So, see I will give just kind of a brief of some of the things, but you can go ahead and look at this particular you can just search for this function ok in the whole data sheet. Otherwise the data sheet is too huge. So, to find like you can get into QI interface and then like you know start reading some of the part and then you maybe if you want you can search for this particular kind of a phrase and then you will be able to get the details of that particular function. And of course, you will have a sample programs available that also kind of make quite a bit of sense. Once you have this hardware initialization part done then you go to QI module you know function S which are used for QI module programming. So, this is one of first thing you need to do is a configuration ok. You look at this function configure QI configure and see like know it can be configured for mode of operations swapping the input channels required or not required the maximum position value all this kind of things will be put in this function QI configure. Then filter enabling you may need to do ok if you want to use filter ok. Then enable the QI module also you by using QI enable kind of a function. Then you will do some kind of a configuration of velocity capture. So, by using this function. So, pre-divider timer you know those kind of things you can set by using this velocity configuration. And then once this configuration is done you and the QI velocity module also is QI velocity part is also enabled and QI is enabled. Then you will be obtaining position in this QI position get function and QI velocity get function ok. You want to get the direction you can get this in the in this QI direction get function ok. So, these are the ways like you can use these functions to get you the desired output of QI position ok. So, this makes our job quite simple ok. So, by directly using some functionalities you are able to now read encoder and start using that encoder data for further control kind of a programming if you want to use PD control or some kind of a other kind of a control using this data you are you will be able to do that very easily now ok. So, we have seen PWM and we have seen now this QI interface in which by using this now one can start thinking of like you know building like you know entire closed loop system ok. We will talk about that a little bit how do we build a closed loop kind of a system by doing that ok. So, this is just the classification of all these different functions ok. And this is a sample program you can see this part where like you have to initialize add these libraries and get this setup here. Then some of the variables if you want whatever you want to use you can initialize the variables in the in the in here in the main program and then you can initialize hardware and you follow the steps that we just saw ok. So, if you see some of these functions are doing this hardware initiation basically here. So, you are mapping the pins configuring the GPIO pins to act as a as a index pulse or a pulse or B pulse anything like that ok. And you are enabling this QI0 module you are enabling this GPIO D register ok. So, port D we are enabling to kind of make sure that the pins of port D which are used for QI interface are enabled and things like that ok. Then you are doing this configuration of this QI interface here and you can see these are the details of the configuration register QI configure ok. You do all these different different configuration parameters to be set here ok. And then you enable QI interface ok. This is particularly QI0 interface there are QI0 and QI1 two interfaces will be there. Then velocity configuration you are doing here ok. And once this is velocity is configured now you are you will be able to start reading it ok. So, get QI position you say position is equal to so this is from function 0 you are using 0. So, this is from interface 0 with this function by using this interface 0 value can be fetched in this position. So, your position get of QI0 port or QI0 interface you will get you know encoder position of encoder which is connected to this pins corresponding to this QI0 interface. Like that you can have a position QI1 interface position also. So, if you are using two motors at a time you can use this other interface as well. And then position you get position velocity and direction ok. So, this is how typically you go ahead get writing a program to get your QI module working. So, I would suggest that in like you should try this yourself with the with this QI module and the Tiwa launch pad that you might have procured by now and already started exploring different different interfaces. So, use our motor in the kit to do this kind of programming and get a get a feel of what how things are happening. And that is the best learning that will happen if you have doubts clear like you know things you can post and TAs and we can help out with those things ok. So, this how this module is going to work. Now, next we will look at like how do you put together now entire things now on the programming side of the microcontroller ok. The theory part we will look at in the in the future classes to come, but we can now start putting things together once we have we once we know how do you get the position of the motor and once we know how do you run the motor ok. So, we have seen both of these. So, what is that is needed is now to put together. So, what we typically need to do is to run this three operations in a sequence ok. First is a reading of the sensors or reading of encoders, then computation of the control law based on the encoder feedback position and what we want ok. And then finally, using this control law computation you get some kind of a U or output that is going to the motor that is to be implemented on the motor actuator. Typically actuators will be actuated through PWM and then PWM duty cycle is what will change every sample time so to say or every cycle ok. These three operations will go on in a cycle ok. They will keep on repeating with a with some kind of a you know time interval this time interval called the sampling time ok. So, this is a very important concept in in mechatronic systems that you will have some kind of a fixed sampling time that is to be set. So, that these operations like know successfully get carried out every time interval of the sampling time. Now, this time interval needs to be fixed because there are digital implementation of filters that happen in the typically in this case and they depend upon sampling time ok. So, all the implementation digital implementations of the filters will have dependence on the sampling time ok. So, sampling time is very important to maintain in the system. How do you maintain that? One of the ideas to do that is how do you set up that or how do you maintain this sampling time is to write entire program and find the execution time that it takes for this program to run ok. And once we know this is they say it takes 1.5 milliseconds as a time to run the entire program and I want to set 2 millisecond as a sampling time. Then I know like you know 0.5 millisecond needs to be a delay ok. So, I will put some additional delay that is by doing some kind of a delay function and doing I mean keeping microprocessor busy in some some kind of a additional operation in a loop for that much duration and after this delay is performed then again it can start doing this next operation next cycle ok. So, this keep on happening for a infinite loop that is one way of setting up sampling time. But the disadvantage is that there is no flexibility in changing the program easily you need to change program you need to change the delay also. Then there are conditional statements if there are there in the program if else kind of a program then it will change sampling time. So, so it is a it is a it is a cubar some way and then you are keeping your microcontroller busy in doing some delay function ok which are which is of not much of a use it just kind of keeps microcontroller busy you know so as to kind of like know have you give even that much kind of a delay. So, so there should be some there should be a good way out of this we need to use some other way of doing things here and that way is basically by using interrupts ok. So, we recall the philosophy of interrupts where you know say suppose you are reading a novel ok and your mom calls ok. So, you are sitting in basically reading the novel and then the call comes then you you hear the bell ring and then what you do you put a mark in your page wherever you you last year working there and finish the call of course, if you like to many times you may may not like to take a call, but let us say if you want to take a call and you finish the call and come back again start reading the novel ok that is what you do ok. Exactly the same philosophy is there for the interrupt when the interrupt comes on some pin then microcontroller halts whatever it is doing right now and serves something and you know to some run some small other routine that is to be that is programmed to run when that interrupt comes and then again comes back to the main program after finishing that job ok. So, this is a kind of a philosophy of a interrupt that we have seen and if we have this when you come back you may do nothing you may just wait, but to wait for the other signal to come. So, that way that much time is available for microcontroller now to do some other activity if it is to be done ok, but the now the idea is now if we get these pulses coming on this in some kind of a periodic manner ok then this operation same operation can happen again and again and again and again whenever these pulses come ok. So, idea is to use a timer to generate this interrupt pulses every few milliseconds or every whatever sampling time that is needed ok. So, if you want two millisecond kind of a time sampling time you generate this pulse every two milliseconds one pulse comes. This pulse is connected to interrupt pin and at interrupt pin kind of receive this pulse and once it is received the pulse like it starts executing some program which is your program which is doing these three operations that we talked about reading the encoders like computing the control and implementing to the actuator ok. So, this is how it really happens. So, that is what we have seen that we will generate up the pulses every sampling instance or every sampling time and this pulse will trigger the interrupt and start running program called a this piece program that run that we run where we have these three operations are done ok. These three operations that we are writing somebody can write any other kind of a thing in that interrupt service routine but that program is called interrupt service routine ok. So, this is interrupt service routine is a name that is used ISR. So, this is a you know terminology you need to be aware about and the program starts running once the program is finished it will return to the main program if there is any activity remaining to be done in the main program it will continue otherwise it will just wait for the next pulse to come. Then in Tiva this is done increasing again API functions ok and this interrupt service routine is simply predefined name function. So, no nothing needs to be done in the hardware. So, all the things in the hardware are somehow connected in whatever ways it is needed and you do not need to kind of worry about that ok. You just need to use a timer and then like know enable the timer for interrupt kind of operation and that is it you know your job is done. So, we will see the some of the steps here, but the idea here is to do this timer setting. So, typically you will say ok this timer setting will have what all things to be done ok I need to set a time. So, there is I should look for some thing where I can set up the time ok then I should look for that this timer needs to be connected to this interrupt ok. So, it is interrupt enable timer it should happen and then I need to run this ISR. So, I need to look for what is ISR. So, ISR in this case will be simply some predefined name function in which in that function if you write something that whatever we write in that function that will get executed every time the interrupt is happening ok. So, this is how you set up the sampling time in in in the modern kind of like know microcontroller applications ok. So, if you are very you know high fidelity or I would say much better kind of operations of closed loop control can be achieved by using this you know sampling fixed sampling time set up by interrupt based philosophy rather than just using like you know continuously in the loop without really giving any attention to what is the sampling time happening in your system it is better to kind of understand what is this we set what what is the sampling time we want to set and that much sampling time is set properly for the application that application we is going to run much better with a with a higher performance ok. So, this is typically like some functions that are used. So, this timer load set is a function used to you know you can look at this function search for that and like know read the function in API every data sheet and see what are the arguments to this function and what it does and thing like that. Now, for for this this is an example for timer 0 this timer load set function will have these arguments to be used and then this is a period to be set according to sampling time. So, you have again the same philosophy that ok. So, sampling time for example, to be 0.1 second or 100 millisecond with frequency or sampling frequency to be 10 hertz then this will be you know set this value this is like a period value that is set based on the system clock whatever is is a system clock frequency divided by like you know this 10 minus 1 ok. So, this is how like you know this this number which is to be loaded in the in the it is like a loading that is happening in the in some register. This number will be register in some load and it will be count to 0 and then pulse will be generated that is a kind of a philosophy the same way it is used as in the case of timer in the in the QAI module and this is a sample program that you can look at. So, this is peripheral enabling happening for the timer peripheral enable then configuring this timer and then you are setting some kind of a timer frequency and then you are enabling here interrupt enable ok. So, interrupt enable happens here then this timer interrupt enable there is some some interrupt enabling functions are there and then the master enable function happens and then you enable the timer for the timer 0 that is that is what you are using for the interrupt. So, there are some functions you need to read through the details of this function what they are doing and understand and make start making use of them ok. And once you set up this interrupt kind of a routine then you need to look for what is a function in which I should write my interrupt service routine where and how do you how do you look for that ok. So, the interest for a service routine in this case is this particular kind of a name timer 0 interrupt handler and in this function you write some kind of a statements. So, first statement that will write is this clear clearer of this interrupt. So, this clearing is doing some clearing of the interrupt mask this is done so that now the interrupt is ready for the next pulse to receive. So, if the next pulse arrives then like know this will again start reading. If you do not do this command then the operation is run once and it will just kind of a wait because the clearing is not happen this clearing is important to happen. So, once the clearing happens then one can you know the next pulse comes again this is this. So, this command if you miss then like know you may find that ok your system your program is not running you will wonder why. So, this is important concept here the clearing of the interrupt mask ok. So, this is how we will go ahead and put together the things now to really you know read the encoders then compute control and write PWM duty cycle value and now how do you compute control based on the dynamics and control you know some of the theoretical aspects we will look at and give some kind of a practical implications of some of the theoretical results and then we will discuss how do we know. So, we are here basically getting ourselves completely ready now to implement any kind of a closed loop kind of control with a microcontroller. So, some theory we will look at and again we can kind of come back and do this programming or parallely we can do this programming for you know some of the mechatronic applications that is how we will go ahead. Thank you very much.


Hey Shannon, this is Megan with Oxmore Toyota. I just want to send this quick video greeting just to personally introduce myself. I will be your true car representative here at Oxmore Toyota. If you do have any questions, please get in touch with me at<PHONE_NUMBER> and we look forward to earning your business. Have a great day. Bye.


Here is Debbie. She is a very disorganized coupon user. And here's June. She is using a list, her phone, coupons, and the store flyer to guide her shopping trip. How does June stay so calm? She uses simple supermarket shopping tips called the three P's. Plan, prepare, and purchase. The first thing June does is she plans. She searches for coupons. Coupons can be found online in the store flyer, in the Sunday paper, on apps, and many more. Coupons are everywhere. Secondly, June prepares. She writes a grocery list based on her weekly menu and matches her list to the store flyer. June uses an envelope system to organize her coupons, but there are many other methods including using a binder, an expandable file, or even a simple bag. The third P is purchasing. She finds shopping an enjoyable experience because she is so well organized. She sticks to her list and saves additional money by being alert and looking for additional coupons available in the store. June has planned, prepared, and saved money while purchasing groceries. Let's check back with Debbie. Debbie is a fast learner. She is planning. And now we see an organized Debbie saving money while using coupons. Way to go Debbie!


So welcome to this panel discussion on leadership in Wikimedia. Today we want to introduce it to the work that the Leadership Development Working Group that will be the panel today is going to do and already did. And the plan for this little session is to first spend 10 minutes giving you a bit of an overview of what this group is, and then dedicate the rest of the session to Q&A where you can ask any question that comes to your mind. And for that we'd kindly ask you to put those questions in the chat. So what are we? The initial impulse for the foundation of this group came from the invest in skills and leadership recommendation of the Wikimedia movement strategy 2030. And we've been founded since in June as I'll show you later. We are a global and community driven working group and as such we are quite diverse. So we represent all eight major geographic locations are quite diverse in terms of language, gender and experience in the movement, both in share years of experience and also the roles that we've taken inside the movement. Why do we exist? What's our purpose? We tried to unpack the meaning of leadership for our movement. And so in relationship to the communities and the experiences that we have, because it's quite a complex topic and with a strong cultural variable. In keeping with that we have to understand our communities first, otherwise we can't really develop meaningful plans for developing leadership. And then we want to find a path for leadership development that we can follow. So this is just what derives from this invest in skills and leadership recommendation from the 2030 plan. This is what this group is for. Why leadership? Why is this important? Why did they even come up with this recommendation in the first place? The idea behind this is that investment in people's leadership has shown to successfully boost project efficiency and make movements more sustainable. This is what we hope we can do with leadership. Specifically, we believe that many domains could benefit from this, like just the ongoing participation, resolution of conflict, organizational development, project management, partnership development and many more. So there are a lot of perspectives and applications for this once it's established. So I already gave you the purpose of the group. The group has been set up for, Gilbert, would you please mute yourself? Thanks. We have a tenure of one year, so we were founded in June this year. So in one year from now we've got three goals. The first one is to draw off the definition of leadership, because we need a foundation on which to work. Based on that, we want to develop a plan for implementing leadership in the movement. And for the rest of the time, we want to guide the implementation of set plan, whatever that will mean. This is a bit of a timeline that we had. So as I said before, we started our work in June this year. And first we started setting up the process in which we would work. And in July, we started with the actual work on the goals, because we figured out that the definition was crucial to all the other goals. We started with that and we're almost finished now. So we did a lot of storytelling, building consensus and understanding the different contexts in which leadership develops. Because as I said, leadership is quite complex and there's a strong cultural variable. And we use the diversity in our group to make the most inclusive definition possible. We did that by having weekly discussions. So we met every week. And we also did asynchronous work, as you might expect. So now it's August. We've almost finished making this definition. We are in the final steps of finalizing it. And we'll share it shortly with you so that you can review it. How can you stay involved and updated? So we have a meta-wiki report that will give updates on our work every other month. We also set up a thread in MS Forum. I think yesterday we started our first post to open that. I'm not sure if that's online yet, but this will come if it's not there yet. And we need your feedback. This is crucial to our work. We will publish our definition on meta and you can then post your review there. We'll also take your feedback by other channels like the top page, as I said. Social media, we'll have one-to-one conversations if there is more detailed discussion that you want to have. And we'll also have community calls with more participants, sort of like what we're having right now. And if you want to have a steady inflow of information, you can sign up on meta or send an email to leadershipworkinggroup at wikimedia.org. And now we can use the remainder of the session to answer your questions, whatever they may be. And for that, I'd like to give the imaginary microphone to my colleague, Nitesh and end my overview. Thanks, Jan. Thank you so much for handing over the call to me. Hello, everyone. First of all, I would like to introduce myself quickly. My name is Nitesh, and I belong to Punjab, India. I have been a part of Wikimedia Movement for eight years, and I'm a member of the Punjabi Wikimedia User Group. For the last three years, I'm also working with Center for Internet and Societies Access to Knowledge Program, and I am also one of the leadership development working group members. So now quickly, I would like to thank the Wikimedia organizing and program team who gave us this opportunity to introduce our vision in front of the dedicated participants. I welcome all the panelists from the leadership working group and the audience to contribute to the session. Thank you for joining us, and who are not able to join us, those can watch the recording afterwards. Now we just switch to the session to save our time. Thanks again, Jan, for the brief presentation. It was really amazing. Here we are going to start question answers. So I will ask a few questions to all panelists, and if anybody feels comfortable adding something to the questions or answers, please feel free to add. Also, I request to the audience, please write your questions in the chat box so we can take those questions directly and finish the session on time. And it would be also great if you could also add your username, user group, or region details along with your questions. So I think let's begin with the questions. So welcome again. First of all, I request to all panelists before answering the question, please introduce yourself briefly. And then let us know, why did you personally choose to join this group? This group means leadership development working group. So if I would start from Nada, Nada, are you comfortable to answer and go first? Yeah, it's fine. Hello everyone. My name is Nadal Farra. I'm a doctor from Palestine. I'm a member of the Wikimedia Levant User Group and Wikimedia Heritage. I contribute to medicine and literature and art on Wikimedia, Wikidata, and Wikikomot. I started my Wikimedia journey back in 2018. And I started it this year as an editor, as a workshop organizer. And now I am on the leadership development working group. And I hope this group provides the purpose that it was made for. Thank you everyone. Thank you, Nada. Thank you so much. Goodness, would you like to go next? All right. Thank you, Nityish. And thank you everyone for joining us. I am Goodness, Nityish, from Nigeria. I am a librarian and a member of the Wikimedia User Group. I'm also a member of the Unbox Commission and a member of the leadership development working group. One of the reasons I joined this group is to constitute as a Wikimedia, a state, and gain more experience, certainly to be involved that presents my community. Thank you, Goodness. Francis, can you go ahead? Sure, I can. Hi, everyone. My name is Francis. You come from Valencia. And well, my involvement in this group, I believe it's a natural consequence of my long-time involvement in the Wikimedia movement for more than 40 years now. And as some of you probably know, I was quite involved in the strategy process in the second intervention of the strategy process back in 2019 and 2020. And as we all know, there's a recommendation of the recommendation set, which I believe it was a great outcome of our work back then that recommended us to develop leadership in our movement. I believe that the leadership is something that appeals to many things, such as capacity building, leadership itself, to resilience, to understanding ourselves as a movement, to understanding ourselves better. And this is something that we will develop in our session today. But I believe that there are many, many things to win for us by understanding how leadership is developed in our movement, that we all know that we are a movement of our own. And, you know, we are something very specific in the world. So definitions made by others that fit for us. So that's basically why I joined the team. Thanks, Francesc. Jan, you already introduced yourself, but if you can also let us know why you joined this group, that would be great. Oh, yeah, sure. So first, again, I'm Jan. I'm from Germany. Right now, I'm joining you from lovely Tallinn, actually, because I moved to Estonia and Wikimedia. So Wikimedia, so I think I've joined two years ago, but I haven't been this active over the last year. But I'm a biochemistry student, so I'm mostly involved in science. And why am I in this leadership development? When I read about this recommendation for leadership development, it was already natural for me to join, because I think leadership and soft-skilled development is something that the movement can really benefit from. And I think I did have to bring something to the table there. Thanks, Jan. And your internet is also not stable. You can fix this, please. Okay, Ray, you are the last one. Could you go ahead? Sure. Hello, I am Ray on Wikimedia projects. Go by his name for months. I am a steward, I'm an admin and check user. I'm a meta-wiki and simple English Wikipedia. I'm also a UCOC drafter and now I'm a leadership development working group. I personally chose to join for a handful of reasons. The majority of my work so far in the movement has been exclusively in enforcement processes. I have very minimal experience outside of enforcement processes and stuff like that, and working on something that is much more, I guess, affiliate-focused and sort of like grants-focused and community-development-focused and the more small projects is something that is quite fun, an area that I hope to help out. Thanks, Ray. Thank you, everyone, for your introduction and answering the question. Okay, so Jan talked about 15 volunteers in his presentation. I would like to ask how were members of this group selected? Francis, are you comfortable to take this question? Sure, I am. Yes. Well, when it comes to the membership of the people, I was trying to reply in the chat, of course, we have to jump. Well, if I'm honest, I must say that my involvement in that is that I made a proposal and I was selected. So I don't know the details, let's say, but basically it was an open application process. I believe it was announced everywhere, we would say. And it was reviewed anonymously and indeed in meta, I checked the names of the people who reviewed it. It was a selection of people, some coming from Wikimedia Foundation, some coming from the communities, et cetera. And as I said before, the only thing that I know is, okay, so it seems that my application, what I wrote there was consistent enough to convince the people, so I got selected. And when it comes to the actual composition of the group, we have 15 members, although we must say that soon we will be one number more. And that's a little bit the issue. We have all the regions in our movement represented, the original objective of the committee. If I remind properly, it was at least 12 people and at least one from each of the regions. We have all the regions covered and we have more members than 12 and I believe that's something good. And that's a little bit the situation of the membership in our committee. Thank you. Thank you, Francis. Now I will go back to goodness. Goodness, I want to ask what has the question done so far in two months, like Jan already talked about goals and plans in his slides. So how will you answer about this, what group has done in two months? Okay, thank you, Nadeesh, for that question. And like Jan rightly said, we have three goals. One of the goals is to draft a shared definition of leadership, to create a leadership development plan and to guide the implementation of leadership. And we intentionally spend time to view the common proposal and goal and also to find alignment with each other. The group stated the ground rules to interact, communicate and be familiar with members and through various platforms for communication and to complete tasks. The leadership development working group is close to finishing the first goal, which is a shared definition of leadership. And this definition is not ready now because we're still working on it. And when it's ready, reach out to all of you to give us feedback and suggestions to upgrade our definition and make it global. Thank you. Thanks, goodness. And I request all the panelists, if anyone has something to add, please raise your hand and you can add in that question. So I'm going ahead. Okay, so Nadeh, what has the working group learned so far about working together and about leadership development? Well, so we have learned a lot actually as the highlight of this group, of this working group is diversity. Diversity is a great way to enhance efficiency and effectiveness. That allows us to examine our goals at many diverse levels and brings different skills to the table. We also learned that every opinion is valuable and a great milestone. So we learned the importance of constant decision making. As I mentioned earlier, it's diversity. So we get to hear different stories outside our community and see different cultures. We also learned about new platforms and tools to enhance teamwork and productivity like Miro and Asana. He personally, they didn't know those apps before and it was a great chance to deal with that in action. We also learned about resilience and understanding of the members' needs. With regards to the leadership development, we learned that the good leaders exhibit certain characteristics or qualities that can be learned or on through experience and continuous training such as self-awareness, self-development, ability to develop others in strategic thinking and innovation. We also learned that leadership doesn't apply only to the individual level. It's a collective effort and it can be applied to the group level. We are an example. There is no leader here.  We communicate with each other and reach a decision based on everyone's opinion. So that's basically what we have learned so far and we hope to continue on this learning process. Thanks, mother. Thank you so much. You talked about a few things, how you are working together and there are a lot of things which you have learned, maybe all of the members learned. You also talked about some leadership things. I would like to ask about why leadership is even important. Is there a need for leaders in the moment? Francisco, would you like to answer this? Sure. Well, as I said in my small introduction, this is something that was already discussed during the second iteration of the strategic process in 2019-20. And well, I want to remind. I mean, there are some dangers here. Not the first danger is the world leader because through the human history we've seen many times some people's claiming to be leaders, but there were people who had no good intentions towards others. So let's say that leader is awarding a little bit dangerous. But still, there's a need for leadership in our movement and I believe that, I mean, since the very beginning, the small community that started almost as an experiment in 2001 to what we have built so far. I believe it's pretty obvious that there is leadership in the Wikimedia communities and that the leadership has been developed inside the Wikimedia communities. So basically we are having and perhaps I'm getting a little bit away of what is the opinion of the whole group and I'm I'm making more of a personal statement. We are working more as social scientists in the sense that we are identifying what's going on, what has been going on in our movement so far. And that's also addressed some of the questions that have been put in the chat. I mean, we have leadership in the online communities, in the offline communities. We have leadership in met organizers and we have leadership in partners. I mean, we have skills in our movement and those skills talk to capacity building, talk to leadership itself, to understand how the Wikimedia movement works, talk to resilience, not to make our movement more resilient for the future, etc. So basically this is, I mean, I believe that that's why it's important. It's important because basically we are doing a job of understanding things that have always happened in the Wikimedia movement and that's why I believe this is important. Thanks, Francis, for elaborating the answer. So, if Ray, you could add something because we didn't hear anything from you as of now. So could you add please? Perfect, cool. So as for whether we need leadership in the movement, I know this, it kind of sounds like a rhetorical question, like, oh, of course we need leadership. However, when you talk about leadership and like the traditional like political or like group focusing definition of the word leadership, the one that is not used specifically in Wikimedia, it often has incredibly negative and incredibly like group against group or cabal-esque results focused on competition rather than an attempt at global cooperation. And from the Wikimedia context, something that I've tried to kind of make sure we reflect their definitions because we have discussed leadership, we've also discussed what is good leadership and then what is good Wikimedia leadership. And then from there we can kind of work towards leadership development plan. But one of the thoughts that I've tried to push is that good Wikimedia leaders are facilitators, they're mediators, they're peer mentors, they do not give people a vision, they help people find their own vision. Okay, thanks Ray and Jan, if you would still like to speak in this specific question? Yeah, sure. I think Ray made a very important point that the traditional understanding of leadership is not what we're working on here. One of the main goals of this group is to sort of dismantle the misunderstanding that leadership is tied to hierarchy. I think one of the questions in the chat was what kind of leaders we're talking about like sock masters and admins. This is not what this is about. Those are hierarchical figures and Ray made it very clear that leadership is rather a question of facilitating and not being someone giving commands because they are higher in hierarchy. You'll see this reflected in the definition. I see this as the main point of the definition being made. Okay, another and you want to add something or want to speak something? With regards to the question that if we need leaders, I think we will think of this question as monocracy. It's not we are talking here about actions. We are talking about groups, levels. We are not talking about one person that leads the others. No, it's not the levels or who is opposed here. No, it's just the process of working that we are talking about. Thank you. Great. Thank you for everyone's contribution. Yeah, hello. I want to say now I have written, I think it's better when I say directly. I would say now as I hear that maybe then it would be better to use another name instead of leadership. Why not using, for example, the term facilitator or something like that? I think that would be a better term. It would lead to a higher acceptance for what you are doing because especially in Europe, or that's my experience that there are the Wikimedia communities are critical regarding leadership. So there they want a lot of freedom or I see it in German Wikipedia there. They want freedom and don't want that other people tell them what they have to do. And so I think it would be great if you think about maybe using another term instead of leadership. Thanks for jumping in. Ray, I just saw your hand raised. Could you answer this question? Cool. So I definitely understand and to some extent agree with that sentiment. The word leadership itself has very negative connotations in some areas. But the difficulty is that if we switch just facilitators or just peer mentors or just mediators or just insert other words here, because we do have a lot of those terms or definition, we define them and we define their attributes too. That wouldn't get the full picture. Like yes, leadership does have bad connotations in some areas, but that's also why we are defining what good Wikimedia leadership is and how good leadership manifests itself with Wikimedia projects. That's why our definition isn't just copied from Google. We're doing stuff to kind of ensure that we are properly informed in our future steps by creating a definition of leadership that goes in some ways directly against the generic definition of leadership. Yeah. Thanks Ray. Anybody have something to add or we can switch to the next question? Okay, yeah, please go ahead. Now this might be a bit of a side note. I agree with what my predecessors have said. Also, there's a large body of literature and sociological science being done on this term. So changing the name to something else wouldn't only lose a bit of the scope of the term, but also work against sort of the academic progress that has been made. So that would be a bit hard to reference the literature here. Thanks, Anne. Thank you so much. Okay, we have less time, so let's do it quickly. So I will go back to goodness. Because we are discussing a lot of leadership here, so I would like to ask how did you come up with the definition and what process did the group follow for that? All right. Thank you, Matish, for this question. And each step of the drafting was under consent decision-making process. And in agreement with this cost, it brings down during our weekly meetings to identify keywords, qualities, attributes, actions, and mindset that are an important element of leadership. We asynchronously and synchronously categorized these keywords to prioritize them into subcategories. We also used storytelling to share experiences of how leadership is seen in our diverse communities. We also created a shared definition of a shared document so that each member of the group can see and contribute to definitions and get responses from community members. We also discussed and resolved with issues with the definitions and subsequently merged the resulting definition into its final form. And finally, after the process has been completed, the definition will be published and announced so that it can be made open for community feedback and outputs and inputs of lives. My colleague Ray said that the definition we would see is not a form of, is not a kind that we see normally. We would define this definition so that it would be a community kind of definition. It would ensure that community needs and different cultures would be made possible or seen in the definition. Thank you. Thanks, goodness. If no one has anything to add, then I just end up the session. Sorry, questions apart from my side. I just have last one question. So I would like to ask from Nada. It would be great if you will answer this question. How can community members provide feedback on the definition that the working group drafted and also goodness talked about those things. So would you like to answer this question? Yeah, sure. Well, the working group is still in the process of creating a thorough feedback plan for community members. We are still in the process of creating a draft for our definition and we will share our definition very soon via several movement-wide channels of communication. Of course, Mita is the first one. We are also exploring regional and linguistic community channels for outreaching and feedback platforms. Since we are still in the process of putting a plan for feedback, we might use messages, social media platforms, talk pages, maybe direct interaction with affiliate members, central notice, one-to-one meetings. So we haven't decided yet, but we are still processing a plan for that. And we want to make sure that this is a very important part because we want to hear from everyone. We want to know if there is a gap in our definition so we can fix it. Thank you. Thank you, Nader. I think it's a difficult task to get some feedback and get involved community with us. So best of luck for that. And now we have just six minutes to close the session. So we will take some questions from the audience and we have a few questions there. So maybe a few questions already answered by Ray or Yan. Okay. So we have the next question from the audience. Can you please tell me an action within the Wikimedia projects you define as leading? Who would like to take this question? I can repeat the question. Okay. So question goes, can you please tell me an action within the Wikimedia projects you define as leading? Okay, Francis, please go ahead. Yeah, I will go personal and I will share examples that I share. I mean, with the definition of leadership by our group is not yet public, but we have been working with that. We have almost a final product to be reviewed by the communities. And some of the inputs that I've been sharing while, you know, the brainstorming process, etc., were examples in, for instance, the linguistic community I come from, the Catalan Wikipedia. And we have specific users that are very, very, very good in the things they do. Perhaps they've never been very active in international scenes. They haven't been very active while sharing their job. They have not been very active in affiliates, but they are people who are, I mean, I don't want to say names, but I believe that a lot of people know what the Catalan Info Boxes are, and that was made by a single person who had an idea. He developed that idea into our local community. We love the idea and not only did we love the idea, but other people around the movement in a totally horizontal way, they saw the idea once it was implemented in our community. They liked the idea and now the Info Boxes that are linked to Wikidata, it's something that is very, very common in our movement. And that was thanks to one single person. And I believe that's the next example of leadership. I mean, when he developed that, Amador, who is the name of that person, he wasn't, I mean, he was a member of the Catalan Language Affiliate, but he wasn't a member of the board. He wasn't this stuff. He wasn't, let's say, anything special. But I mean, he was a beloved member in our community. And he had an idea. He developed it. People liked it. And just as I have that example, I believe that we can point to other examples of other people who have been doing things and say, why don't people do good things? And they improved our communities. And I believe that that's, of course, this is not the definition of leadership, but this is an example of the people that we have had in mind while working on this. Thanks, Francisco. We just have three minutes here. And would you like to answer in a few words for the next question, what makes leadership wider than facilitator? I guess I should also answer that because I was putting this up. I mean, for me, a facilitator is just one of the aspects that you might have as a leader. I mean, going back to the example of the people inside of the community that developed, in this case, isn't exactly to a gadget, but it's something similar. I mean, facilitator is a very specific trait that means to facilitate among bills, et cetera. That's a good trait. That's a good trait that should be taken into consideration when talking about leadership. But you can live in many, many other ways. And specifically, I mean, I believe that the problem with the world leadership is that we are thinking on a single person, like something very top to down, a structure, a very pyramidal seam. And this is not the case. I mean, you might be a sectoral leader in the sense that there are individuals that are living in very specific things. And the leadership works both for, you know, let's say an all-around leader. There are individuals whose involvement in the movement is very wide, but it should also fit our leadership definition, fit those who are very good, those individuals who are very good in the specific things. So facilitators. Let's say the facilitators are leaders, but not all leaders are facilitators. I don't know if I'm able to give a satisfactory reply, but this is how I see it. Okay. Thank you, Ray. Thank you so much. We have just one minute and we need to close the session. So thank you everyone for your proactive participation and your precious time. We appreciate your time and thanks again to the organizing and program team who gave us this opportunity. If you have still some questions or you need some clarification or you have something to say, please email us on leadershipworkinggroupatpikimedia.org. It will also put in chat box. So thank you. Have a good day and thank you so much for joining us today. Thank you. Okay. Thank you all the panelists and all the audience. So thank you. Take care. Bye.


A couple of weeks have been insane for me. Um, anyone who's heard of Basecamp? No. So this last week ago, I was in Chicago. We were launching the new version of the new Basecamp. And we were all heads down. We were going crazy. The entire company. There are over 30 people now. 37 segments. We were over 30 people. All in Chicago. Heads down. Working together was fantastic. I love it. Um, but you can bet that we weren't building any new features. We were working on the little things. And these little things are the things that matter. And that's what I want to talk about today. So first of all, you've probably all been in this situation where a friend or a co-worker or a random person on the street approaches you and says, So what's the big deal about Ruby? Why is Ruby so big? What's the height? What's going on? And so you come back with the pat answers, right? You might mention, well, Ruby's got blocks. You've mumbled something about iteration and enumeration and closures and anomalous functions. And you'll maybe spell something about everything's an object in Ruby, right? Pure object oriented. Even the numbers are objects. And it's just so fantastic. You talk about mix-ins, right? It's like multiple inheritance is looking more powerful because it's actually our probably multi-inheritances. And you can do so many cool things.  And you mentioned exception handling. And you mentioned that it's dynamic. And you aren't quite sure what to say about that. So you say, well, it's interpreted. And your friend is at this point just saying, Yeah, show me a language that doesn't have in these days, right? Everyone's doing it. Exception handling is really common. Dynamic is a buzzword that's everywhere. Interpreted, blah, blah, blah. And he'll say, well, you know, you want objects. A little small talk has objects. Small talk has blocks. Scala has traits, which are like the mix-ins. You're not telling me anything new. Tell me, really, what is the deal with Ruby? Like, why are you so passionate about it? And I hope we're all passionate about it, right?  I mean, at least these chairs are padded. They have that. But seriously, are we nuts? Yeah? Yeah? Who said that? Yeah. Yeah. Nuts. We're nuts. I mean, that's what it is. But what is it that makes us so passionate? What's the key here? What's the point? Now, the problem is when we were talking to our friend or the random stranger or whoever it was, we were talking about the banner features, right? This is Ruby. The problem with the banner features is that they aren't what make us passionate about language. They aren't what make us passionate about anything. These are the features that are designed for headlines, right? They capture someone's interest. They pique someone's curiosity. They're enough to get someone in. But they aren't what actually does the work. I mean, what is it that makes Ruby unique? What is it that makes Ruby stand out? If every other language is doing the same sorts of things feature for feature, why is Ruby so incredible? Why do we care enough to come here? It's the little things, right? Blocks aren't what make us stay with Ruby. Garbage collection isn't the big deal. Once we're in, it's the things that we can do with blocks, right? It's the way blocks streamline our workflow. It's the way garbage collection removes all the little mini-preview of memory management. It's the little things that really matter. The pixie dust, right? Of language design. How many of you have seen Peter Pan in One Incarnation or another? I imagine most people have, right? If you have kids, you price them at multiple times. But pixie dust is some amazing stuff. You sprinkle it on, you have a happy thought, and that's all it takes, suddenly you're flying. That's what these little things are in Ruby or whatever else we're doing. It's a little thing that you sprinkle in and the customer, your user, you bring a happy thought to the table and suddenly they're flying. And once you're flying, you're hooked. Flight is awesome. And if you can do it without an airplane, that is even more awesome. You want that pixie dust. You want that experience of flight because that's what hooks on them. That's what hooks people. It gets them to stay. Now, I am not an expert on the psychology of the Ruby community at large. I don't know feature for feature what people prefer and how they use things, but I'm an expert on me. I know how I use Ruby. I know what hooks me and what keeps me engaged in Ruby. So I'd like to talk to you about a few of the things in Ruby that have hooked and engaged me that have kept me fascinated by Ruby for 10 years now. And while I'm doing this, I would like you to be thinking in your own minds about the little things of Ruby that have captured your imagination, that you use the heck out of every day and probably take for granted. Don't even realize. Think about those things. One of the things I want to mention is this. I love the heck out of this thing. I may not use it every day, but when I use it, I would love it. How many of you have ever used this data end construct? A few. Awesome. I mean, you can throw a configuration at the bottom of a simple script. You can throw a test fixture at the bottom of a simple application. You can do all kinds of really awesome stuff with that. I love that. That's such a little thing, but it captures my imagination. Another one. Who's ever done this? Yeah. This is used all over in Rails, for instance. This is all the time. This is actually a few different patterns all wrapped up into one slide. You've got the lazy initialization with the or equals, and you've got the begin and treating it as a single expression. I love that. Ruby is so amazing. Everything's an expression, including begin and end. So you can use this to basically initialize or memorize a function. I meant that. Awesome. Love it. Post fix modifiers. Obviously, I didn't list. I used the heck out of rescue. I didn't even mention that one here. But if until, those are awesome. I love how they think. Something that would otherwise be complex and multi-aligned and require more mental processes to scan. It takes it. It condenses it into one line. Obviously, you can use this. But don't, right? Just use it wisely. Another thing. The implicit begin. I have to begin with that. Can you imagine how frustrating it would be if you wanted to use exception handling in Ruby? If you had to explicitly declare begin and end inside of a deaf end, you'd have done what that would be. But it's not that way. You know, mods. Mods, I'm sure, was the one who, as a replacement, was one of those cohorts. Do it. Right? So simple. So little. But it makes such a difference the way you use Ruby Day today. Implicit return is another huge one. Some of you know, this is kind of stylistic. Some people prefer to put an explicit return at the bottom of a method. I kind of go back and forth. But for a simple, you know, attribute kind of method, this is incredibly useful. I love it. And I have to admit, I came from a C background. I love the nitty-gritty stuff. The turnery operator has had my heart for almost two decades. And I'm so happy. So happy to find that it was in Ruby, because I loved everything else about Ruby. And I had the turnery operator. I was so happy. I love it. And that doesn't have anything to do with Ruby. Optional parentheses, right? Optional parentheses are awesome. Yes. Yes. It lets you do beautiful DSLs in Ruby. I mean, Lisp doesn't have optional parentheses. I love this. I'm just kidding about that. But, you know, with Ruby, you can take away a lot of the liners just by removing parentheses. I love it. Such a little thing, but it makes such a difference.  This is another awesome one. Parallel assignment. C didn't have this. It ain't not in any meaningful sense. If you wanted to do swap two variables in C, how many of you does that in C? How many of you have written a function in C specifically to swap two variables? No, right? Yeah. And Ruby, it's a little higher. It's a no-brainer. I love that. Such a nice touch. And again, if you were to tell someone, I love Ruby because it has parallel assignment, I can swap a variable in one line. You know, it's a little thing that you don't appreciate until you've used it. It's not a headline. This, this is one of my favorite patterns in Ruby. Using modules to extend objects. This is an especially powerful pattern of exceptions. You've got an exception that's raised within some kind of context, and you want to capture that context. So when the exception is rescued, you can do something meaningful with it. Well, you just extend the exception, add your context, and re-raise it. I mean, it's beautiful. I love that. Last one, I love this. I use this every day. No exaggeration. Especially in Rails, where you might get a list of records back from the database and you want to build an ID to record mapping and memory. This is your friend, right? The inject is such a powerful pattern. And just being able to, you know, feed it a hash and build a hash that way. Wonderful. And then, truthiness. I love truthiness, okay? This threw me when I came from C, right? Because zero is false in C. And it's true in Ruby, right? Very confusing. But once you understand the rules, it's beautiful. Because you can do stuff like this. Some people get up in arms because they say, if you have a Boolean predicate, should return a Boolean. I don't have a little loose around that. I say, if you have a Boolean predicate, it's okay if it returns truth. Or what's the answer? Truth. False. Okay. Lies. Okay, good. True lies. I like that. If you return null or null or string, potentially, which evaluates to true or false? That's what I was looking for, thank you. I really like truth and lies. That's pretty good. Last one here, pure docs are awesome. I love... Well, yeah, I mean, it's not original Ruby. None of these are really original Ruby, right? But Ruby has them. I love that you can chain your docs, you know? It's not the most aesthetically appealing thing, but I just love that you can take this huge chunk of text and throw it in right there in line. Wonderful. So, how about you? What have you guys done? What are the little things you appreciate every day? Let's take a few. Yes. I got to repeat it. Optional parentheses. Optional parentheses. Preach it, brother. Sorry, yes? Think about it. A little simpler than your or equals begin, which I thought I'm going to start using. I'm going to be a fan of x equals if condition. Oh, yes. Yes, I have done that. Where you treat the if as an expression. I've done that with case statements. It's great. Yes. Auto loading. I'm sorry, what? Auto loading. Yes. That's great. Yes, exactly. It's beautiful, isn't it? Brilliant, brilliant execution on that. Oh, yes. On here docs. Sorry. On here docs, you can actually put a comma after that and add more arguments. Okay? You can add as many as you want. Even more here docs. You can even do like SQL docs along. Yes. So you can do like SQL.squish. You want to remove all the extra spaces. You can do that. That initial little introduction to the here doc can be treated as if it were the entire string. You cannot achieve some and remove the front spaces. Yes, exactly. You can call any method on it. Because it's a string. That's what it is. We'll do one more because hands are going up all over now. I love that. Okay, let's go where I look at. Splat. That was actually on my list of things to do originally. It didn't make a cut because I couldn't think of a good illustration for it. But splat is awesome. I love that. I'm so excited that you guys are passionate about this too. I love these little things, right? That make us passionate about Ruby. So, what's the takeaway? What can we learn from this? That the fact that we have Ruby. Someone's been persistent. So, I just want to point this out. Not as a coffee script is just like Ruby and also cool. But as a coffee script really is a lot nicer to use than JavaScript. Because every single one of these things that we've said that I say, I love that about Ruby. Coffee script has an equivalent thing. And it's so cool about coffee script. Not because coffee script is as cool as Ruby. But because it's so much better than JavaScript. I'll repeat it for the sake of the camera. But basically, coffee script has all of this too. And coffee script is awesome. And I totally agree with that. And I would agree so far as to say that coffee script is as awesome as Ruby. It is amazing. And it's so much better than JavaScript. Yes. Okay, so what's the takeaway? What can we walk away from in this? What's the lesson we can learn by looking to Ruby as the example? I mean, all of us are doing something with Ruby. Even if it's just tinkering on the side. But how many of us are actually using Ruby professionally? So many of us are using Ruby professionally, which means we are writing stuff in Ruby that others are going to use, either the Ruby product itself or some derivative thereof. So what is it about Ruby that we love in that context? It's not that we're out there writing Ruby code for the sake of writing Ruby code. I mean, sometimes we'll sit down in a little script just for the therapeutic value of it. But usually you're out there writing Ruby code because it's a tool that gets out of your way and does what you need it to. When I am in the mode of writing Ruby code, I'm not thinking about Ruby code. I'm not thinking of syntax and the interpreter and these features. It's fluent, right? It's just flowing. And the language is out of the way. With our own projects, what do we have anyway? Let's go further. What lessons can we learn from Ruby? Ruby does a lot of things well, but it does two things really well, right? First, it keeps curiosity really well. People are curious about Ruby. Secondly, it inspires worship. At the very least, it inspires loyalty, right? But I have a way. People are passionate about it. They're either curious or passionate. They're either poorer or against. Either people haven't heard about Ruby or they love or hate it. It's really where it is. I haven't talked to very many people who are down-viculous about Ruby. So what does that tell us about our own projects? Well, one of the things that Ruby has is a skeleton, right? It's those features that we told our friend at the beginning. It's all these blocks and all these things. It's got a very solid skeleton that makes a good headline, right? It's the frame that everything else hangs off of. The language falls apart. Obviously, you need something strong like that. The headline sells papers, right? That's what you hear. Headlines sell newspapers. But without something journalistic underneath, the headlines are only going to sell one paper per person at most. So you need something more. This isn't enough. The other half of the story is the polish, right? You need to put the flesh on the bones. You need to polish that until it gleams. It's those little details. This is the little stuff. This is the lesson I think gets ignored more and more often. I am in the presence of brilliant people right now. I have no doubt about that. And I have no doubt that many of you have already thought long and hard about the same topic. And have probably come up with better solutions than I have. But it bears repeating. This is important stuff. The little stuff is what makes the difference. But you can't build only on the little stuff. You need both, right? How many have you ever used an application that was all lean and no skeleton? A few. Like I have. It's one of those where you're like, yeah, this is slick. This is pretty. Next. It doesn't do anything. But the same thing. Like you can have an app that is all skeleton and no polish. Get. Right? This is what you don't want to build. You can look at this in either of two ways. It's all skeleton and no polish. It's all big features. This octopus arms and a robot dinosaur with satellite dish. Those are the banner features. Or you can look at it as having too much polish. Someone wanted to pack this thing with all kinds of cool things but didn't really have a purpose. This is the kind of monster you would fight once because after the first time you're like, you know, it doesn't do anything for me. In the end, we each of us need to go back to our problem domain and build the ruby of that domain. We need to build the tools that will get out of our customer's way that will inspire loyalty in them. The peak of curiosity of people from outside. Those are the lessons I think we can learn from a ruby that we can take wherever we are, whatever we're working on. So wherever you are, whatever you're doing, try to build the ruby of your domain. Thank you very much. Thank you very much. There is question-wise, five minutes of the day. I don't know how much anyone has questions for this, but if anyone has a question, it's all right. You're already the one. My hands. I have a bamboo pad and a pen and I have a spider artist. No, the bamboo pad that you draw directly, I have pixel natives, the application I use, because I can't afford Photoshop. Yes, sir? I find it awkward to do some work. Yes? Tools in that ecosystem that is equally enjoyable. The question is, well, first, confirm that I do woodworking. So I actually do wood carving, and I haven't actually done it in a while.  But the question was, do I have any tools from that domain that would be the ruby of woodworking? And honestly, every tool that I've used in wood carving is like that, because every tool is designed to extend your hand. So you're in there carving and you're not thinking about how you're holding the chisel unless you're just starting, in which case that's all you're thinking about. But you're thinking about the wood and what's inside the wood and how much you want to come out of the wood and so that chisel or the knife or whatever it is you're using, ruby is out of the way not intrusive. Any tool that doesn't do that quickly gets discarded for one that doesn't have it. Is it? Have you ever fought with ruby or has it always just been smooth sailing and bless? Have I ever fought with ruby or is it ever smooth? Is it always just smooth sailing and bless? Ah, ah, ah. I fight with ruby on a daily basis. Ruby is not perfect. I mean I think every single one of us can name numerous pet warts of ruby that drive us insane. The important thing is not that ruby is perfect but that ruby has enough to compensate for those warts that we're able to forgive it. The other thing is there was a time where I used to go language shopping and every few months I would choose some new language and do amazing or something. I quickly learned that there is no silver bullet, right? Every language is going to have different warts and so you're just kind of trading one thing for another. Yeah, I totally fight with ruby all the time. I think all of us do.