In this video we are going to look into another example of how we can use the recursion and the looping strategy to implement iteration. In particular we are going to look at the so called Fibonacci numbers. There is a big difference in this video in comparison to the previous videos. So in this video we will see that one of the two approaches is clearly better than the other and in previous videos this was not the case. In previous videos both approaches basically were very readable code and also in terms of the speed of the running program both solutions were always efficient but in this video this will change now. So let's start a new file and let's call it Fibonacci and let's talk a bit about the so called Fibonacci numbers. So what are Fibonacci numbers? So basically it goes like this. Given the first two Fibonacci numbers which are defined to be 0 and 1 the next number is always or is simply the sum of the previous two. So let's do a sequence of Fibonacci numbers starting with the first numbers being 0 and 1 and 0 and 1 if we add them together we get the third Fibonacci number which will be 1 again 1 plus 1 then gives me 2 and 1 plus 2 will give me 3. So we see that it seems like the numbers are rather small but they have a very strong growth actually built in. So let's continue. So 2 plus 3 will be 5 and 3 plus 5 will be 8 and 5 plus 8 will become 13 and so on. So these are this is a sequence of Fibonacci numbers. Of course the Fibonacci numbers they go technically speaking into eternity so the sequence doesn't stop and the numbers as we see they will become bigger and bigger at an increasing rate. So the growth behind that sequence is very high. So let's think about how we can use this example of numbers to come up with two strategies to solve the problem to write a function that calculates the Fibonacci number. So in particular the task is going to be given an index let's call it I calculate the corresponding Fibonacci number. So let's briefly review what indices are. So indices in Python are just the numbers 0, 1, 2 and so on all the natural numbers but we started 0 because Python is a zero based language. So in other words the index for the first number the number 0 would also be the index 0. The second index for the number 1 would also be the number 1 but then the index for the third Fibonacci number which is also 1 would then be 2 of course. And so that is a task that we want to solve. Given an index let's calculate the corresponding Fibonacci number. So we can view the problem in two ways. First if we look at the example numbers here we can view the problem from left to right but also we can view it from right to left. And this is kind of similar to the discussion of how we could view the factorial of a number also in two different ways. So let's do the following I will now go ahead and draw a diagram because that is the easiest way to explain how Fibonacci numbers work. So let's go ahead and first write a couple of index numbers on the paper here. So the first index is of course 0 then it's going to be 1, 2, 3, 4, 5, 6 and then let's put a couple of dots here. So the task is to define a function so let's abbreviate this with simply Fib as Fibonacci and the function takes one argument and let's call it I the index and the task is to find the corresponding Fibonacci number. So let's pretend that we don't know what the Fibonacci numbers really are. We know the Fibonacci numbers of course for small numbers but of course for big numbers if you want to calculate let's say the 1000th Fibonacci number then of course we don't know what the number is. So now by definition the first and the second Fibonacci numbers are given as 0 and 1 by definition. We could also change the definition but this is just what mathematicians came up with. And now let's use an example and the example is going to be let's calculate the Fibonacci number for the index 5. Let's do that by hand. So we want this number we want to find this number and now we are going to use a right to left approach first. So this is going to be the recursive approach and so now how does this work? Well we know that whatever Fibonacci number will be here will be the sum of the previous two. So in other words we can say Fibonacci of 5 of index 5 can be broken down into a sum of basically two numbers and let's maybe make this a bit wider here. So the first one is going to be whatever Fibonacci number we get with the index 4 plus whatever Fibonacci number we get back with the index 3. So whenever we have a node here we basically add whatever numbers come back up here. Simple summation. So now if this here is the Fibonacci number with index 5 that we want to calculate and we have broken down the problem into finding the Fibonacci number with indexes 3 and 4, how do we continue from here? Well let's first go with the left hand side here Fibonacci of 4 which is this number here. So how can we calculate this? Well Fibonacci of 4 can be broken down further into the sum of Fibonacci number with the index 3 plus the Fibonacci number with the index 2 of course. So now we are basically here in those two spots here. So now if you want to calculate the sum what we need to find first is we need to determine whatever Fib of 3 and Fib of 2 is. Otherwise we cannot sum it up. So until we get some numbers from bottom up here until then we cannot do the sum summation yet. So we have to still wait in a way. So this is similar to how functions in a recursion have to wait in memory until another function call is done. This is basically what we are doing here by hand. So let's continue with finding the Fibonacci number with index 3. So how can this problem be broken down? Well it is the sum of Fibonacci of 2 plus Fibonacci of 1. So let's break this down. So this is Fibonacci of 2 plus Fibonacci of 1. And let's continue our approach to go always left first. So in order to find Fibonacci with index 2 which is this number here that we don't know we can break down the problem into the sum of those two Fibonacci numbers. So this is going to be the sum of Fibonacci of 1 plus Fibonacci with index 0. And now for the first time in this diagram what we can do is we can say well Fibonacci with index 1 and index 0 by definition is known. So we can say here we get back 1 and here we get back 0. And now this note here can do the summation. So 1 plus 0 gives me 1. Now let's go ahead the note where we are trying to calculate the sum of Fibonacci of 2 plus Fibonacci of 1. For Fibonacci of 2 we just calculated the result and for Fibonacci of 1 we basically know the result. Therefore we can go ahead and simply add 1 plus 1 here which gives me 2. So what do we know from this? Well Fibonacci of 2 we can basically plug it in here. So to say we could say Fibonacci of 2 would be 1 and Fibonacci of 3 would be 1. And Fibonacci of 3 would be 2. But again we are not going from left to right here. From left to right this is kind of obvious but we are going from right to left here. So now let's continue here with Fibonacci of 4. So finding this number here and to do so we have to add Fibonacci of 3 plus Fibonacci of 2. Now we have a problem. The left hand side we know the answer but the right hand side we really don't. So in other words whenever I write in some number up here in orange then this number is not really standing there. It's just something that we calculated on the fly from the bottom up here. So what we need to do here to calculate Fibonacci of 2 is we still need to break down the problem into Fibonacci of 1 plus Fibonacci of 0. And this of course is the same as 1 and 2. These are the base cases so we have 1 and 0 coming back. Fibonacci of 2 is the sum of that so it is 1 plus 0 which is 1. And now Fibonacci of 4 is 2 plus 1 which gives me 3. So we could write the 3 here but remember that all the numbers are right here in orange. They basically don't exist there so this is just temporary. And so what we see is if you want to calculate Fibonacci of 5 and if you break down the problem into finding Fibonacci of 4 plus Fibonacci of 3 many, many calculations need to be done until we get to the bottom of the tree. This is a tree structure and at the bottom of the tree what we see is we find the so-called base cases, the two only numbers that are given by definition. And now in order to finish calculating Fibonacci of 5 we still have to calculate the right-hand side here and the right-hand side goes like this. In order to find Fibonacci of 3 with index 3 this will be Fibonacci with index 2 plus Fibonacci with index 1 and Fibonacci with index 2 can be broken down into two further steps. Let's put them right here. This would be Fibonacci of 1 plus Fibonacci with index 0.  I sum them up here which gives me 1 and here because by definition I get back 1 I get 1 plus 1 which gives me 2 and so now next step would be to finalize the calculation 3 plus 2 gives me 5 of course. So let's write it here. So this would be the number of 5 and we can also see it here going from left to right 2 plus 3 would of course be 5. But again we want to do the recursive approach first. So what can we already see here in the recursive approach? Well we see that a lot of redundant work has to be done. So sometimes when we go down and let's say we go to this Fibonacci of 2 here well Fibonacci of 2 here needed to be calculated from scratch basically because we don't know what these Fibonacci numbers are. They all need to be calculated. But here on the left hand side we already calculated Fibonacci of 2. So we are doing redundant work here. So this Fibonacci of 2 here on the left hand side this is the first time we calculate Fibonacci of 2 and here we could look up the result but we can't really because we need to learn a bit more about programming before we can do that. And on the right hand side on the tree here we also see Fibonacci of 2 here. The same with Fibonacci of 3 which is here and here. Fibonacci of 2 which is here, here and here. So we have lots of nodes where we calculate redundantly the same Fibonacci number given the same index. Okay, so for now let's go back into JupyterLab and now let's write a function that implements the approach that I just throw you on the piece of paper. So let's define a function and let's call it simply Fibonacci and this function takes one parameter as its input which is going to be I an index number and let's go ahead and write a nice doc string so calculate the IS Fibonacci number then arcs is of course I which is an integer and this is the index of the Fibonacci number to calculate and this function also returns something namely it returns let's write it down as IS Fibonacci and this is also going to be an integer and now let's implement that using a recursion so in a recursion the base cases is basically what you see also in the example which is given okay so let's go ahead and say if I the index of the Fibonacci number to calculate is 0 then we know by definition of the problem that the answer is going to be 0 so we simply go ahead and say return 0 now we're going to say elif I is equal to 1 in that case we go ahead and we say return 1 so now note or remember how elif work so the condition after elif is only executed and checked if the condition in the if clause is false so in other words if the first condition is true we hit the first clause the first return 0 at the return statement if however the first condition is not true then we check the second condition and if the second condition is true then we are going to return 1 okay and these are both the base cases so in this example we actually see that there are problems in the world who have two base cases so base case let's call it number 1 write it like this and here we have base case number 2 and now we are not yet done with the recursion so for now we still have to go ahead and write else and now let's go ahead and now we have to do the recursive step so let's say i is 5 just like in the drawing so what do we need to do well we have to do the following we have to call the function of Fibonacci has to call itself 2 more times now so first it has to call it with i and subtract 1 from it and then to this we add whatever Fibonacci Fibonacci gets us the answer for i-2 okay so i-1 is the number that precedes whatever number we are looking for immediately so it's basically the next number, the previous number and Fibonacci of i-2 is the number that precedes the previous number so it's the number that is two numbers before the number we are looking for and that is the result therefore we are going to return that and of course as we saw in one of the previous videos what we can do is because we know by now that whenever a function hits a return statement the function is done what we could do is we could remove the else clause again and unindent this return statement just like this so this is the recursive case and my claim is that this function is correct so let's check that first by calling it with an argument of 0 so I want the first Fibonacci number with index 0 I get back 0 by definition that works and let's go ahead and get the second Fibonacci number with index 1 I get back 1 and now let's try to get back the 13 here the 13 has which index well 0, 1, 2, 3 so 0, 1, 2, 3, 4, 5, 6, 7 so index 7 should give me back 13 so let's check index 7 gives me back 13 just as expected so this function works it solves the problem from right to left so to say in a backwards fashion kind of and now comes something that is not so trivial but something that we can already guess from the picture I just drew so let's go ahead and look at some topic which is called efficiency of algorithms in particular here we are going to look into so-called exponential growth so what do I mean by that so as an example let's go ahead and calculate the 25th Fibonacci number so let's go ahead and say Fibonacci with index 24 let's see how fast this function is it's very fast rather fast I would say okay so let's go ahead and calculate the 37th Fibonacci number with index 36 so let's go ahead and use an index of 36 and now see what do you see here you see that this cell here calculates quite some time so if I maybe execute all the Fibonacci calls here one more time we see the first couple of ones are very fast the one with index 24 is also rather fast but with index 36 we see that Python needs some time we see that with the star here the star basically indicates that the Troubledalab is still calculating and it needs some time to find the answer okay and let's see there is in Python in Troubledalab to be precise there is something built in which is called time it magic and no space here so what this time it does is it calculates or it measures how long this cell is going to run so if I copy paste maybe this up here then instead of the result I simply get back how much time the function needs so if I call a function with 24 as the argument it takes 16 milliseconds and if I call it with 36 it takes 4.3 seconds and let's do one step further let's call a function with an argument of 37 so I just add 1 to the input and let's see how long the function runs so we have to wait a bit and we have to wait longer than before and let's wait more and now it says 7 so roughly speaking it should be twice the time the cell from the cell before so in other words adding 1 to i so increasing the index i by 1 should roughly double the amount of time the length in which it takes for the function to finish ok so why is it not exactly twice as much well because on my computer and also on your computer other processes are running in the background so the Python process here does not always 100% of the processor so therefore there is some rounding errors of course but it's roughly twice the time ok and let's do one more example to finish showing the effect here if I take 38 and then I should roughly have roughly 15, 16 seconds so now we have to wait a bit more and we see that as long as this cell is being executed we cannot do anything here really right we have to wait until the program finishes less than expected but still it's roughly twice the time so why is that so the reason for that is because as we saw in the picture I show that whenever I call Fibonacci with some argument i let's say 5 here I don't just call Fibonacci so Fibonacci does not just call itself for as many times as the number suggests so Fibonacci 5 does not lead to the Fibonacci number being called 5 times but if I call Fibonacci with an index of 5 I have 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 and I think I forgot this so 15 more calls ok so in other words if I want to calculate Fibonacci 5 the function has to call itself 15 more times and the reason why is because it does redundant work so as we noted before if you go from right to left then we are doing redundant calculations so calculations that we have actually done before for which we actually know the answer ok so that is true in this case and we could also see that in the code because we can think of it like this whenever we call the Fibonacci function the Fibonacci function sometimes in the recursive case calls itself 2 more times ok so in other words for each call we make the function calls itself 2 more times unless we are in the base case right so let's say the Fibonacci function is called once from us it calls itself 2 more times and the 2 more times the function calls itself will lead to 4 more calls and the 4 more calls will lead to 8 more calls so in other words for every round of calls the number of function calls doubles ok and that is unfortunately an example of let's call it here of exponential growth here so when we talk about exponential growth what we really talk about is what is the time unit it takes for the number of function calls to double so for the number of the computational steps to double and here it is for every let's say whenever we increase index by 1 the number of function calls needed to calculate the solution for this problem just doubles ok and if you want I suggest to if you further want to dig into understanding recursive calls using with exponential growth I suggest you simply copy paste the function and you copy paste it into Python Twitter and you see also in Python Twitter how the function calls itself over and over again even with the same arguments ok it makes redundant calls you can easily see that in Python Twitter as well so that is bad we see that this is bad because the function just takes forever so the question now is is there a better approach and the answer is of course yes there is and the better approach is let's right here alternative looping approach ok so now we are going to solve the same problem the same Fibonacci problem but we are not going to use a recursion but we are going to use a looping approach in particular a for loop so why can we use a for loop here so just remember that you can always use a for loop for any kind of iteration problem if the number of iterations the number of times where you need to make some repetition is predictable so in other words if I say let's see I want to calculate the number 13 which is the Fibonacci number with index 7 as we saw then we see that the first two numbers are given and then I need one iteration to calculate the one I need the second iteration to calculate two a third iteration a fourth iteration a fifth iteration and a sixth iteration ok so we remember to calculate Fibonacci the Fibonacci number for index 7 I need five iterations so five loops so in other words it is just the number of the index minus two this is the number of loops we need of iterations through the for loop that we need and therefore we can use the for loop it's predictable so let's also do that here in a diagram so that in this diagram you also learn how we can solve the problem so let's start with the first two numbers that are given as zero and one so they are just given ok so now what we do is what we are going to do is we are going to give two names two variables that reference these numbers so at first I will introduce a name a and a name b and a and b are going to refer to zero and one ok so let's go ahead how can I obtain the next Fibonacci number well we know that the next Fibonacci number is zero plus one so in other words it is a plus b ok so let's go ahead and add a plus b and this gives me of course one and now what I need to do is I need to go ahead and I now need to move so to say my variables so what I now need to do in order to get to the next step so the problem is um find Fibonacci for i equals seven so what we now do is we will remove our variables and we will basically move the variables one to the right and now we will add a plus b again and this is one plus one which will give us two and in the next step we are going to move a and b one further to the right and now they point to one and two and now we add a plus b and this will give me three and then one more so I'm not going to draw that everything here but now if you go ahead we need a further iteration which gives me five and then we need one more iteration which gives me three plus five which is eight and then actually we need one more to get to iteration seven to seven which is five plus eight which gives me back thirteen okay so this would be maybe I write it here this would be index seven and this here would be index zero of course so now let's see how we can use that idea that I just developed that we have moving variable names how we can use that idea in Python code and write a looping version for that so let's do that so let's go ahead and inside the function let's go ahead and set a to zero and let's set b to one okay and now we have to write a for loop so we are going to write for and for now we don't know what we are looping over so let's simply call it x and let's go ahead and say for x in range and in the range object we now have to come up with some number so that the number of iterations that the for loop does is correct so again let me go to the example above let's say if I want to get to the thirteen how many iterations do I need well the zero and one are given I need one two three four five six iterations okay so let's go further down and see how we can do that here so for now let's simply go ahead and put the I in there we will have to change it so the I is not yet correct but for now so that we get a working function let's simply write it as I and now let's see what we have to do in every iteration well in every iteration we now have to go ahead and simply add a plus b this gives us a sum the sum of the next number the next number so how would we call that well we could call it next number this is one way however because this variable as we will see is a temporary variable we could also simply call it temp for a bit shorter but you see from a conceptual point of view is it just the next number so now after we have calculated the next number what we need to do is we need to change A and B as we just saw in the diagram I drew so how do we do that well we know that our new A so the A was always the number on the left hand side so the new A so let's look at this here so the new A is my old B right this is what happens in the iteration so in other words my new A is simply my old B write it just like that in code and what is my new B well my new B is my next number ok so my new B is nothing but temp ok and then that is the for loop and now this loop is going to run a couple of times and after the for loop is done we need to return some result so let's simply go ahead and say let's return B ok we could also return temp ok so maybe we can make this a bit clearer maybe let's rephrase it into next number and then we are simply going ahead and simply return the next number however note we could also simply return B here right because B and next number is basically the same after the last step in the for loop so let's go ahead define the function and let's call the function fibonacci loop for an index 7 ok and I get back 21 and that is of course the wrong result so what happened here well in order to find out what goes wrong my suggestion is to use a print function inside the fibonacci loop function to get some intermediate output so let's do that print out whatever A and B is and we will end that with an empty on an empty line and inside the for loop after we calculated the next number what we are going to do is we are simply going ahead and we will print out whatever the next number the next current number is and we will also put that on one line and now if I execute the function again I see exactly what the problem is I am using one too many so how do I fix that well I fix that by simply saying instead of range of i I simply say range of i-1 so in other words we have the loop one less time now if I go ahead and say fibonacci loop with 7 argument e i is said to 7 will give me back 13 which is the same 13 I got back up here that is how you come up with a solution using a looping approach and then of course once you are done and you know your program is correct then it makes sense to of course get rid of the print function calls here again and now we see that this fibonacci function also gives us the same result so now let's do the experiment so up here we saw that the recursive version takes forever to calculate these numbers so let's go ahead and also calculate fibonacci the same numbers that were slow above so fibonacci with index 24 very fast but it was also fast above let's calculate fibonacci of 36 which was already slow up here it took 4 seconds to basically calculate the result so if you do that here it's basically there in an instant also if I go ahead and calculate the 999th fibonacci number so this is really the fibonacci number because we start to count at zero so this would be it very fast if I go back up to this cell here and if I call the normal fibonacci function the recursive version with the index 999 this now calculates forever literally okay so without doing any calculation of how long this algorithm or this code here this code cell may run I can already guarantee you that this will take several years to finish so the only way to finish the cell is to really stop it here with the keyboard interrupt okay so what we see here is that using the looping approach we can actually solve a problem very easily in a very good time so it's very fast algorithm but using the recursive approach up here we cannot really solve the problem for big input okay so that is a big problem however why do I like the fibonacci function in the recursive formulation what I like here is that I would claim that this function is a lot more readable okay if I don't tell you what fibonacci numbers are and I just show you this code here this function well you could guess what it is you can say well whatever fibonacci of i is it is the sum of its two predecessors of i-1 and then we have a base case here two base cases okay so this code I would guess is easier to read and easier to come up with if you know what you're doing of course if you see the general relationship which is basically the two predecessors added is the next number the approach down here using the loop we just saw as I did it that it's not so easy to come up with how often do I need to loop but you really have to think about how often do you need to loop you really also need to understand how the A and B works here so this is how my guess is that this solution is maybe a bit trickier to find however this solution has a big advantage it is faster it is way faster it is exponentially faster than the upper solution so for fibonacci this is the only approach that we can actually use in practice however that being said in a future chapter when we talk about the so called dictionary data type we will review this version the recursive version and we will make this version fast so maybe just to give you a quick idea of how we can do that so in our actual graph here when I calculate fibonacci of 5 and I calculate fibonacci of 4 and this break this down and I go down this path here once I get for example to this fibonacci of 2 here I already know that I calculate the result so if only I could store the result of this node here somewhere away in some book where I can basically simply write in all the temporary examples of intermediate results that we already had and then I could simply go ahead and look up the results from here ok and this is what we will learn in a future chapter of how to do it but for now we just have to live with the fact that the recursive version is simply not efficient so let's quickly go ahead and finish up the looping version make it look nice so one thing that I just want to mention if you write a for loop and the variable over which we loop so x in this example we don't need it and we see that we don't need it because we don't use x here so know where we use x here what you do in python is this is a convention we simply replace it with a variable called underscore so underscore has many different meanings in the python world but one meaning is that we don't use the variable we don't need it but for syntactical reasons we need it so if I leave away the variable in a whole then I will get a syntax arrow so I must specify a variable here for syntactical reasons and since I don't need the variable I simply go ahead and specify it as underscore that's just the convention and then also something that we can do we can get rid of the next number variable here so let's replace return next number with simply return b because we know that b is equal to the next number in the last step and now what we need to do is we need to update a and b simultaneously so what we could do is we could do the following we could write it on a line on its own so we could do the following copy paste this down and I get rid of the first and the last line and this line here, this one line will now simultaneously go ahead it will first evaluate the right hand side so the first part before the comma will just be b and the second part will just be a plus b and then the two results so b the value of b and the value of a plus b will be stored into a and b so this is basically how we can simultaneously update variables and let's check if everything works it does we have a nice version of Fibonacci a looping version which basically solves the problem in an efficient way so this is it for this video please review recursion if you still have troubles using it and also take some time to understand why this function is not so good so draw a diagram on your own run this recursive version in python tutor do whatever it takes to understand what goes on and why this is not a good solution here and then I will see you in the next video


So I'm going to get started in a minute because it's 9.48, 9.49 according to my watch. I don't want to start too early and disappoint the people who come in late. Okay, so I might as well get started. Hello everybody. My name is Dave Neary. I work for Red Hat in the open source and standards team. What we do is we make all of the open source projects or try and make all of the open source projects that Red Hat is invested in, well least successful, whatever that means for that project in specific. So one of the tools that we use is Personas and I'm going to guide you a little bit through today what are Personas, how you can use them, how they're useful in terms of thinking about your product discussions and your marketing discussions around a project. And specifically thinking about OpenStack and how we can use maybe Personas to help facilitate discussions in the OpenStack project. Okay, so I should start with a problem statement. What are Personas? Why do we have them? What problem are they solving? So one of the things that you'll hear a lot in open source projects in general and even outside of open source is you'll hear people talk in generalities, just like I am now, about what their users want. One of the discussions I've had recently with a colleague is we were doing a website and he said, what do you mean you've got an open source project and you don't have a download the source link on the front page, you don't have a link to the license. And I said, well, you know, thinking about our target audience, we're thinking about people who want to install this first and then maybe later they'll start getting involved and we don't want to scare off people who aren't familiar with, you know, downloading source code and compiling projects. We don't want to scare them off by having that be one of the primary artifacts that they see. And so we ended up in this discussion, you know, open source projects, we must have a download source code link and I said, well, you know, that doesn't fit into what the primary target audience of the website is. So when you get into these kinds of conversations, what typically what you'll find the symptom is the conversation. The actual core problem is that you don't have a key understanding of a common frame of reference in that conversation for what your user is, who you're talking about. So, you know, when you're talking about no one uses Feature X, I've seen in the GNOME project, which is another project I've been a long time contributor to, the number of times where every now and again somebody would say, well, why are we even supporting 1024 by 768, nobody uses that anymore, except we have some statistics for the screen sizes that people use in GNOME and about 20% of our user audience is 1024 by 768. So it's a question of not being distanced from your audience and thinking that everybody you know who uses the software is representative of the general target audience for the software. So personas can help there. So, basically in the OpenStack project, this is an extract from the OpenStack user committee charter. An OpenStack user may have different roles, can be a consumer, an operator, an ecosystem partner, a distributor, provider, appliance vendor of OpenStack. An OpenStack user may be from different types of organizational affiliation, company, government, non-profit, can come from different market segments, so they talk about healthcare, military, state and government, or they're a list of about five or six different market segments. And then finally, geographic regions, Asia Pacific, India, Europe, South America and North America. And the thing is that this is really broad. I have absolutely no understanding of what an IT manager of a military organization in Indonesia has as his constraints when he's deciding what cloud software to use. If that's part of our target audience and clearly it is, then we need to understand that person what his problems are, what his needs are and how we can solve them. And so that's where personas come in. And it's kind of a bad word in open source projects, marketing. This is where the personas have come from, they've been used in the marketing world and the communication world for decades. So I want to talk a little bit because this is a bad word. What is marketing? Why is it appropriate here? We think of it as kind of putting lipstick on a pig, right? You take whatever the developers give you and the marketing is, okay, how can we sell this now? How can we push this down people's throats? And that's the idea we have of marketing in the technical world in general. And that's not what I think of as marketing. So I'm going to guide you through what I think of as marketing and hopefully by the end of this you'll all realize that you're all in the marketing department, including the people who aren't in this room actually who may need that. So the very first thing in marketing is you need to know your target audience. You need to understand who am I aiming for with this product or project. What am I trying to achieve? What is the problem that I'm trying to solve? So once you know your target audience, you can identify the problems that they have. And then from there try and fix them. So you've got an idea of who your target audience is, which market segment you're going for. And then you've got an idea of a problem that they have. This is from FOSSTEM this year. The projector was we had to get a replacement projector and the projector was pointing too low. The problem was that the projector was pointing too low. The solution was to put a bottle underneath it. It's a hack, but it solved the problem. So if you can fix a problem that people have, then you're in good shape. And then once you know that somebody has a problem and you fix the problem, that's not enough. You then need to let them know that you have a solution to their problem. You need to get the word out. And that's where the communication and marketing that we typically think of, you know, Marcoms comes into play. Now that we have something that we feel like people will want to hear about, how do we actually reach them and get to them with that message? And in the old world of broadcast communications, and I say old, it's only been for the last 60 years since we've had television and radio, and it's in the process of dying. So maybe broadcast communication was a blip in the history of marketing. I don't know. We're not going to go into that today. In the old world of broadcast, the way you got your message out was, you know, by spending as much as you could in as broad a channel as you could. You kind of plastered everybody with the same message, and you hoped that the subsection of that audience that was interested in your message would hear it and see it. In the open source world, that's not quite what we do. It's important in the open source world, and in general, in fact, to go where your target users are. You need to be sure that, for example, one of the things that you see in open source projects in general is that we go to open source conferences to promote our stuff, right? FASTEM, OSCON, the Linux Foundation events, right? These are the places where you go to hear about open source projects. But if you're doing something like OpenMRS, which is medical record systems, maybe you want to go to medical conferences, places where doctors are, and people who are deciding on the IT infrastructure for hospitals, because that's your target audience. Those are the people who are going to adopt your software. The fact that it's open source is kind of a nice secondary selling point, but the primary selling point is we do electronic medical record systems. So you need to go to where your audience are, and that's a key mistake that a lot of people do in open source projects in general, and again, personas can help with that. It's not enough that you know who your target audience is, that you know what problems they have, that you've solved those problems, and that they've heard about your solutions to those problems. When they use it, they then have to actually like your solution, right? They have to adopt it, and it has to be easy for them to use. If you make it hard for somebody to adopt your software, then it's never going to take off no matter what you do. One CEO that I know has a test that he does. He sets aside an hour a week. He asks people to propose four projects that he will test in that hour. He gives them 15 minutes each. If in 15 minutes he cannot install the software, configure it, and have something useful happen with it, he's not going to look at it, right? That will never get into that company. It's got to be that easy to use. So that's the test that you've got to apply to your own stuff, is can somebody from our target audience take this up and do something useful with it almost immediately? If you're not there, then you're not going to get take up whether you like it or not. And finally, something which is new in the open source world, which is not so relevant perhaps in commercial software world, is that if you want to get people to go from using your software to being contributors and engaged users of your product and kind of going further down the funnel, you've got to be nice. You've got to have a nice culture. It's very important in open source projects to think of the culture that you have in people's first experiences with your community. And so that's marketing in the open source world. It's kind of the four P's of people here who have done business studies. It's the standard price position, product and placement. What is it? Yeah. Very good. And there are several other P's that people occasionally throw in to compliment the four P's. But this is marketing 101. You have to have a good product that people know about, that people like, and that's got the right price. And price in the open source world is typically the amount of time you've got to invest in. Okay? Right. So how does that relate to personas? And this is the only slide where you will see the two. I know that there are two plurals for persona. I acknowledge that the Greek origin of the word would mean that it's pluralized to persona. For the context of this presentation, I will use personas. Okay. This is the book that introduced personas to the world of information technology. The inmates are running the asylum. This was a book which basically the starting premise of the book is we have engineers writing software for people who are not engineers and they don't know how to do it. They're writing software for themselves. They're writing software which reflects the architecture of the software they're writing, and reflecting the conceptual model that people using the software have. So anybody here who's into user experience design will have the Don Norman books, emotional design, the design of everyday things. Very similar idea is there was a break, there was a disconnect in IT in the 1980s and 1990s between what we were producing in the IT industry, the way people perceived how that software should work. So you ended up with horrible software with lots of options and so on. So he introduced the idea of personas in terms of product development, in terms of coming up with user interface design. And as I said, it's been used in many other industries for decades. So what is a persona? So the basic elements of a persona is if you want to get down to the knob of the matter, you want a persona to be real enough that you can identify with the person, but abstract enough that it represents a group or a market segment rather than just one individual. So a persona typically has a name. You'll typically associate a photo like any face at all will do. Age, family, job, situation, anything which is relevant to your target audience. So if you're targeting something which people use in their spare time, maybe you're going to focus more on the outside-of-work life aspect of the persona. If it's something that people use professionally, maybe you just want to acknowledge the fact that they do have a life outside work and that IT is not their primary passion. Unless your target audience is people whose primary passion is IT and then maybe you want to focus on the fact that they spend three hours a night recompiling kernels, it's not the 1990s anymore. We don't do that anymore. So it's distilled characteristics of a market segment. A useful tool that I found in thinking of coming up with personas, you won't have one typically for a project, you'll have several, is to think in terms of the community types. This is the four communities is something that Simon Phipps has used in a couple of blog posts. So you can have, typically, you can have user communities or developer communities in open source projects. And in the user communities, you have individuals who want to use your software. Those are kind of engaged users, people who are kind of joining forums, posting to mailing lists, who want to update documents in a wiki. They want good documentation and they want community engagement, the ability to exchange with other users. You've got deployer communities, people who are taking that software, packaging it up, perhaps including some extras, and shipping that to people directly. So they have different needs. They want a kind of a higher quality communication channel with the core developers because they're representing much more than just one person. You can have the core developer communities. So you've got either the people we typically think of as the open source developers, the people who are working on the core code. They need patch review or source control, mailing lists, the hate forums, hate forums. And all of the other kind of developer tools that we were used to in open source projects. And then you've got the extension developer. They have different needs. It's something like what you see in Firefox extensions, the store. They want a path to market. They want good API documentation. They want good developer tools. So by thinking of the, in terms of the community types, and where do these people fall, the target audience archetypes, where do they fall, will help you also kind of find the solution to the problem. So here's an example of a persona. It says, don't worry about the text on the right. This is just a screenshot. I've summarized the main points on the left, right. Left, right. So this is Frank. He's 32 years old. He's a system administrator in a medium-sized company. He's the guy who the CIO will go to to figure out what technologies to test in the lab so that they can decide what they're going to deploy at the next release cycle, right. So he's kind of interested in technology. He's kind of the free software guy in the company. Everybody knows this person, right. He's kind of the free software guy, but he's typically a user, somebody who keeps track of the latest tech trends. But, you know, basically by hacker news and Reddit and whatever kind of the standard mainstream tech channels are. He's not going to be on developer mailing lists. He's not going to have the time to do that because he's got his job to do. Outside of work, he's a tech enthusiast, but he's kind of a hobbyist programmer, but he doesn't spend his weekends doing this stuff, right. Essentially a job for him. So how do we get to Frank? Does Frank go to conferences? Is Frank here this week? I would say no. Jboss example, this is a developer. So this is one that the Jboss community, previous one, Frank. That was me. That was kind of an amateur thrown together over the course of a few weeks in a few hours. And we'll see how to do that later. Jboss, this is a professionally developed persona. So much more work upfront, much more professional. And you can see there's much more information in there as well. So this is Matches. Matches is a kind of a senior developer building in-house applications in a larger company. He's a bit of a laggard, technology-wise. He has enough on his plate just with the work he has to do. He doesn't want to spend all of his day looking at what's the newest snowflake on the market. He's not going to test the next CMS. He's not going to test the next MVC framework. He just wants to use what he knows will work. Matches is not going to be the person who's going to get Jboss into the company. Right? How do we reach Matches? How do we influence his decisions and make sure that we're getting our stuff into the framework? So this is a persona. This is why it's useful. And we'll see you later. OpenStack Personas. Some of the personas that we might have in the OpenStack project in terms of operators, but maybe the typical use case for an OpenStack user would be somebody who's running a QE lab. We've got the guy who's operating the lab so that we have QE engineers who can spin up their own VMs, test something, test an application and environment and kind of tear it down very quickly. Right? Make that workflow easy. Perhaps we're talking about system administrators serving internal customers. Right? So we've got people who want to be able to reboot their own internal services, kind of a private cloud. Right? Or maybe we're going to be focusing on something like an ISP. Right? Somebody who wants to just make a VM available to customers, build them according to what they use, make it highly available. Those are the kind of the features that they're interested in. In terms of resellers, distributors, maybe we're talking about somebody who's building a public cloud offering, like Rackspace or HP. Maybe we're talking about somebody that's like Red Hat doing an OpenStack distribution. Or maybe we're talking about companies that are selling add-on, value-add products on top of OpenStack. Each of these are different types of people and each have different needs. In terms of end users, these are just ideas for potential personas for the OpenStack project. If you're talking about a dev ops that wants to maintain many services, kind of monitoring over a series of VMs, perhaps somebody who just wants to run a web service and wants to make it highly available. So we need to have load balancing, we need to have redundant services and backups and snapshots and all of that kind of stuff is more important. And so on. Okay, so that's what personas are. That's what they look like. What use are they? We've already seen it quite a lot. I'm not going to labour this point. Essentially they're useful in terms of user interface decisions because by having an idea of the person that you're targeting, you have an idea of their technical level, you have an idea of what kind of prior knowledge they're bringing into the experience. For something like educational software where you have different user audiences that are all going to be using this software. So you're going to have kids of different ages. Preschool kids, you're going to present a different user interface for the high school kids, for example. Teachers will want a way to interact with the system as well. Khan Academy has three separate interfaces. They have one for the students, one for the teachers and one for the parents who want to track how their kids are doing and figure out where there's difficulties. The classic example in the inmates are running the asylum is people using an in-flight entertainment system in airplanes. The needs of the first class passenger who is travelling every week are only three films because he's seen them already twice this month are not the same needs as the mother of three who's travelling with her kids and wants to make sure that they're not going to be watching the violent movies that she doesn't want them to be watching. So you need to have the different interface and that's not going to be the same interface that the flight attendant is going to use to reboot a seat if it's having problems or that the technician is going to use in the airport to upload new movies or that the airport executive and how the movies are going to go and how they get classified and what the deals are with the studios and what not. So do I need different user interfaces and what are those different user interfaces going to present to people depending on the user profile that they have? How can I reach my target audience? So we saw it with Frank. Frank's not going to be here this week. How do we get to Frank? Maybe standard communication, press releases, analyst relations, all of that will reach Frank and we'll get picked up by mainstream news sites and somebody will blog about something cool that we're doing and Frank will pick that up through Reddit. Maybe. Maybe we need something else to reach Frank. Maybe we need a road show. So maybe Frank won't come here but maybe if there's an open stack meetup in his town he'll go there. So how do we go about spreading out this kind of outreach to the tips? Another place where it comes in useful is thinking about feature decisions. Right? Do I need... Between... I'm going to try and think of an open stack example. Between... Okay. Let's forget the open stack example. Between... Between feature A and feature B. Feature A is going to be more useful to one target audience segment. Feature B is going to be more useful to others. Which one do we prioritize? Feature A is going to be more useful to one target audience segment first. And personas can help you frame that kind of decision. And finally, what should our website look like? So it's one thing to think about. Website is a promotional tool. Another use of the website is an informational tool for people who are using your software. So you can think of, okay, what are the kinds of questions that people have when they come to my website? How can I answer those questions quickly? Is it more to find out about the project and contact with the developers? Or is it because they want to meet other users? Or is it because they want to download the software? Or is it because they want to compile from source? So in terms of thinking of your target audience and thinking of the kinds of things that they want to do, that can help you very, very much in coming up with better websites. To summarize all of that, what personas do is they allow you to focus discussion on a specific frame rather than have this broad discussion where you're talking about your users, your developers, and so on. Okay, so how do you come up with one? We've seen, I think, that they can be useful. We've seen what they look like. How do you come up with one in an open source project? What's the process? Because one of the things that's difficulty is that you can invent personas, but you don't know whether they're right or not. So the first step in coming up with personas, typically, is to do interviews. You talk to people who are potential users of your software, current users of the software, users of your competitor's software. And by talking to these people you don't want one of the traps that you can fall into is to talk about your personas as people who are already using your software or people who are to kind of idealize and say this person has the problem that the software solves without actually having a clear idea of what problems people actually have. So to think in terms of idealized terms rather than the concrete. So for overt, for example, I talked on the user's mailing list to maybe a dozen or two dozen users of overt software to find out what type of company do you work for? How are you using this software? What was attractive about this software? Do you use anything else? Any information that you can get which will help you understand the problems that these people are having and how you can eventually solve those problems and solve them better. Once you've got a set of interviews and you can have, in professionally done ones you can have hundreds. I talked to a colleague last week who was telling me, yeah, when I do an interview I do about a hundred. When I do a persona I do about a hundred interviews and then I condense those down. See a cluster and consolidate your profiles into archetypes. You want to reduce those hundred down to a small manageable number. So you say okay I did an interview with this person and this person they're essentially the same use case. I can merge those. I did an interview with somebody who is managing a small cloud for communication company, internal managing infrastructure and managing storage and I did the same thing and it was somebody in a different market segment but essentially the same problem set. I'm going to solve the problems for him and I'm going to solve the problems for her too. So you can merge those. And by that you can get it down to a manageable number. I would say for most projects between four and eight is probably a good number of personas. So once you've clustered things down to about four to eight kind of market profiles you've got four to eight piles of interviews then you're in good shape. Now what you want to do is distill from those piles of interviews the salient details. What represents that pile in each persona. So you're kind of bringing it down to the core details of what you're interested in in the person in the archetype. And so your end result when you've done all that you've got your persona which has the picture, the name and so on. The end result of that is that you have easier discussions. All of your internal discussions become easier because you're no longer talking about your users you're talking about Ellen you're talking about Ahmed. You're talking about specific people that represent groups of your target users. So you can say well okay adding that feature will help Ellen but actually it makes things more difficult for Brian how do we do this in a way that keeps both satisfied. So it makes it easier to have those kinds of discussions internally. It gives you a better idea of the publications that you target because you know what people are reading or you have some idea you know what websites people read. Gives you a better idea of the conference plan to go to so you're focusing your investment on conferences where your target audience are actually going to be there rather than going to conferences and kind of talking in the echo chamber which we can sometimes feel like we're doing especially in open source projects where you go along and you see the same people every two months and you say well are we meeting anybody new at these conferences are we getting value for our money here. It gives you a better idea of yourself and their shoes. It's a very good tool for creating empathy with your users and your target users and the end result of it which is what we all want is more and happier users. We've got at the end of this you're going to see your user base grow because you're going to have a product that's going to address their needs better than it did before. Thank you very much. Are there any questions or comments or feedback OK, so the question was are there any examples of open source projects that have gone through this process in the community. I mentioned Overt earlier I do know of several projects that have done personas in the past but I don't know if they've been kept up. I know that they've been done in the ALS project for example which is the upstream project for CloudForms. I don't want to just talk about Red Hat projects those are the ones I know best. We've done some in the GNOME project in the past around GNOME 2 time most of them have been done at the at the impetus of companies that were participating in these projects. I don't know of any others does anybody know of any other projects that have been doing personas successfully? Any other questions? Yeah other open source software projects I'll repeat what you say that's fine this is Skater you said? Skater was that your reply to Parik or was that your question or your comment? Your comment was that Skater I'm repeating for the cameras Skater uses three types of personas to focus their discussions one is the software developer that doesn't have any operations experience who's more interested in self service and having assumptions made for him so this is the person who's going to operate the cloud and then the IT director who's going to be choosing the cloud software that the company applies and they're more interested in collaborative how is this going to fit into our IT infrastructure and how does this work with other pieces that we're already using is that a fair summary? Ask your question What open stack personas are underrepresented in the user community? Right now we don't have any personas so what we have in the user committee is a broad idea of what our target user audience is and my suggestion is that we actually go about creating some personas over the next few months which help us to focus those discussions so I would say all of them is kind of the glib answer to your question Well I have honestly in terms of the the people on the user committee they represent a kind of a broad basis of people and they're again repeating for the camera So in terms of the people on the user committee which people are missing that would be in the target audience was that your question? So certainly I think in terms of some of the user segments the education user segment seems to be pretty well educated research labs seems to be pretty well represented Certainly private enterprise you know bigger companies doing doing public cloud and large private cloud they seem to be well represented I would think in terms of Asia back Japan, Singapore China under represented but I haven't been following perhaps as closely as I should have but certainly and kind of people who want to use this I don't know if that's even a target audience but if we're imagining people would be using this for their personal virtualization needs or small to medium size business so you're talking about somebody who's got maybe 10 servers using this for a small private cloud I don't know if we have any of those represented on the user committee right now Okay So the practical tools what are the practical tools that people can use for this I love paper, I really paper and pens great, you can draw stuff Wikis are good anything that allows you to throw stuff up quickly Wikis are good but I start with paper and pen email for interviews this is low tech stuff typically what's missing in persona development is not the tools to do it, it's kind of the time and the the volonté to use the French word the will to carry it through so this is a presentation of personas as a general idea not a proposal to do this in the context of the user committee but I would like to kick that off and it would be the natural place in English Thank you Okay, shall we call it a day? Thank you very much, I hope it was useful to you and you have four minutes to get to your next presentation


The Cavalcade of America presented by DuFont, maker of better things for better living through chemistry. The lions and industry who have created a civilization enriched with a thousand and one comforts of daily living and to their spirit that we shall lead in the march of human progress, this performance of the Cavalcade of America is dedicated. Since an original radio comedy, Dr. Franklin takes it easy, written by Eric Barnall. A story of some of the amazing inventions of America's genius philosopher and beloved patriot, Benjamin Franklin, starring John McIntyre of the Cavalcade Players. Our Cavalcade Orchestra and the original musical score are under the direction of Don Buries. DuFont, maker of better things for better living through chemistry, presents John McIntyre as Benjamin Franklin on the Cavalcade of America. Benjamin Franklin, one of the best known men in the world, was living quietly in Philadelphia. He was over 80, happy in the midst of his family and writing long letters to his friends. Every afternoon his little granddaughter Deborah came into his study, for he would help her with her lessons. Is it an invention? Well, I suppose so. Oh, aren't you wonderful, Grandpa. Museum? Yes. Well, that is a secret. What are they for? You see that book way up there on the top shelf? With a gold letter? Now, suppose I want that book.  Oh, no. We won't need that, not now. But I like to see that work. That's a good invention. Yeah, but look, we hold the stick with the prongs right in front of the book. And then we go snapped. I just reach up the mechanical arm and grab a book, if you like it. I think I will. It'd be just what shopkeepers need. I'm sure they'll all want one. Then they can reach things from high shelves, without any trouble. Yes. That's an idea, Debbie. We'll offer it to them. Oh, my. All the neighbors are using the chair that unfolds into a stepladder. Every house on the street has one. Indeed. And I think you invented that only a few months ago. You're the most wonderful inventor. I'm not. You are, too. Everyone says you're so industrious. I'm not a bit industrious. I'm just plain lazy. You are not. Yes, I am. I'm lazy. The laziest man you know. Why do you suppose I thought up this new invention?  Why, I'm so lazy. I invented the way of getting around it. Grandpa, how can you be so lazy if you work so hard? Why, just think of all those things you've made. All right now. Think of them. I'll tell you a secret. I don't tell anyone, Debbie. I invented them all for the same reason. All to save me a little bit of energy. Boy, I'm probably just about the laziest man in the world. Grandpa, I won't let you say such things. The very idea. Can I ever tell you about my very first invention? Now, there's a good example. Was it your Franklin Stove? No, no, no. That came years later. This is when I was just a lad up in Boston. Did you invent something there? Well, sort of. One day another boy and I had gone swimming in a pond, big pond, about a mile wide, on the edge of the top.  Then came time to start home back in Boston. Well, we were walking along the edge of the pond, and I got to wondering how long it ought to take us to get home, so we'd be in time for the software and what would happen. You have to walk all the way home. I'm stiff all over. Well, maybe a wagon will come along. Aren't you tired too? Sure, Henry. I ain't all over. We're not a wagon in sight anywhere. Wait a minute, Henry. What's the matter? I have an idea about something. What? I want to find my kite again. Fly your kite? Oh, what for? Come on, Ben, let's get on. No, I want to find my kite. Look at that breeze. But let's get back to Boston. Oh, I'm tired out. You can wait a moment.  Look at it go. Oh, I don't care about that kite. Henry, hold it for a minute, will you? Now what? Just hold it. No, all right. That's it. I'll only be a second. What are you getting undressed for, Ben? Going to take another swim. A swim? We've been swimming all day and it's late. Oh, come on. We better be getting back or we'll get a caning. Here, Henry. Hold my coat, will you? I'm going into the pond. What are you doing with the kite? You'll see. As soon as I tie it around my wrist, then I float like this. Howdy, Henry. Well, that's the idea. Say, take my coat with you. I'm riding back. Goodbye, Henry. Meet me on the other side. Well, I'll find a course, too. Only Henry lost one of my stockings on his way back. Now, Grandpa, how can you keep saying you're lazy? Why, you made up so many good models about how people should be industrious all the time. I hope you've learned my motto, Debbie. Oh, yes. We have them on our almanac at school. September was, lost time is never found again. And October was, the sleeping fox catches no coats. Well, now, making up models is the kind of work I like. You don't have to get out of an easy chair for that. You mustn't say things like that. Remember what you did with those musical glasses in London? Oh, my almanaca. Yes, Grandpa, and your stove. And all your other inventions. Well, now, you take that almanaca, Debbie. I'll tell you about that. That's a good point. You see, I was in London once trying to change some laws that weren't fair to the colonies. I wasn't very successful. But I did stay in a nice, cheerful house where an English family and their daughter looked after me. They spoiled me, fed me tremendously. And I became the Lord of the household. Well, one day we were having a jolly dinner. Boys, my mother had sounded right in this room. Shh. Which do you think? It does sound in this room, but where? Maybe ghosts. I'm going to look in that cupboard. My mother, it can't be in there. My mother, what is it? My desk, where it's gone. All my bed, dinner, glasses gone. It's impossible. The ones on the table, they must have been stolen. Let me reassure you. Mr. Franklin. Mr. Franklin, what have you been up to? Let me explain, Mrs. Martin. Do you see this glass on the table? Yes. When the rim of a fine glass is wet and the finger is passed gently around the rim, we get... It's a good one. Notice, it's difficult to tell where the sound comes from. Yes, it seems all around us. And you were doing it under our noses. Notice further that this glass has a slightly higher pitch than the first one. Why? Because it has less water in it. Now, where is all my glassware? Well, a few ladies will step into the next room. Their concert is about to begin. Mother, look at that table. All my 36 glasses in a long row. Now, ladies, you'll notice I have water at various levels in these glasses, enabling me to produce all the tones on the musical scale. Now, what would you like? A Scottish air or a mid-U.S.? What amuses you? Mr. Franklin, are you going to run up and down that long table to play on those glasses? Have I eaten so prodigiously in this house that the very thought of my running is laughable? No, Mr. Franklin. Well, it is a Scottish air. And Mrs. Martin, your glassware is safe. Nothing will be broken. This is a spectacle musical instrument, Mr. Franklin. Let's mount them on spin rules. Better idea. Then all the musician would have to do is to sit in a comfortable chair, operate a foot pedal, and lightly touch his hand to each glass. Now, why didn't I think of that before? Cheezing me. What makes you think so? Debbie, you remember these funny spectacles I invented? Yes. What did they for? Well, I used to have to use two pairs. One for reading and writing and one for distant prospects. But I like to look out of the window now and then while I'm working. And it vexed me dreadfully. I had to change my spectacles all the time. I was always putting on one pair of spectacles and taking off another. I got so exasperated, I invented these. Are those funny ones? They're funny when you have to wear them, Debbie. You see, each lens has two different focuses. The lower part is for reading, upper part for distance. Now I don't have to change spectacles at all. Maya, I just don't understand. Grandpa, you say you're lazy, but I see you working all the time. You're always making something. And Mother says you used to spend just hours and days working on electricity. Well, now, Debbie, that's a long roundabout story. Oh, both electrical bottles and batteries and everything? Well, I can explain that all right. Did anyone ever tell you about the electric Christmas party we had one year? No. Well, that's a good place to begin. One day we invited our neighbors and friends for a demonstration. But it was also a party, an electricity party. Friends, since this is an electrical Christmas party, we shall roast our turkey by an electrical jack. Over a fire, we shall now kindle by the electrical bottle. Afterwards, a plum pudding with a flaming sauce ignited by electricity. Now, here you see our equipment. Doesn't it look dangerous? Well, it is dangerous, Matt. Extremely dangerous. I'd better step back there, young man. I want to be close. Young man, it's a good idea not to be too intimate with this apparatus unless you've had a good deal of experience with it. I caution you all to be very careful not to touch these two knots at the same moment. What would happen if we did? I haven't experimented. It hardly seems wise. Get back, Tom. Let me see, Mamar. All right. We're ready to proceed. Now, the electrical fluid will leap from this knob here across this gap, igniting the tinder for our fire. But we'll be seeing anything. A flash of electrical fire. Now then, we take the other knob and carefully touch... Mr. Franklin. Mr. Franklin. It must have been the electrical fire. Look at him. Look at him. He's all blue. Mr. Franklin. Mr. Franklin. Let him breathe. His heart still beating. I can hear it. Stand back, please. I want to see. Oh, he'd be all right in a moment. I'm quite sure. Mr. Franklin. Mr. Franklin, can you hear me? Mr. Franklin. This is what comes of meddling with supernatural things. Mr. Franklin. Can you hear us, Mr. Franklin? Are you all right? Now, friends, we take the knob. You've already done that, Mr. Franklin. That's why you're down on the floor now. Oh, there it is. Where am I? You're all right. You're just resting a moment. You just had a severe shock. Oh, yes.  The blood will come back in a moment, I believe. There was quite a flash, sir. That's such a noise. Don't try to get up, Mr. Franklin. Just that there... Did it hurt? What did it feel like? Oh, like being struck by lightning. I can imagine. Just like I received a blow in every part of my body. Lightning. That's it. Did you say there was a flash? Oh, yes, sir. There you go. There's a noise like thunder. And the smell, that smell. You noticed a sulfurous odor? Did the flash occur? But yes. Thought so. Similar to the one in a thunderstorm. Friends, this supports a notion of mine that's been hounding me for weeks. If electricity and lightning really are the same, then we're on the verge of some knowledge very important. Now, forgive me for interrupting our electric Christmas party with this unseemly performance. Help me up. It was the most vivid demonstration, Mr. Franklin. Oh, it was very exciting. And very... And perhaps not uninstructive. Lightning and electricity is a common connection there. And I'm going to track it down the next thunderstorm. Mr. Franklin. Yes? What are we going to do with the church before we come in? Oh, the church. Cook it in the usual way. Hey, Sergeant, the storm's coming closer. Be careful of the kites. But do we have to bring this? Of course. It's the basis of the whole experiment. I just hope none of the neighbors see us. Why? What's the matter? Flying a kite at your age? They don't think that we're not right in the head. Well, don't worry so much about people's opinions, Sergeant. It may prove something today that philosophers throughout the world are trying to learn. Turn here into this meadow. It's starting to rain. All right, let the kite up now as quickly as you can. There it goes. Flying up fast. All right, we're going to that shed there. I've got the apparatus all ready. I want you to take care of the kite, son. Here, give me the end of the line. I have to attach this key to it. Now, if we get a spark there, does that mean that lightning is electricity? Exactly. Is the kite far up? Yeah. All right. I've got the key attached. There's a large thunder cloud coming over. Good. Anything happening? No. That's a great cloud. No sparks yet. Maybe the deadline isn't wet enough. Well, what would that do? The string is not a conductor, but water is, so the string won't conduct the electricity until it's thoroughly soaked. And look. See? What is it? The strands of hemp are standing on end, bristling up. Look. Fly. The electric fluid's flowing through. We've proved it, son. We've proved it. Yes, you remember the rest, Debbie. Once I'd proved that, I knew how to save thousands of people's homes and churches and public buildings from being stuck by lightning. Lightning rods. Lightning rods to conduct the electric fluid into the ground. Did you invent the lightning rod out of laziness, too, Grandpa? Of course. Of course. You think I'm joking, don't you? I don't know. Well, I'm not. Not exactly. With lightning rods, I made a lot of people's lives safer and more comfortable. Now, there's the fire department here in Philadelphia. Whenever any home was struck by lightning, we'd rush out with our leather buckets to try and save lives and property, often too late. Now, when a thunder gust comes in the middle of the night, you wake up for a moment and think, hmm, doesn't that sound good?  I'd like to hear a thunder when I'm in bed. Most people do, nowadays, because now they're safe. And so I did my bit to help everybody be a little lazy. You don't really mean lazy, do you? You understand me. I thought you did. You know, I think people are very important, aren't you? You're important. Everybody's important. What's too important to spend their time climbing up and down ladders all day? Well, that kind of thing makes a man a slave, and he's not a slave, Debbie, because, well, man can invent things to do those jobs for us. You mean you can, Grandpa. Well, Debbie, in all of my inventions, I was trying to make man free of grudgery to give men freedom. That's the important thing. So they could go on and make a better world. Well, Grandpa, if that happened, nobody would have anything to do. They'd all be like the princes in the story books. Be better than princes. They'd be masters of everything in the material world. Yes, I believe that. I believe that. Well, now it's time we got around the old lesson, isn't it? Well, if you like. What do we have to do today? I have to spell words for my New England primer. Let's see that list. All right, let's see. You spell some of these words. Here's one. One of my favorite words. Tomorrow. Tomorrow? That's easy. T-O. A master of all.  An amazing genius for invention dedicated to freedom and to the prosperity and happiness of our nation and its people, for which he labored all his life. The most American of us all, Benjamin Franklin, the many-sided genius in the cavalcade of America. Thanks John McIntyre and the cavalcade players for their performance of Dr. Franklin takes it easy. And now Ray Collins of the cavalcade players to tell you about next week's program. Ladies and gentlemen, next week the cavalcade of America presents a radio play, Henry Clay of Kentucky. The story of the man remembered for his great slogan, no south, no north, no east, no west. And who said I'd rather be right than president. Admiring any man who fought for unity in America as he did, I am happy to play the part of Henry Clay when cavalcade comes to you next week. Thank you. This program was played by Sarah Fussell. On the cavalcade of America, your announcer is Clayton Collier sending best wishes from DuPont.


Lithium ion batteries, LIBs, are commonly used in many applications due to their high energy density and power density. Unfortunately, they can experience thermal runaway, TR, which can cause fires or even explosions if not detected quickly enough. This paper reviews the current state of TR early warning and fire extinguishing technologies for LIBs. Early warning methods include acoustic, heat, force, electricity, and gas sensors, while fire extinguishing agents include halon, CO2, water mist, and foam. These technologies provide a basis for reducing the risk of fire and explosion from TR events. This article was authored by Ku Wang, Dongxiu Ouyang, Xinming Qian, and others.