Hi! Remington from Southern Shotty 3D here, and Blender's here to bring a little bit of positivity into our 2020 with the new 2.91 update, which means it's time for a feature video in less than 5 minutes. However, they were very gracious with this update, so it's almost 5 minutes. If you'd like a full list of all the bug fixes and all the features, check out the link in the description below. But for now, let's get started. One of the coolest new features is the improved Boolean system. It now has an exact solver which handles overlapping geometry better. This method is slower, so the old option is still available as a fast option. Thanks to this new system, some of the sculpt tools, such as trim, will be used a lot in the upcoming geometry nodes. This new feature opens up quite a few cool artistic abilities previously only available in other 3D applications. Booleans are a major asset in motion graphics animations as well. A collection option has now been added as well, allowing you to use an entire collection as an operand type, like in this example. The knife tool is also benefited and has options to handle overlapping geometry better. The Ocean modifier's performance has been improved by adding different resolutions for viewport and render options. Olympic Sequence is now support motion blur now that they contain velocity data. Subdivision Surface has several new options making it more compatible with other software. Curve Bevels now has a fill cap option and a custom profile option has been added as a bevel mode. This feature has a lot of potential for creating intricate moldings and other creations. Are you bad at Blender? If so, it's going to be much harder to blame it on the interface, because it just got a whole lot of improvements to make things easier. Property Search is an awesome new feature for beginner users or Blender users with bad memories. It adds a search bar at the top of your properties panel, allowing you to search automatically expanding and collapsing panels. Also, welcome fuzzy search, so it's more forgiving with results. For example, searching SSS and nodes will bring up subsurface scattering. Outliner has had a large update. Modifiers, constrainers, and grease pencil effects can now be drag-and-dropped in the Outliner. This means you can spend less time digging through submenus and get more done in the Outliner. Collections now have color tags, which is set from the right-click menu. Great for organizing full scenes. Mode toggling can now be done in the Outliner. Some minor control updates are you can walk left and right in the Outliner navigation and shift-click to toggle visibility for bone children. Make sure you're sitting, because Blender is not responsible if you fall over from shock and hurt yourself when you hear about this next feature. Three new volume modifiers have been added, including the amazing mesh to your volume modifier which will convert your mesh into volumes. The volume-displace modifier displaces a volume using a procedural texture. The volume-to-mesh modifier allows you to generate a mesh from a volume object. For example, make a Maniflow Sim into a mesh for stylized fluids. Thanks to your contributions to the Blender Dev Fun, all the coders on the sculpting team were able to buy a third arm so that they could code faster. At least, I mean, that's the only way I can explain that they're adding so many features every update, right? Cloth sculpting was already the coolest sculpting feature around, but I guess that wasn't good enough because it just got better. It now supports collisions with scene colliders. A soft-body plasticity property has been added to the cloth brush. There's a new cloth grab brush and cloth snake hook brush, which is just fun to play with. Several new properties, filters, and modes have been added to existing tools. One notable addition is the new scale cloth filter. Multi-res supports base mesh sculpting, which allows you to sculpt on the base mesh while previewing with higher resolutions. This even allows you to use tools like the cloth brush with higher resolution. An eraser has been added to erase multi-res displacement. This is great for fixing mistakes or cleaning up edges. New gesture tools have been added, including the line project gesture, line gestures, mask, line, union, and join modes for trim tools and more. With the new trim tools and join union mode, you can pretty much add geometry in sculpt mode by drawing on it. A completely new brush, the boundary brush, has been added. It controls the shape of mesh boundaries and is useful for creating cloth and hard surface base meshes. XYZ symmetry per mesh and fading interactive geometry overlay have been added to multi-object sculpting, making for better performance. You can now lock HDRI rotation to use EV materials as matte caps and render overlays with constructive modifiers enabled. There's now an inverts move to enhance details tool. These are the most notable changes, but there are plenty more filters, tools, and properties that have been added for advanced sculptors. Check out the link in the description below. Grease pencil has seen several smaller user interface updates to improve its workflow. The convert to mesh strokes tool has been improved and creates layers and materials with the original object name. There's a new holdout material to allow open holes and filled areas. This is useful for layering objects and compositing style tricks in the viewport. A new trace images operator uses the potrace library has been added, which is awesome for converting sketches or logos to grease pencil. Currently, it supports black and white only. Several new operators have been added, including a cleanup frames operator, which it helps with meshes that are static for several frames. Import and export options don't usually trend on social media, but they really improve Blender's studio workflow, making it more powerful for large teams. Olympic has seen vast improvements, including exporting invisible objects, writing duplicate objects as instances, exporting custom properties, vertex interpolation, and animated vertex colors. Classic Blender users can rejoice. Old large files will now load faster. Library overlides, library linking, and the handling of shading and add-on importers have all been improved. Collisions just got easier and faster with compound shapes. You can now combine multiple primitive shapes into a concave shape. Some useful new features have been added to the graph editor for animators. You can now insert all keyframe types without changing the shape. Curves or snappy are allowing for quicker, easing with less keyframes. They added an active keyframe selection color to make it easier to tell which keyframe is active. The snap menu now supports snapping to the 2D cursor. Copy to the selection has been added to keyframes. This could save a ton of time with repeat animations on multiple objects. The non-linear animation editor has seen several changes in improvements, making it easier to sync length, enter edit mode, and insert or modify keys outside of the strip bounds. Child of constraint now automatically sets inverse when applying, so you don't have that moment of panic that you just destroyed your character when applying a new constraint. The community and the animation module team was largely involved with these improvements. The image editor draw rewrite is amazing. It's so much faster. Here it is tiling effortlessly with a 16k HDRI. The old image editor couldn't handle these kind of loads. The UV image editor has also improved alpha blending, support for emissive colors, and unnotably improved improvements with viewing final render results. This is great news if you do your compositing in Blender. The sequencer has seen some improvements, reducing video decoding by about 30%. Motion tracking compatibility has been improved, and if you were somehow able to get one, NVIDIA RTX 3000 series graphic cards now support without runtime compilation. As usual, there are just hundreds of minor bug fixes, features, and other small improvements. If you'd like to see that full list, check out the link in the description below. If you haven't already, go check out the Blender conference 20 online now. Blender is a special software built up by the community and an amazing team of developers. This year's conference showed how Blender affects people's lives, sometimes in a very personal way. It's clear how much the community and team care about their product and users. It's worth checking out. If you like what you see, go support Blender and join the development fund.


Okay, welcome back to the second part of this testing lecture. As you might hear, I'm still a bit sick, so I might have to pause the videos in between to cuff and don't get too loud on the microphone, so I hope that's fine. Now we go into debugging here and then we do a bit of unit testing in this module. And you have, you should have worked with the debugger in the programming course already a bit, but most of you don't have much experience and debuggers are a bit like unit testing, something that you need to keep using ever and ever again so that you get used to them. They are initially a bit of a burden. You need to get used to them, but once you know how to use them, they're extremely powerful and they save you lots of time. So that's what we'll do here. To be somewhat successful, you need to know what you're looking for. And there are a couple of basic things that are very common that essentially have to do with finding errors. In JavaScript, the first step is always looking at the browser console. So if you ever come to me with a problem in your JavaScript application, usually the first thing I ask you is, what does the browser console say? Are there any errors there? Because quite often that's where you get an indication of where to start. So I've written a small application. That's it. It has an input field with an ID and it has a button which should call a function add element that is in my debug script here. And I have a div with an ID and this is where I want to add paragraphs. So the idea is whenever I click on my button, I read the text from the text field and I add a paragraph here with the text. The debug.js is also quite short. It's a bit longer than it needs to be, but I made at least two functions. So I have the function add element. This is called by our button in which I create a paragraph. I change the text of the paragraph depending on what get text input returns and get text input just gets the text from the text field and returns it. And then I get my div and I append the paragraph. So that's it. Now I've done a mistake in here, which means that it doesn't work. Since this is so small, you could probably find this quite easily without a debugger. But it's good enough to illustrate how it works. So let's have a look. If I press add paragraph, nothing happens. But as I said, first step, look at the console. You'll see that there is a type error down here. It says, div dot append child is not a function. And if this does not help us a lot, what definitely should help us is this information back here, which says that this error happens in the debug.js file at line five. So here we get the type error and say this append child does not exist. We don't know this function, which is great because now we have a starting point where to search. If you look at the JavaScript slides, this is perfectly fine. So there's nothing wrong here, which means the error is somewhere before that. And now we'll go and have a look how to debug that. Now, the naive approach to debugging is always to just do printouts. So you just print stuff to the console and try to understand what is wrong. That is fine. It's just a lot of work. And usually when you first have to locate the error and then you have to go into details, it can take a long time and you have to change your printouts until you get where you want to go. It's much easier to use a debugger, but in the beginning, this is very much helpful. So what you might want to do is print the values of variables because you know that, for example, this should create an object, a paragraph tag. So if this variable is not an object, it's not a paragraph tag, then something is wrong. And the same goes for the other things. If the paragraph ID, so I create an attribute here, if that's not, if that's, for example, undefined, something happened, if something is wrong here, then again, something went wrong. So it can help us to tell exactly which line causes the problem. And we have similar strategies when using a debugger. So looking at variable values over time to localize the problem. And typical things are, as I discussed, looking for whether variables are undefined or null, even if they should not be. Looking for if you are in the wrong branch of your program. For example, your if condition is wrong and you ended up in the else instead of the if branch. Or everything is fine, but the outcome is not. So then you can ask yourself, are you using all the libraries correctly? Or are you using, for example, the wrong function here? So those are things we might want to look for. Let's start by doing the naive console output. And in this example, that will be perfectly fine. So we can do console log. And I just log the values of all our things that I'm changing. So here, I'm just logging the paragraph, the text of the paragraph, and the div. And we know that here we already have an error, so we don't need to continue. And we can also go in here and just in case check is our text field correct. Is this actually working? Now if I reload and if I press, now I get a lot more output that I can look at. And you see that the first print is my P tag that's up here. So we know that the paragraph that I've created looks good. It looks like a P tag. It has lots of attributes. So on this level, it looks okay. This is my text field. So that's the print down here because I've called the function here. So we're down here, we print the text field again. This looks reasonable. Then we get this ASD whatever, what I put in here. That's the print up here. So that's the text content. Again, this looks correct. And then finally, and this is where it gets interesting, our div. We would expect something to look like this, like a div tag. But instead we get something that says HTML collection length zero. So it's some kind of collection of HTML elements that has length zero. There's no element inside. So it seems like we did not get our div. We did not get it. Something went wrong. And now we have effectively located the problem here in line seven, where we do the print. So here, something is wrong. And now we can look in detail and we actually see that. I'm trying to get elements by tag name. That returns me a collection. So it returns me an array of all the elements that have this tag name. What I want to use is get elements by ID. I want to get a specific element with the ID main container. So I've simply used the wrong method here. And because there is no element that has a so-called main container tag, which does not exist, but it would be something like this. Since we do not have any of that, we also don't get anything back.  So instead we want to have get element by ID. And now I believe there are no more errors, so this should actually work. So you see that now this looks much better down here. The print line and indeed the paragraph appears. So you can see if I change the text, then I'll get a different paragraph down there. So this was okay. But as I said, this can take quite some time. Because the problem is, if I have, for example, a lot of functions, I might not know exactly in which function my error is, so first I have to locate it. And then even if I have located the right function, I don't know exactly how my error looks like. So I might have to change my print lines all the time. And this just takes lots of time. So it's much better to use a debugger. And that's what we'll do. Because essentially you can adapt very quickly. You don't need to change your printouts. You can execute your code step by step and see what happens. And I'll show you two ways here. I'll show you in Firefox and in VS Code how to do that. But the principles are always very similar. So for example, in Chrome, it looks essentially the same. Now, in Chrome, you'll find the debugger on a developer tool source. In Firefox, you find it under debugger in the web developer tools. And what you always do in the debugger is you set breakpoints. So you go into the code and you click on specific lines. And if you have such a breakpoint, it means that whenever the code, the execution is getting there, it's paused. There is a break. And when you have a break, you can look at all the variables. So you can check out everything. You don't need to print. You can just click on it and you can look at all the details. And in particular, you can look at details that you did not know you would need before. So that's quite useful. And then you can either you can just resume. You have a play button. You just say, OK, please just continue. Or you can say, I am now doing stepwise execution. So please go to the next line. Please go into a function. Please go out of this function or so on. I'll just demonstrate that a bit. An important thing is just in case you run into this problem, the debugger, at least in Firefox, only works on external JavaScript files. So if you put any JavaScript code into your HTML, the debugger will not quite work, just so you have been warned. So let's first maybe put our arrow back in place. So this was the problem before. And now it again does not work. Now let's go to the debugger. We need some more space to actually see it. We still have the console down here because it can be useful. And now we have all the different things we can look at here. Down here is our debug file. And you see that happens to be already a break point that I put in. But essentially, if I click on any line here, I can set a break point. You will see that some lines don't work like here because there is nothing. And then the function headings don't work either because those are just declarations. So if you want to stop whenever the function is executed, you just click on two, the first line within that function. And that's what we'll do here. So every time now add element is executed, which means every time the button is pressed, the execution stops. And then we'll have a closer look. So let's try. We click and you see it says paused on break point and the thing here is frozen, nothing happens. And now we can look into the details. Now we can look at the interesting stuff. And that's over here. So what you see down here in the scopes are all the different variables. So you see, for example, our diff and para values variables, they are both already defined or they already exist because of hoisting. So they have been moved to the top of the scope. That's why we have both of them. They are both undefined because I haven't yet assigned anything. So this line here just to clarify this line has not executed yet. We just reached it. So this document dot create element is not processed yet. And then we look at, for example, all the different things that exist in the window variable, which is like a global variable in the browser. There is a lot there. And there's a lot of other stuff we can be doing. So that's not interesting. But the maybe interesting thing here is the call stack that shows us how the function has been called. So here it says that the add element function, which is in line two of the debug script has been called from an on click event in the source file in the HTML file. So we know that this was the event that actually triggered this function. Now, here are the things I mentioned in the slides. So we can now jump over this line. We can just say, okay, please go to line three next. Let's do that. And now we'll see that para actually has a value. It's no longer undefined, but it actually is a paragraph now and it has all the defined attributes. And we also see, for example, now the text content should still be empty. You see it's an empty string. Nothing is in the paragraph. If we again jump to the next function, then the text content should have changed. So now it's whatever I had in my input field. Now we're now interesting line. So if we again step over that one, then we'll see that the diff has this HTML length zero. And now we can start maybe thinking about what went wrong here. So we see that something did not quite work and we can look at the code and say, okay, this is actually the wrong function. And once we have figured out what the problem is, we just resume the operation. The other thing, maybe just to demonstrate it, if I click on it again, are the other two options here. Now I'm at this line. So I'm about to execute this get text input. And instead of just jumping to line four here, I can say, well, please jump into that function. So suddenly I'm now down here. So this allows you to vary how detailed you look at different things. Maybe you know that this function works very well. It has been tested a lot. So you don't need to look at it. You just continue. But if you're not sure, then maybe it's good to actually go into the details. But that's what we'll do here. So I'll actually look at these things. I can jump to the next. If I now say, step over, then we'll actually go out here and go to line four, which is exactly the same as if I use this one, which says, well, I have seen enough in this function. Please go one level higher. So go back here. If I do that, then I'm back here and I go to line four instead. So those things allow you to jump into functions. You can also do that with the system functions like these get elements by tag name, but it's usually not very helpful. Okay, it doesn't actually work in this case. I think usually it allows you to look at them as well, but it's not very interesting. Okay, so that's a very short introduction on the debugger. It looks exactly the same more or less in VS code. So I'll show you that as well. Let's remove my line here and I'll just go back to VS code. You note here that you have this bug symbol. And if you click on it, you're in the debugger and you'll see it's a bit similar. It has this call stack. It has variables. We have our code. And actually when you hover over here, you see this red light, which is the indicator for a break point. So I can click on here and I'll get a break point. Same as before, the only thing is you have to somehow launch it. And for that, you need to add a launch configuration. So you actually need, you can look up in the documentation how to do that exactly, but you just need to define how to launch your debug script and which tool and so on. So now I'm actually launching debug.html with Firefox again. So it's not that different. But once I'm done with that, I can say, okay, please launch debug.html. Let's go. And you see down here a new Firefox windows opening. Everything is here. And you see here, I've set the break point. So now whenever I click on this, it goes back here and I get something that looks extremely similar to what you have seen before. So here's our call stack on click and element. Up here are all the variables, same thing. And here is the visualization where we are. And we can again, we can jump over to the next line. We can jump into functions. We can jump out of functions. So there is nothing different here. And okay, we get the exception visualized. The only advantage is of course you're working in your code editor and it's much more integrated than always switching to Firefox. So that can be useful, but otherwise it's basically the same thing everywhere. They all look very similar. Okay, so that's a short excursion to doing debugging. And I really encourage you to do that, to try it out because you'll get so much more effective in your programming that if you do all of that by just doing printouts or trying to read the code. Okay, the next thing we're doing is unit testing. And we'll be in this course using Mocha, which is a unit testing framework, which means it's some kind of library that allows you to write and run tests in an easy way. It has a fairly easy intuitive syntax and it requires to use some research library. That's always the case in unit testing. You have in every test, you typically do a search and so you basically do checks. You check whether, for example, a return value is what you expected. And one of those assertion libraries is CHI. So we look at that. CHI allows different styles according to, for example, the test-driven or behavior-driven development paradigm. So the syntax is a bit similar to writing a sentence. You'll see that. Again, these frameworks are not anyhow perfect or the best, but it's a selection. And whenever you use a different unit testing framework, you'll recognize a lot of similarities. They are all very similar. You can look at the documentation on these websites, but we'll just jump right in. What we have is, in this case, function as basic as it gets. It should square value and return it. So it just returns x squared. Of course, you don't need a function for that. You could just write it like that, but this will help me to explain unit testing much better. What you see below is actual test code. So it is cryptic, but it basically describes a test suite. So a collection of tests, basically. And this is just a string. So it says, we are testing the square function. And then it has a callback function. And that just has to do with how the framework works. So it expects a callback here. And then in there, you have single unit tests, which are, again, similar structure as before. It just says it. And then it has, again, a string, which typically is written like it should do something. So the function that we're testing should return the square of a positive input. Add again a callback and in there, we're doing something. What we're doing in there is we're calling the function. So you see square five here. That's our actual function call. If we want to test it, we have to somewhat execute it. And then we check the return value. And we do this with the Chai assertion library. And as I said, this looks a bit like a sentence. So we say, expect the square of five to equal 25. So what the test does now, the test framework, is it looks at all of these collections. For all of these collections, it runs all the tests and it checks that the assertions are correct. And if they are, the test passes, otherwise it fails, more or less. So on a rough level, this is how it should look like. You have these it statements that contain your tests. If we look at that in code, I have an application here. So here's our square function. We'll do something else later, but that's good enough for now. And I have my test script here. It's a get a JavaScript file, but it's in a different folder. And it's in a different file. So that's of course useful because you don't want to mix your test code with your regular code. They should be separate. And you see that I have done one of these describes for each of my two functions. So basically one test collection per function per unit. And in the first one, I just said, okay, the first test should return the square of five, which is 25 and the second one is testing for negative squares. So it should return the square of minus five, which is also 25. And now I want to run this. Now, how do I run this? That's a bit complicated because JavaScript or so far a client side JavaScript is executed always in the browser. So we also have to execute our tests in the browser. And for that, we have to write an HTML file that contains both our actual program. So we import the my app and our test code. And then there's a whole of other stuff here. We have to include the libraries because our browser has to know what to do with these weird statements with this describe and it and so on. And for that it needs the Chai and Mocha frameworks. Mocha also needs to somehow be initialized. It has come somehow different styles. It's not that important. They are all equivalent. It's just what you prefer basically. And as I said, to include the application code, we include the tests and the stuff up here is just styling. So Mocha has some CSS, has some CSS code so that the test results are displayed in a nice way. And to display them, it requires that you have a diff with this ID. So it actually means your application is running in this HTML file, but at the same time the tests are running and are being displayed. This code, of course, you will just copy in the beginning because this is nothing you should be memorizing anyhow. Okay, so that's how it looks like. This is all we need so far. So let's execute that. So we have our tests in our test file. We have our app here and we have the Mocha HTML which now includes the whole thing. So it includes the style sheet for displaying the results. It includes the diff for displaying the results. It also has a button that executes square but this doesn't really matter. Then we download the two scripts. So the frameworks. We initialize, we set up a Mocha. We include our application code and we include our test code and then we just say mocha.run. So please run all the tests. And it means all the tests you can find in any of the included JavaScript files. And if you look back just to confirm we have two test suites here and we have two or three tests in total. So this is what you should be seeing if I now open this here. So I see squared, it's my first collection with two tests and you see async squares. That's the second collection with the third test. So that's exactly the test results you see. If we look at the inspector you'll see that all of this is within the Mocha diff. So these are our test results. That looks basic but you can actually look at the details. So you can click on this and see what it returns.  It always returns 25. So now actually the first test should be fine because we happen to have hit exactly the right spot. But this one, now this one will also be fine so that's not very good. Let's just do something that doesn't make sense. Let's return x again. So now obviously will not work. And if we reload you'll see that the tests fail and actually we get interesting information that can help us to debug. So it says expect that five to equal 25. So we already know that five was returned. Asserts an error, blah, blah, blah. And this happened at line three. So we can look into the test of what exactly happened. And if we go into the tests line three, we'll see that okay here there is a problem. Maybe we need to go into that function and debug it. And then of course we go in there and we see that we have forgotten something. So that's how this works in theory. You can just write a lot of tests. There are some additional things that I want to mention because they are fairly common. One of them is what is very common. For example, let's say you test something that has a database connection. You need to initialize something. You need to do something and you do that before every single test. For that, there is like every single unit test framework I know has these different functions that allow you to run code before the actual tests or before the actual test collection. So Mocha has the same. It has a before function, it has an after function. It has a before each and an after each function. So the before is run when the test collection starts. The after is obviously when all the tests in there have been run. And the before each and after each are the same but for every single test. So before each would be executed once before every test. And this can be helpful if you, for example, have to have some kind of global variables or anything to keep track. Or if your program happens to have a state and you somehow need to reset it or something like that. That's what you have these functions for. The other important thing is, I mentioned that Mocha has different styles and in the example here, I've initialized it with the BDD style. And the BDD style is the one that has this describe and it syntax. That's just how it looks like. There's also a TDD style which just uses slightly different naming. It's really exactly the same thing. It's just that some people prefer certain keywords and that's why they prefer to write sweet instead of describe or they prefer sweet setup instead of writing before. So unless you really want to use this, you can just go with what I've done on the previous slides and there's nothing wrong with it. But it basically means that Mocha is a bit flexible with how you write the tests. And you also find that in the documentation that there are slightly different ways of writing the assertions. It still works. Now that's one interesting thing and that is asynchronicity. How do we test asynchronous functions? And the best way of showing that is just to show what happens if I do it in a regular way. So I'll just remove my correct function down here and I'll say, okay, what I have here is an asynchronous square. So it's the same function as above. It returns the square, but it does so after three seconds. So we just kind of pretend it takes long. This might sound stupid, but it's not uncommon to have certain mathematical functions that take a long time. For example, if you want to calculate prime numbers or so on factorization, that those things take time that they're done asynchronously. So basically you call the function. You do not wait for a return value, but instead you send in a callback. It's very common. Here, of course, the artificial time out is just to pretend that something that takes a long time is happening. So what happens is just this function returns the square after three seconds. Let's try to test that in exactly the same way that I did before. So I say try expect square async, now my other function, minus five to equal 25. So this should just return 25. Let's test, and it says expected undefined to equal 25. And that's already interesting. Now, apparently this is undefined. And this is simply because there's no return statement here. It doesn't say return anywhere. And that means that, well, what this function does is it actually implicitly returns undefined. So this is what happens. Which means obviously that our check we compare the return value undefined to 25, does not pass. So this is already something that's not good. This is not how we test an asynchronous function. Now, we could do this a bit different. We could say that, well, square async actually expects a callback, right? So we could just say, well, the callback is a function. And now we change this a bit. And we say, well, whenever the function returns, so we just wait for it, then we can do our, we just expect that the parameter that is return equals 25. Okay, so now we've just said, okay, well, if undefined doesn't work, then maybe we just execute the function as an asynchronous function with a callback. And whenever the callback returns, we just check that the parameter equals 25. That's what the function does, right? It sends the square back as a parameter of our callback function. Now, if I execute that, it takes some time. And it says, error timeout of 200, 2000 milliseconds exceeded. So what's the problem here? The problem is that Mocha waits for two seconds. And then it says, if I don't have a result, it means the test is broken. We don't wait any longer. To change that, I can manually change the timeout. So I say, well, let's wait longer. This is milliseconds, so that should be more than enough. In this case, we know that, well, actually if it takes longer than three seconds, then maybe we just let the time at the pass, the test pass fail. So if you do this again, la, la, la, it waits, nothing happens, timeout exceeded. So again, this somehow hasn't worked. It actually complains, ensure done is called. And that's something I have here already. That's why it didn't work. So now it looks exactly like it texted before and you will actually see that it passes, which is great. But it's great for the wrong reasons. So if I fixed, if I break my test, if I say it should return 25,000, now it should obviously fail. But you see that it still passes. So I can actually do whatever I wanted here. Should return a string, no problem, it returns a string. Why is that? The reason is, this is a asynchronous function and as soon as it executes, the test just continues. So it goes here to line 17 and it says there is no, there is no assertion. There's nothing I need to check. So basically the test just passes and it passes irrespective of what's going on in here. So I could do a fail, I think. Let's see whether it exists here. No, it doesn't, maybe it does. No, it does not. Anyway, I could write in something that's obviously wrong. Far expect false to equal true, for example. And this would work. So something here is wrong. And to avoid that, we need exactly the keyword that I had before, we need this done parameter in our callback and that's a specific function that was passed in that we can use to test and to tell the testing framework that we're done. So what happens now is that the test actually waits until either this time has elapsed. So if it takes more than five seconds, it just says fail or until we call done. So in this case, it will wait until we get here. It will check our assertion and then it will end the test. And if no assertion is wrong, it will pass it. So now it waits and you get expected false to equal true. So this one failed, which is good. It should fail. But now we can go back to our actual behavior and say what the function gives us back. The parameter should be 25. It should be the square. Now the test passes. It has this red flag that says this took 3,001 milliseconds. This took a long time, which is exactly the 3,000 milliseconds our function takes. So now we have successfully tested an asynchronous function. So basically you need to make sure you call it correctly. You actually wait for the callback and you check within the callback your assertions. And you need to use this done parameter, the function to tell Mocha that, okay, now we have done executing this test, please finish it. So those things together make sure that you test asynchronous functions correctly. What you can always do to a sanity check that you're actually doing correctly is to mess with these parameters. So obviously this test should not pass anymore now. And if I've done it correctly, it will fail. If it still passes, it means my test is wrong. And that's something you should always check. If all your tests are passing, check whether you can break them or the other way around. So to somehow assure that your testing works. Okay, so that's also summarized here that you can use the done callback to test asynchronous functions. And that's it for unit testing. Now in the last part, I'll just give examples of system and graphical acceptance testing as the last part of this lecture.


Yeah Hi, everyone who's listening and online and who's here on the last day of the conference in the second half Thanks a lot for being here. We're gonna hear a little bit about how open source has Helped governments through the pandemic today But one request is that anybody who's in the audience whatever questions you may have comments You may have I would have liked to come down and talk, but that's I think not logistically possible But if you have just you know, raise your hand or don't raise your hand and just speak up in between, right? So this we can keep this a little conversational So let me start by introducing Myself my name is Prajakta Kualaikar and I come from India I live in Bangalore if it wasn't very obvious from what I'm wearing And I work at the digital public goods Alliance right which is a very new initiative and we'll hear more about what that is And how that has helped the pandemic etc. Etc. But that's our website So if you want to like take a look at it while I speak about it You can do that and DPG Alliance is at Twitter handles So if you want to know more about our work stay tuned on that We're in Austin, I figured this would be the perfect image to start my talk with I'm sure everybody's aware of what this bridge is in Austin But why is it there right now, right? Because I wanted to talk a little bit about what public goods are before we go into what digital public goods are, right? And it's very simple in the olden times public goods were essentially highways roadways You know the electricity that you got the power plants that were there and all of these services were given to you by the government using physical infrastructure, right and In lieu of these services you were basically, you know citizen of that country But what has happened is that today's digital public today's public goods look a lot different and Therefore we call them digital public goods because service delivery happens with biometrics with QR codes with You know education happens through the pandemic has completely moved to digital So a lot of key services that the government provides to its citizens have now become digital and therefore We need public goods that are digital. That's really what you know, it boils down to to sort of keep Democratic values of service delivery in a government setting intact, right? And how do we get to these democratic values, right? Why why do we need democratic values? And how do we get to them now imagine if a Government was building a software and this has actually happened in Estonia, right? Where you know, they had a software that was being deployed for You know public service delivery and the vendor who is making that software Sort of didn't come through on some of the promises that they made and some of the crucial services were stopped or stalled for a bit Right, which is why these digital public goods have to be people owned and how better can they be people owned than Them being open source and that's also why we are here we by we I mean You know, I would represent the United Nations and the digital public goods Alliance that basically Is doing this effort? So let me come to how and what the UN is doing about this, right? in 2018 there was a roadmap for digital cooperation that was set out by the secretary general of the UN and What this roadmap did was it basically Got all the member states of the UN the governments that are associated with it and then aid Organizations that basically are a part of the UN the huge structure that the UN is to come together to give You know way to open source products that are good for sustainable development goals And then they laid out a definition in this roadmap, which you see here on the screen, right? But what is important from technology perspective or you know from the perspective of the audience that's there today? the three main elements of you know building these sustained Digital public goods that are good for sustainable development goals now What are those three key elements and what are those products that go through this system to become a digital public good? It's advancing the SDGs SDGs are sustainable development goals. It's basically An agenda that's set forth by the UN for the world to collaborate on certain, you know Necessities in certain aspects of social good They have to be open source I'm not going to explain open source in this room and then they have to do no harm And which is what I think we are going to focus on a little bit as well today in the presentation How do they do no harm by design and we'll come to that now? How is this all functioning right because I got like this slide was not a part of my presentation earlier But I added it because I got a lot of questions at this conference about exactly who's a part of it And what is this alliance because it just seems so unreal to people in tech that the UN is doing something about open source Honestly, right and which is why I added this slide to just talk a little bit about the alliance So it comes so the organizations that you see on the screen are already members of this alliance And the idea is as we build these digital public goods You need partners to a fund them and we deploy them right because if they're not being scaled to Other countries and other parts from where they are built. There's no real like real point of doing this So all of these organizations either are involved in the funding part of it or the deployment part of it Where they go and sort of scale this product to various, you know parts of the world and I will save all because Digital public goods are deployed in more than 70 countries at this point, right? And they're helping many governments especially in low and middle-income countries Deliver a lot of services and we'll hear more about that a little bit But what happened right so 2018 that roadmap came out 2019 this alliance got formed and I want to talk a little bit about what happened right after and which is also the main Topic of today's discussion. How did a digital public good really manage a pandemic in Sri Lanka, right? Honestly, I like telling this story from the people in Sri Lanka They just like really bring it to life, but I'll try my best. So Sri Lanka has this. Let me go back to the First slide and have a little bit of surprise here So within a year after the you know, COVID pandemic had hit the world within the first year Sri Lanka managed to get the pandemic under control and think about prevention using a digital public good Now, how did it happen on 20th of January? Sri Lanka had the first case of COVID registered in the country, right?  So a lot of people from countries where the, you know Where COVID was not yet a thing were already in the country and they had to obviously leave etc So the government there started working with various You know Technology folks that were available that were present in the country and got a group of volunteers together, right? To build a COVID tracker tool while all of this was happening what The volunteers realized was that in Sri Lanka, they had already deployed something called the district health information system DHIS, right? Now, what does DHIS do? DHIS was essentially delivering all kinds of health services in different like if you see here Right different parts of the health supply chain in Sri Lanka So when they realized that this tool already exists and thus it sort of can help you catapult what you're building They basically just built a COVID tracker on top of this which took less than 24 hours because it was open source already And because they already had a very active community of contributors and you know, this was basically a community that had Started so this project started in University of Oslo But the contributors that you know are a part of DHIS to now are spread across 40 plus countries in the world, right? And obviously they're doing a great job of engaging this community And I think DHIS 2 is also great doing a great job of doing R&D while, you know They maintain the community so they also work with universities in a big capacity where they get funding for the research and development Right and that's how DHIS as a tool sort of comes to life so when the pandemic hit and the COVID tracker got built it was built on top of DHIS, right and What that did was it gave the government a lot of aggregated data on Not just you know, what was happening with COVID but also what was happening on other fronts on on other fronts in the state In the country based on other health parameters, right? And when they could sort of put this data together and analyze it There were a lot of interventions that they could think of so they could prioritize You know the limited supply of health workers where should they be you know, which region should they be dispatched to or Say if they needed some sort of contact tracing, how should that be done? You know patient isolation if you need to quarantine certain areas because in low and middle-income countries It's often hard to educate and spread awareness in a very short period of time So and you know any kind of move by the government that sudden can also come across as something that the people don't support so you have to like balance those you know in a very very delicate way and Therefore a lot of this help them balance some of those slightly, you know a fee aspects of how to manage a pandemic and Then the analytics and visualizations that they could make based on this data Help them prioritize how to do vaccination. So this move from managing a pandemic to preventing You know the further impact of the pandemic within one month all because they already had an open source tool deployed in the country Right and but I mean this is something that happened in Sri Lanka And this is probably why you know despite having limited physical health infrastructure We haven't heard of horrid stories about you know people dying outside hospitals in Sri Lanka for example, right? internationally and that's probably because they could sort of stay on top of it and they could stay on top of it This is the DHS team and they could stay on top of it because of the DHS team But I don't think what I just told you the story of you know the tracker being built within two days The you know vaccination being managed using that you know using the data from the tracker within like a month after that All of that is a great success story, but you know what is a bigger success story? Immediately after this tracker was built it was taken to 14 other countries because DHS was already You know in 14 other countries, so maybe they had to like like think about Contextual, you know building in those 14 places which their volunteers had to get into But the point is it could be deployed in 14 plus countries and now today This whole the COVID tracker and the vaccination part of it is deployed in 38 plus low and middle-income countries, right? And we are what one year into it all of this got done It's obviously because of the awesome DHS team But also because of some of these factors, right because obviously it had an open license You know it had a global community that was already coordinating with DHS's central team They also had and and sure I must mention that they also had like I heard a lot about Microcommunities and their importance and I agree with it because DHS also maintained a lot of micro communities To sort of take this forward in multiple places, right a common issue I think you know the world had already sort of was convinced that we need to deal with this as a Community etc etc and then you know it was built to the standard to the DPG standard Which is what you know, I'm going to come to next because I think that's something Some of the people who are building an open source can really sort of take Inspiration from and build to the standard. So what is the digital public good standard, right? It's a baseline requirement that is set forth by the definition that is laid out by the UN secretary general What we've tried to do is take that definition take those three elements of the definition and try to put it into a list of criteria That any open-source product built towards a social cause can meet so the first one is relevance to SDGs this is very simple if your product does anything that's good for society and Honestly, the sustainable development goals almost cover all areas of you know social good So that relevance and you have to prove it via documentation So you have to sort of have a website you have to have so not just a GitHub repo But you probably have to work a little bit more on the documentation part of it, right? The second one is an approved open license. We have so if you go to Digital public goods net slash standard you will see all the details of you know What are the kind of licenses that we accept? What are the you know license libraries that are a part of this and So we accept open data open AI we accept open software We used to accept open standard as well But we are making some changes to the standard itself, which I will come to later because this itself is an open standard, right? So OSI approved licenses we have creative commons approved licenses for content collections And the lists are already given right the third one is clear ownership now Why we have this is because we want to make sure that there's some amount of sustainability in an open source project, right? Because and and believe me in on our registry There are a lot of projects that don't have very active communities But it has someone who is basically a clear owner and can activate the community if need arises, right? So we need to know clear ownership also because we don't so once you become a digital public good You're annually reviewed right so once you become that that's not the end of it Like you have to sort of retain that status by keeping some of these things going and that's also why we need to know who the owner is Owner could be an organization or a person in an organization both are fine or it could just be an individual Fourth one is platform independence, which is basically, you know to avoid when they're locked in we want to make sure that you know only sort of open tools and Open processes are used in the whole supply chain But also in case you have any kind of you know proprietary tools that you're using you have to You can still make an application to be a digital public good But you will have to provide very functional requirements on what are the open alternatives to the proprietary tools that you've used essentially So even with some proprietary dependency you could be a digital public good Of course, it doesn't have to lead like it shouldn't be that hundred percent of your code needs to be rewritten by that functional alternative But some amount of Discretion is definitely maintained and followed in this indicator. The fifth one is documentation Which means that all your technical documentation has to be in place I don't need to go into details of what technical documentation means especially in this room, but you know We don't look at necessarily your community documentation because as I said, you know, you we don't Necessarily need you to have a very active community. We also don't want to dictate What should be the model for your community because there are many many different models people have in you know Their governance and their community building so we don't want to dictate one model over the other which is why we keep it very loose and very you know prescriptive more than like sort of descriptive here and And we also look at documentation which you know sort of make sure that Anybody even without maybe with a token know-how but with without an ability to code should be able to sort of launch and run this product right and And that's also why this documentation is very important. The sixth one is mechanism for extracting data This is mainly for projects that don't have PII information like personally identifiable information And here they have to again either arrest API again, that's not mandatory, but anyway by which you know you can There has to be a mechanism to extract the data Seventh is adherence to privacy and applicable laws Again, this is where we don't want to say GDPR is better than like not better But we don't want to suggest GDPR over any other sort of policy regime and data So we specify what are the kind of laws that you can look at but you're welcome to sort of abide by whichever Data protection law that your country has right because the idea is also that we don't want people only in Europe to be building this or Wherever else and we wanted to also come from low and middle-income countries The eighth one and here we don't only look at privacy laws We also look at like so for example if the application is collecting any data about children Then we will look at you know, how is the security of that in place? And what are the other laws around? Children for example in a country that are being followed And all of this is self-reporting So it's for the project to sort of look into what are the use cases that they have and what could be the legal liabilities Which I think any big open-source project anyways already looks into right 8 to 1 and we also help projects. I will come to that but we also help projects with The seventh point in case they are wondering what you know, what laws exactly do we mean? 8th is adherence to standards and best practices. This is again, you know, there is Principles of digital development for example, right so those kind of principles and best practices have to be followed by the Products in their build and the last one which is I think quite key is do no harm by design, right? And why is it by design because we don't look at Any implications downstream in deployment right because we understand that in open source you can have You know sort of downstream deployment of applications that can be used for various use cases So the person who has originally made an application to be a digital public good might be doing it for say SDG 3 and 4 and then Downstream it could change so we want to make sure that you know in do no harm by design We're not looking at really deployment and how this product is being used But how that product is built and under do no harm we look at three things one is privacy So your privacy policy is your sort of legal liabilities. We also look at Securities so security of your users and then production against harass harassment, right? So what have you what are the kind of so? Ideas have you thought of all the risks and have you all mitigated them through documentation? That's what we look at in do no harm by design, right? So these nine indicators together form the DPG standard as you can see that it's very baseline We don't want to go into details of exactly how things need to be done that set this is an open standard right and we want to get feedback from the community on How this can evolve and how the governance of the standard itself can evolve so I invite all of you to Go on our github and you know give your suggestions create issues on what you think about the standard Now how is the standard deployed very easy you come to our website? You nominate a project that project goes into a technical review where we you know what I just mentioned Basically our review team looks at your project across those nine indicators and then you enter the registry What is the registry and you know? We are also like one-year-old so when you look at the registry when you look at the standard You'll realize that a lot of things are constantly shifting. It won't be the same thing three months later And which is also why I want to invite invite all of you again to sort of collaborate and you know give your contributions So the DPG registry is essentially a let's say a catalog where various kinds of Implementers right so it could be governments. It could be aid agencies. It could be multilaterals They come to look at different kind of open-source products and there's been a huge conversation And in fact some of the UN organizations have moved on this where they are now only building and procuring open-source products Right so that shift is going to happen very rapidly over the next five years as the digital public goods agenda sort of evolves and with that this registry will becomes a place which becomes like a Like an app store right but what we want to do is our registry is basically just a Certification platform right? We want to connect this platform to other sort of app stores or market places that are coming up in this space Right and this is one such app store or a catalog that you see which is made by digital impact Alliance And this is I think yeah, this is funded by USAID is it's like it's a it's again a very UN driven organization and they're also doing a lot of work on DPG's and they've created this marketplace Which they're taking to various governments across the world right so Eventually your product becomes a part of a lot of these app stores and gets sort of visibility By people who either want to fund it or deploy it right Where does all of this lead right and What happens in the future so I wanted to paint that a little bit because sometimes we You know we think of what is happening today, and we don't if we don't see where it's leading We tend to Sort of not be connected to its core cause and that's what I wanted to get to which is the core cause of all of this Right in the future. We want to move on to digital public infrastructure, right? In 10 more years governments government services all of that is going to be 100% digital and how do we sort of make sure that we have a gov stack Ready to deal with this eventuality of governments also functioning digitally And so a lot of this is in Thinking process like we have a lot of communities of practice that we host on this We host a lot of round tables that you can be a part of to talk a little bit more about what gov stack is what digital public Infrastructure is but you know, I don't want to like add more jargon to today's chat about digital public goods but this is where all of this is heading and The partners that I showed you earlier, right? They all of them are a part of this one way or another How can you get involved? Now there are many ways by which you can sort of get involved because we are a one-year-old organization still growing so Check if your open source product can become a digital public good we have a quick eligibility test on our website and that test is just like 10 points and then it takes like less than five minutes in some cases if you know everything about your project to know whether you Get you're ready to be a DPG you can also go to our registry and start contributing to DPG's So you will find it like once you go to the registry you might find some familiar names You may not but a lot like X road for example, right? They have a really really big interesting community and a lot of them do do a lot of active community work So you can go to the registry find such projects start contributing to them and Contribute to a standard. We definitely need thoughts and opinions of all of you who are you know attending this to think of our standard As a prudent open standard, right? Again, the standard is one year old and a lot of its you know governance modules are still being sort of worked out But we are more than happy to sort of invite you to any of the council meetings that we host or any of the You know get on GitHub you'll anyway see most of the comments and issues that are open around this standard and you know The various changes that need to be made to various indicators So I think that's about it these are some of the ways by which you can be a part of the digital public goods Alliance that's coming together and That's it. I think that's with that. I think I'm gonna stop and Maybe I should have stopped in the middle and asked if people have any questions But now do any of you have any questions any questions in the audience? Yes, hi good afternoon if I run an open-source project will you or the UN help me become a DPG or you will only certify Thank you So the whole point of this standard is for products to sort of Get the support from various agencies and the systems of the UN to become a digital public good So yes and no because we don't directly provide support in the sense of you're not going to get Contributors and developers from our side, right? But whatever else you might need to sort of grow in the ecosystem That's a support you will definitely get and we do also provide a lot of consulting support So if you say apply to this, you know apply to become a digital public good We are not going to come back to you saying that either you're a digital public good or not We'll tell you if you're not we will also tell you what are the things that you can perhaps improve to become a digital public good So yes, we help you in a way build capacity in that sense But at the same time the actual doing of becoming a digital public good and actual Building to it will have to be done by you. So I need any other questions I'm gonna leave it on this But that's okay, you can come to a github and ask all the questions you have and Thanks a lot for staying through the Second half of the last day of a conference. Thanks


Hi, I'm Ines Ort, a contributor here at Food Unfolded, and today I want to talk to you about a very versatile organism. You have probably seen headlines and heard promises about it for years. It's in toothpaste, cosmetics, paint, pesticides, and in some of your favorite foods. I'm talking about algae. For a few years now, I've seen it everywhere. And I wanted to better understand whether it's just a hot trend we will follow for a while and then abandon like it's happened with many superfoods or whether algae should and will become a new staple food in our diets. Let's dive in. First of all, I was surprised to find out that there are thousands of types of algae ranging from giant kelp forests to close to invisible single-salt organisms. So yes, the algae species is very diverse. But it can be divided into two big categories. If we call it seaweed, we are usually talking about macroalgae, multicellular marine algae that look like proper plants. They can be red, brown, or green and are found in many dishes like soup, snacks, or sauces. The so-called superfoods, like chlorella and spirulina, instead are microalgae and are miniscule single-salt organisms, hard to see with the naked eye. They are easy to grow and packed with protein and nutrients. Because of this, they are often found in tablets or capsules and used as nutritional supplements. Doing my research, I realized that while it may seem like everyone's talking about algae these days, the relationship between humans and algae spreads across centuries and continents. During the Greek and Roman empires, seaweed growing in the Mediterranean Sea were routinely used as fertilizer and medicine. In fact, Roman writings from the second century AD contained the oldest known evidence of seaweed as a fertilizer. And as early as 100 BC, records indicate that ancient Greeks used a species of red algae to treat infections from parasitic worms. In Japan, everyday cooking involves using 21 different seaweed species. The most important seaweed species in Japan include nori, kombu, and wakame, which have now become somewhat popular across the globe. Moving to Central Africa, spirulina grows abundantly in Lake Chat and is collected and dried and made into a sauce, which is widely consumed by the Kanembu people of Chad. In Wales, a type of seaweed called laver has been consumed since at least the 1600s. It is cooked, mashed, and often enjoyed on toast, oatmeal, and more recently, chefs are innovating by adding it to pasta dishes and seafood pizzas. The difference between the past and the present is that, until a few decades ago, we mostly harvested seaweed in the wild, but farm production today is increasing quickly. 96% of seaweed production is now in cultivated farms, with countries in East and Southeast Asia dominating global seaweed production from aquaculture. But what do seaweed farms look like on the ground? At scale, seaweed farming looks like plots of coastal waters with lines of kelp or different seaweed species growing vertically down from lines strung across the surface of the water. In Europe, though, most seaweed is harvested wild, but farms are increasing. And algae farming is increasing for a specific reason. Scientific institutions have been pushing to make this happen. This is because algae holds immense potential to transform our food, agricultural, and aquaculture systems. For example, in 2020, the UN Global Compact published The Seaweed Revolution, a manifesto for a sustainable future, which called for international efforts and collaborations to drive seaweed production to the next level. But let's take a quick step back. Why does our agricultural food system need transforming in the first place? On land, agricultural expansion, driven by the need to meet the growing demands for food and materials, has resulted in significant deforestation, leading to the worsening of climate change and biodiversity loss. Cultivating algae for food and other uses has emerged as a sustainable alternative with multiple environmental benefits. Because seaweed grows vertically and with significantly fewer chemical inputs than land crops, seaweed farms use less space and can attract aquatic life, boosting the marine ecosystem. When farmed right, seaweed can sequester carbon, repair ecosystems, and create resilience against flooding in coastal areas. Since algae can serve as a substitute or supplement for food, animal feed, and biofuels, farming it has the potential to reduce the demand for terrestrial crops and mitigate greenhouse gas emissions from agriculture. As you might know, a large source of greenhouse gas emissions comes from ruminants, or more specifically, their burps. These are responsible for 30% of global methane emissions. How does this relate to seaweed? Well, there is a red tropical species called asparagopsis, which is notably high in a substance called bromoform. Bromoform disrupts an enzyme used by certain gut microbes to produce methane. And so, when eaten, it inhibits the microbial processes that produce methane in the stomach of ruminants. Several startups are already producing livestock feed with this seaweed in order to drastically lower methane emissions from cows. And in a few studies, scientists found that sheep burped out 80% less methane when they were fed 3% seaweed in their feed over 72 days, while beef cattle burped out 98% less methane when they were fed just 0.2% seaweed in their feed over 3 months. So that's methane. But what about CO2? Just like trees, seaweed sequesters CO2 as it grows in the form of blue carbon. However, unlike trees, seaweed does this without competing for valuable land. This is due to the vast and largely untapped expanse of the ocean, which offers abundant room for them to grow. To put this into perspective, think about this. Today's wild kelp forests cover only 76,000 square kilometers. That's around the size of Austria, or nearly 2% of the fertile ocean. For scale, half of the world's habitable land is used for agriculture, and more than three quarters of this is used for livestock production. However, algae serve a broader purpose beyond addressing greenhouse gas emissions. Another important concern is the issue of overfishing, a topic you might know a thing or two about. The intensified exploitation of seafood, fueled by growing consumer demand and a lack of clear fisheries restrictions, has led to a critical decline in fish stocks. This depletion highlights a significant problem in the sustainability of our seafood consumption. Seaweed could offer a promising solution by serving as a delicious and sustainable alternative to overfished species. Its culinary potential is practically limitless, offering many unexplored fishy flavors and textures. In addition, algae is low in fat, but packed with protein, minerals, essential vitamins like B12, A and K, and micronutrients like zinc, iodine and iron. This means that algae could be used as an alternative to fish and other seafood from a nutritional point of view. But still, there is no such thing as a silver or blue bullet to solve massive issues like overfishing, biodiversity loss, or climate change. There are some risks involved with scaling up anything, and this includes algae. For example, if the algae grows too much or isn't harvested properly, it could start decomposing and releasing all the sequestered CO2 back into the environment. Similarly, it could block out light and disrupt nutrient availability, which would impact other light-sensitive species and disrupt the whole ecosystem. While the ocean covers a huge area, we still need to be mindful of these potential issues. All in all, after reading about the benefits of algae production and consumption, and even despite its limitations and potential worries, my perspective has changed. It doesn't seem to me that we see algae everywhere. In fact, it seems that we don't see it around us nearly enough. So here's an idea. There's more to the seed than just fish. Whether it be animal feed or human food, both in the form of traditional dishes or novel foods serving as an alternative to known seafood, algae has the potential to ease the strain on both overexploited land and sea ecosystems. That is, if we develop ocean farms in different ways than we have developed land farms. By tapping into its many forms, we can help mitigate climate change, biodiversity loss, and ensure a sustainable future for our oceans and our coasts, while still enjoying the bounty of the sea.


Hey, what's up coaches? Welcome back to the YouTube channel now in today's interview coach Leo had the opportunity to speak with Tom Owens. Tom is a monster in the soccer training industry He's based in the UK and there is so much to learn in this interview The thing I want you to do after you get done watching this is go watch what he does on social media He has one of the most like Captivating social media pages. I've ever seen he's on Instagram He has a big following there and what they do on there is very different than what most coaches are doing So go check out what he does after you watch this interview. You'll learn how he got started How he's grown his business. I think you'll leave this interview really inspired This guy like I said, it's a monster in the space very good coach very high quality and I think you're gonna learn a lot from this interview. So sit back enjoy the interview and I'm looking forward to seeing your feedback from this one I was a Playing a Preston orphan here in England until 18 and then went out to America on a scholarship So spent five years in Ohio two years in Illinois Get me masters degree and as I was out there that my priority was always to be a professional footballer Everything and everything that I wanted from the game of football was a professional contract. I didn't want anything else I just wanted the professional contract and that was it But what I would say in doubt is that you know what I actually got from the game of football was way more than just the professional contract now that I fast forward and kind of Reflect on what the game of football has done for me. And so while I was out in America I was playing and then I was you know, I was trying to go pro at some usl clubs So I was at like six usl teams and for one reason or another They didn't pursue a contract for me. It didn't work out So, you know very quickly over that period of thought to figure out, you know I might need to do something else other than Kicking the ball around the pitch. I might need to provide value in other ways and I'd always been I've always been the captain of every team I played for so I was always I always sort of took it upon myself to Place myself in a leadership position in all of the groups and teams that I was a part of So I knew I guess I didn't know in the early years, but I guess when I was coming to the end I sort of knew that coaching would have been Would have been in alignment with my values in alignment with some of my skill sets that I already had from the game of football whether to be Taking responsibility leadership communicate and get along with different people and being in the changing room and you know having different personalities and and I really I was always curious and I always You know sometimes as you're playing you kind of get you see players who gravitate towards it in groups and stuff And I always I always seem to want to go and sit with everybody And I wanted to try and connect with everyone even though some people were different And you know what it's like in a football changing room Everyone's they've got different personalities different interests But a common goal of trying to win and I always found myself connecting with everybody no matter You know what they were interested in what they would do and I was always curious curious in that sense And the same when I was in school You know even early years of being in school I always whether it be people who were into tennis people who are really studious people who were into football I always felt like people in my year No matter who they were I was always curious to get to know them to chat with them to connect with them And I think that was a good alignment in terms of the skills that you need to be a good football coach From there I Took me me visa was running out so to stay in America. I would have had to Get another student visa so I pursued me master's degree in Illinois And that's when me coaching journey started. I was the assistant coach at Quincy University And that's when I really got my teeth stuck into coaching Awesome, awesome. So so tell us a bit about your your current business then what does your company specializing? And so I'd say we specialize in confidence and mindset and teaching it through online courses and through Football training. I think something that was what we has always been unique I believe in in in the sense of when I when I look at what the way that we do and then you know There's obviously hundreds of private training coaching companies nowadays. They weren't that many when I started six years ago But now they seem to be one on every corner, which is a good thing because there's options and to make sure it's in, you know, the Getting that type of individualized personalized working is so vital, which is why it's got so big I feel like and it's why it's the other growth and it's really accelerated over the last five six years But I think so and that's quite unique to us is is our level of intensity and emphasis on Confidence and mindset through everything that we do on the pitch. So I think that blend of Mindset football training details intensity energy sort of that combination. I think is is what makes us unique Awesome. Awesome. So What what let me take you back to the beginning when you first started your your training business then what was your biggest obstacle? when you started And Mean there's loads there's lots of obstacles when you just start and nobody knew who I was so that was an obstacle Especially, you know, particularly for myself. I had a lot of self-doubt. It was actually me or the brother who forced me to start pretty much And he was basically because I've done coaching in it in so when I was at Quinty University And I was the assistant coach because I was already coaching the guys there I was staying behind after trainer sessions and I was saying to the guys listen if you want to do some extra work Like I'll do some so sometimes one guy would stay maybe some Sundays three or four guys would stay and I then have done some sort of small group specific positions specific stuff for them and Because I see when I was in America I seen that the basketball for American football for baseball individualized training was like Was the norm? It was a normal thing to do It was a standard procedure and it was never like that for football So so so when I was in America, I thought why why is it? Why do the why is it such a common thing? And it's it's so normal just to get individualized training for baseball basketball American football But in football or in soccer in America, it wasn't normal thing So I thought I'll just start off and it's the guys who are more of the coaching So I started staying behind doing a lot of coaching and I loved it really enjoyed it So when I come home, I was still trying to play professional football But I was also because I didn't have any money. I was working in a factory So I was working from 7 p.m. To 7 a.m. in a factory. I don't know if you're familiar with the ok magazine Are you familiar with the ok magazine? Yeah, yeah, so I don't read it, but I was the one who was organizing it So basically I was picking the magazines up from here putting them here and I was doing that for 12 hours in a factory So I was miserable and I was wondering what value I could provide I'd just gone from being on a high in America of being the captain of every team close to being a professional footballer in the USL And I'd won the PDL. I think it's called something different nowadays But I won the PDL championship, national championship in the summer three times in four years And so I was just coming from a high then all of a sudden in a factory on minimum wage Like surrounded by people who are probably still there right now And I was in a bad place. So in my older brother was like, listen, what else are you going to do? Like you need to do something. So he really I was just and I had a lot of self-doubt around people Appearance in the UK won't pay for it. Who am I to train anybody? Why would someone going to believe in me?  I haven't been in Liverpool for seven years or actually including me time away I pressed them that's probably nine years nine years away from Liverpool So I'm like, nobody knows me. Just all this self-doubt and all these Limit and beliefs that I was creating in my own mind. That's why it wasn't gonna work and and then eventually I got to a point of desperation because I wasn't in a good place in the factory for obvious reasons And so I just said, you know what? Me older brother was like, listen, you'll be great at it And I think, you know, because he knew the enthusiasm. He knew me passion for football He knew the communication skills and so he saw those things in me before I saw them in me And before anybody else saw them in me. So I'm forever grateful for him. And then from there I did my first session and then and then and then that was it So so that was an obstacle for me. It was like, nobody knows me I had to try, you know, I had to get myself out there into the scene of people who've got all the badges in the world Done all the courses in the world and then all of a sudden there's like, who's this new guy on the block? There's Tom Owens. Why should we go to him? Why should we believe in him?  I mean, there's even today there's I could name 10 obstacles that I've got today. They're never going to end, you know But the challenge is just to make sure that the problems that you've got My problems are getting juicier and they're getting bigger and as long as the As long as my problems are getting bigger, then I know that I'm growing and all that I'm in good shape That's awesome. So let me keep you back to the beginning when you first started So how did you get your first client and how many are you currently working with at the moment? So I sent a tweet out on Twitter just saying I'm doing private training sessions And my older brother's friend Neil, he got in touch. He had a son called Leighton And basically it was just like Tom will want to do it. So once he responded on Twitter and said Yeah, I'm going to get Leighton in for some sessions. And I think at that time I was charging like £5 an hour or because it wasn't about the money at that point. It was more about the obstacle Of obscurity. Like nobody knew who I was. So I needed to increase the exposure.  So yeah, Neil was my first client. It was through Twitter I think he spoke to Lee, my older brother and just said this and I've just seen that your Tom has put a tweet out and he's doing coaching. Can you give me his number? And so I went in, I was in the back of a church. There was a local church by my house. I had like a 10 by 10 space. I had about four cones and about three footballs. And that was me for a couple of weeks. So I just, you know, I gave him a blast and saved him as Best as I could so that he would go away and talk to other people. He'd put it on his Twitter page And on his Instagram page and somebody else would get in touch and then I would save the Hell out of them and coach the Hell out of them as best as I can and provide as much Value as possible. And then they went and spoke to somebody else. They put it on their social media page and then, you know, and then it was from me. That's awesome. So how many are you currently working with at the moment in your business? How many clients do you have? So we've got memberships. So we've got about 75 clients who are on memberships who are in a subscription base for our training model. So those players are getting weekly sessions, they're getting development sessions, they're getting discounts off of camps. We're going out and doing match analysis. We're doing video breakdowns, video analysis. So we have basically a package that is anything and everything that a human being needs to become a better footballer and a better person. We've got it in a package and it's quite a new thing. You've only been doing that for about three or four months. So we've got about 75 people who are on those regular memberships every single month. And then on top of that, there's probably another 50 to 100 players that are coming out and training with us, just buying single sessions, joining our group sessions as and when they can. So yeah, so we're probably looking at about 200 players a month. Awesome, awesome. So what is your current sales and marketing process then? How do you guys promote and sell your business? Content, content. We've got a social media person, he names Megan, needs to give Megan a shout out. She's actually here right now with me, but needs to give Megan a shout out. Megan's, the camera's always rolling. Megan basically values the social media so much. And before Megan came, we were doing little bits as much as we can, but Megan's been with us now for three years and ever since she came, she was like, you know, we need to, I think she was like, this product is amazing and what is going on here is amazing, but we need to share it with the world and we need to post as much as we can. So yeah, I know even today, Megan's always given me a hard time because she's like, we need to post more, we need to post more, we need to post more. But content really, ever since Megan joined us three, four years ago, you know, the amount of inquiries we get through social media is just skyrocketed, because all we do is just, we just post all day long and we share as much as we can. We've tried to pull the curtains back and let people see what's happening behind the scenes and how we think and how we do our processes for session planning, for delivery of the sessions. So yeah, I mean, our sales and marketing processes pretty much post as much as we can and provide as much value as we can, connect as much as we can with our followers, which we definitely do a better job of still. From there, you know, providing value and making content that is actually helpful and is actually helping people, you know, that sort of inspires people to get in touch with us and then all of a sudden they're coming out and training with us and becoming clients. Fantastic, fantastic. So where do you see private training going in the UK in the next two to five years then? It's definitely grown really fast. I think I can see it being an integral part of academies. I can see it being integral part of it and I think it's already happened and I think some clubs already have this but I feel like academies and clubs are actually going to have a specific departments for private training because obviously, you know, a lot of academy players are going elsewhere to get their training and we've got a lot of academy players ourselves but I'm sure in the academies, I'm sure the academies want to control the developments that their players that they've got. So I'm sure I wouldn't be surprised if in the next few years they've got departments where they are purely hiring for experts and people who specialize in private training and in that isolated individualized football experience and I feel like they're going to have departments dedicated to making that level of commitment to players and families. So I wouldn't be surprised if that starts to happen and then, you know, even first team environments, you know, we've got a lot of first team players coming to myself. I also see on social media a lot of Premier League players and pros going to other places to train. So I'm sure first team managers are going to want to do all that stuff in-house so I wouldn't be surprised if also in a first team environment there's a specialized one-on-one small group expert trainer where the players have access to that level of work if they want to. Awesome, awesome. So what would you say then because you've been in business for a while now, so what would you say to any British trainer coach who's either watching this or listening to it and they want to start a business but they have that fear of starting? What would you say? What would be one piece of valuable advice you'd give them? Well, when I started I didn't have any belief in myself so I think the first thing is is that, you know, don't worry about your lack of belief, you know, you just need to kind of get around someone. So for me I was fortunate that it was my older brother and my older brother believed in me so much that I just went off of his belief and I almost, I just tried to ignore the fact that I had a lot of limiting beliefs going on in my own head and I didn't have lots of self-belief myself and I just went off of his belief and it's proven to work out so far for me and I think what I would say to somebody who's sat there right now and is maybe looking at my page or my work or my stuff or listening to this interview is waiting to pull the trigger, I would just tell them to, you know, it's as long as you're willing to provide value, real value and you're actually genuinely, you know, deep down in the recesses of your heart really want to make the world better, make footballers better, actually light a fire underneath people to make them better human beings and better footballers, you know, if you've got that deep feeling in your heart then, you know, it's inevitable that things are going to work out so I would disregard any sorts of self-negative talk that you've got or lack of self-belief that you've got and just go off of my belief because, you know, if you're listening to me and you need to hear it from me then I believe in you and I believe that you can, because we need lots of people doing what I'm doing I think and there's lots of people doing it which is great but, you know, I can't train eight billion people and there's eight billion people on the planet so there's lots of people who need training, there's lots of young people out there who need the mentorship, they need the guidance, they need the help, mental health is obviously intensified over the last few years so people need, if there's ever a time where people need role models and people need guidance and strong solid mentors in their life, the time is now so I would say to someone sitting there right now that, you know, people need you, you are needed in the world so step up and as long as it's your passion and the reason why I'm emphasizing the heart and the passion stuff and the desire is because it's tough, it's bloody hard and it takes a lot of hours and sometimes, you know, you're up in the middle of the night trying to figure things out there's plenty of excuses and reasons why that I could have used to quit a long time ago so the days are tough, the days are long especially when you're trying to grow it and it's intense and it gets hard and I think if you're really not, if you haven't got a deep level of commitment to making, to providing value and you haven't got a deep mission and purpose to really get out there in the world every single day and roll your sleeves up and get after it then, you know, I think you'll be swallowed up by the intensity of the job because it requires a lot of hours and it requires a lot of work but it's all worth it if you're in it for the right reasons. 100%, couldn't agree more, love it. You've even inspired me. It's all good stuff.  So last question for you then, Tom, where do you see Tom Owens UK in the next five years from now then? Everywhere, hopefully. Tom Owens worldwide. Yeah, I want to help as many people as I can, you know, but in the same breath, I want to make sure that the infrastructure is there so we can actually help and we can maintain the help and so, you know, I want right now I'm at the mercy of public facilities, which I'm sure everybody listening can probably relate unless there's, you know, I'm sure there's some fortunate people out there who are doing what, who are in the industry who've got their own facility. I'm jealous if the people are listening in and you've got your own site, I'm jealous of you, but also celebrating you because I know that you were the bandit, but that's what I, that's the next level for me is to have my own site, my own facility where people are walking in and it's through the Tom Owens UK gates and you're coming in and it's our own facility that we can do whatever we want, whenever we want to do it, at our own site. Right now there's limitations with us using other people's sites and just being a tenant in public facilities which is okay because you've got to start somewhere and that's where, you know, that's where probably 100% of private trainers have all started once upon a time is renting public facilities because, you know, unless you're born into a family that have got millions and millions of pounds then, you know, you can't really haven't got that funding up front. So then in the next five years I would like a facility in the north of the UK to start with. That's where the base is at the moment and then from there may be a facility in the south and we've got a lot of demand for our services in the south, you know, we're your base at the moment in London so I've made a couple of trips to London and there's a lot of exciting stuff down there and there's a big demand for the work that we're doing so maybe a facility in the south as well and then maybe we start exploring other realms and other corners of the planning. That's awesome, I love it. And just one more for you then because I know a lot of coaches we work with in our program, they want that goal of their own facility so if they're watching or listening the question for you is what does your company need in order to achieve that? I think something that's been big for me is the, you know, up until three months ago I mentioned the memberships earlier on in one of the questions that you asked me and, you know, sort of for me up until three months ago the memberships it was more of a guessing game and same as a financially because even though the things that we're talking about in this interview it's a lot of it's desire to help and it's providing value into people but at the end of the day it's also you've got to be paid for it too and otherwise, you know, you could, if you're not getting paid for it and you're not getting paid whatever you think your waif is then you can't go and hire coaches and you can't get the best coaches, you can't get the best equipment, you know, you're one day you won't be able to get the best facility so I think for me it's something that I've tried to tap into over the last, last probably 18 months is me knowing my waif, you know, and really believing that my product is waif a certain amount so, you know, in the UK in terms of the rates and what we charge, you know, yeah, you could go get a private session down the road for 50% cheaper but you just wouldn't get us and you wouldn't get our experience and I haven't gone and watched other people's experience so this isn't me giving, you know, talking down on anybody else's setup because I have no idea, I've never been into anybody else's setup but what I do know is that in terms of the waif that we do, it's waif a certain amount and I believe in the value of what we provide and so, you know, actually standing by that and charging a certain amount and being like, you know what, yeah, maybe that maybe there are premium rates but also you're getting a premium experience because we're going to make these, you know, we're going to make A, B and C commitments but we're actually going to follow through in a big way and we're going to go above and beyond these commitments and so that was hard for me at the start because I was worried about like, do I increase my prices, do I do this and do I do that and but I really had to tap into like, you know what, like, you know, we are waifing and the amount of time and energy and sacrifices and the commitment that we have made to get to where we are today, I believe that we deserve to be paid for it for the value that we put into the world and I believe that we provide that value and more to anybody that also makes the commitment to us so I think standing by your value, knowing what your value is, standing by it strong and then at the end of the day, you know, because if you don't get paid for what you're doing, you're really, you're putting yourself in handcuffs really and then in the same breath you've also got to get, you've also got to build the brand too so, you know, anyone who's listened to this and you've only been going for a while and maybe not that many people know about you that don't go and up your prices by 100% after this interview because that's not smart either, you know, so there's two games going on, there's like, you need to prove yourself, you need to get the reps in, you need to actually validate what you can offer and show to the world, prove to the world the value you can provide and then once you've done that and that phase might require you to be at a lower price, but once you're out of that phase and you're like, right, okay, I believe we've proven ourselves and I believe we've actually leveled up and are offering is next level, then, you know, prices have kind of got to follow. Perfect, perfect. Well, Tom, thank you so much for taking your time out to come on here, share your story, share your journey. So if any trainer watching this, because I know there's going to be loads that are inspired by you, they want to follow you or get in contact with you, what is the best way to do that then? Tom Owens UK, so Tom Owens UK is the Instagram, that's our main platform, we have a posting all the time, if anyone's on Facebook, Tom Owens UK on Facebook and then from there Tom Owens UK.com, if anyone wants to check out our services, if anyone, you know, there's contact pages in there, you know, we've got a lot of offerings from the Mindset Academy work where we're, you know, we're instilling that confidence in Mindset through our courses for young people. We're doing a lot of one-on-one performance, Mindset mentoring at the moment, a lot of Mindset culture on a one-on-one basis via Zoom, so no matter where anybody is in the world, that service is available to them, so if you want to tap into any of that stuff, then I would love to hear from them and I would love to play a role in their development or their child's development. Perfect, perfect. All right, awesome. Thank you so much Tom again and look forward to connecting with you in the near future. Good night. Thanks a lot guys, appreciate it. Take care.