Alright, I think we're going to get started here. Hello, my name is Mike Nielsen, and I'm the Coding and Development Track Chair, and I'm here to introduce the Coding and Development's featured speaker, Anthony Farah. Anthony Farah is a core PHP contributor. His specialty, correct me if I'm wrong, is encryption and security. In his spare time, he does swift-water rescues. He's an avid white-water guy, a couple of other neat little factoids about him. He got his pilot's license before his driver's license. He's flown a military jet. He's also a volunteer firefighter. EMT has two CPR saves to his credit, so that's really awesome. In 2008, he traveled over 300,000 air miles, and apparently he totaled a car three years old, which is something he and I have in common.  Thank you very much. Okay, and everyone hear me because I like to move around a lot. So, in the back, what we're going to talk to you about today is a whole lot of science. Okay, not really. Everything I'm going to talk to you about is based in science, and there's a lot of people who do research on this. But for our purposes, all we really care about is that it's close enough. Okay, so I'm going to talk about a lot of things, but consider them heuristics. They're not really, yes, your code is bad or yes, your code is good, but more of trends and being able to identify trends. So what we're really going to measure today, what we're going to talk about, is measuring the complexity. Well, there's a quote that I love. The central enemy of reliability is improved. The more complex a piece of software is, in order to be maintained, the more likely you're going to be able to have bugs in it. The harder it's going to be to add new features, and you're going to grind down into technical debt. So we want to reduce complex to higher the quality, or at least it's hard to have complex code that is also high-quality. Now, I want to make a caveat. The only definitive measure is what the S per minute. But again, we want to get an idea. We want to get a concept by some kind of scientific method. The first basic metric I'd like to talk about is called cyclomatic complexity. And it's actually really, really simple. It's a number of decision points or branch points in a routine. By routine, I mean either a class method or a function. So what else if and another if? But we also need to add one for the function itself. So this function has a cyclomatic complexity of four. Simple, straightforward, right? So some basic numbers. If you have a complexity between one and four, we say it's low complex. It's not complex, it has low complexity. Five to seven, eleven, blah, blah, blah. The point here, though, is if you look at a function and you see more than eleven if statements, that function is probably doing too much. Right? Common sense. And that's really what this metric is about, is a way of putting a number to common sense. Now note up here I've said for a single method, because we can also aggregate this concept, complexity, per method. And the reason they change is because if you look at a function and it has four-ish statements, pretty easy to tell what's going on. If you look at an entire code piece and every function has four-ish statements, it's a lot harder to realize what's going on. So it has an average complexity of 6.2, which, if you remember here, is very highly complex. I actually did this slide before, I did the next slide, so I'm not biased here, I promise. 8 is actually very good at 2.1, 7.2 is 1.8, and Laravel is 1.7. Now it's worth noting that having too low of a number here, if this number is too low, that can indicate that your code base is too wide, meaning it's too spread out and it's not doing enough decision making. So generally I like to say between 1.6 and 2.5 is a good target to be at. So Drupal 7 is a little complex for my tastes, but Drupal 8 is perfectly in the money. So the other way we can actually analyze this is if we look at the average complexity per line of code. This handles code bases that are functional or code bases that are mostly procedural a lot better than the previous method. So again, what this number actually means, and this is really easy to look at in real life, so local complexity is between .01 and .05. Well, what does that mean? Well, it means that 1% to 5% of your lines of code are decision points. Running the same analysis, .2 for WordPress, .7 here now looks really good. So it kind of gives us a picture to say, hey, we start looking to say why is Drupal 7 slightly better than Drupal 8 in this metric but significantly worse than the other metric? So we're not really sure yet whether we have a good idea or not, so we need some other metrics. So let's talk about empath complexity, which on the surface is very, very similar to cyclomatic complexity. It's the number of unique paths in a routine. So what does that mean? Well, if we take the original code base that we had and we run through it, we can execute it without going inside of any of these. That's one path. We can go into only the first one. It's a second path. We can go into the else or we can go into the first of the else. So we have four paths. Simple. Straight forward. Notice that for that example, they're the same, but in general, they won't always be the same. So let's take a slightly different example. Basically, what this function does is it adds three numbers together conditional. In PHP, you could just return 8 plus B plus C, but for purposes of the demonstration, I want to show that cyclomatic complexity and empath complexity are related, but they're slightly different. So with this function, and if I'm going too fast for anybody, I can ask a question. So for this method, it's pretty easy to see cyclomatic complexity is four. But let's count the number of paths. We have no is, the first one only, the first one and the second one, the first, second, third, the first, third, so on, so on, so on. So it turns out we have eight unique paths through the code base. So the limit on empath is two raised to the cyclomatic complexity minus one. Again, don't be overly concerned. Just realize that they're related, but they're not the same measurement. They actually measure different things. So with empath complexity, we have similar ranges, and these ranges are basically pulled from the other list. And you can find this stuff on the internet, but I'll get to some resources in a little bit. So what does this mean? What does empath really mean? Really translated, it's the minimum number of tests required to completely test a routine. So if you only have one test for a method that has a empath complexity of eight, you're missing seven test cases. So now we can use this interesting metric to really look and dive deep into some code, some interesting code. So if we think about it for a second, if one test per method, well, let's apply it to triple seven. Let's take a look at some triple seven metrics. The first one, the first function I want to analyze, is entity underscore load from triple seven. Really simple, has one if statement, and it returns. Clear what it does? Very good. Can anyone tell me what the cyclomatic complexity of this is going to be? Two. Very good. Which is load complexity. And the empath complexity, again, two. Two. Awesome. This is what you want. Look at a different function. Also from triple seven in chord. So page one, page two, page three, page four. Cyclomatic complexity of 41. There's 41 decision points in this function. Now this is why I love empath complexity. Because it takes, well, okay, very highly complex. What does that mean? 25 billion tests to completely test that one function that we just saw. I want to put this in context. So if we assume a test is one line of code, okay, it would take two terabytes worth of tests to test this one function. Pretty impressive, huh? That's 412 DVDs. Or 670,000 Drupal installations. Heck of a lot of tests. We might want to do something about that function. Thank God it's gone. But so that's not the worst one. It's the worst one in chord, but the worst one of these functions I've ever seen is actually in, well, let me rephrase that, the worst of these functions I've ever seen in an open source project is in a Drupal control module. Yeah. The date module has a function called date-repeat-or-rule-process. I'm not even going to bother putting it on here. It's, I think, somewhere around 3,000 lines of code, 2,000 lines of code. Cyclomatic complexity of 81. Can anyone guess what the impact is going to be? And it goes. And it goes. I was hoping it would fill an entire slide, but okay. So that would require 336,000 times the entire date of volume of 2009 in the world. All the hard drives in the world in 2009? 336,000 times that. Or trillion times that. I'm sorry. Now, that's kind of hard to visualize. So I've created a new unit of measurement specifically for this function. So if you take a 64 gigabyte microSD card, right, and you stack them on top of each other so you'd have a one-inch by one-inch cube, and then you take those one-inch by one-inch cubes and you stack those together and you make a one-foot by one-foot cube. And you stack those together to one yard by one yard and then one nile by one mile, you would need the volume of the Greenland Ice Cap to store just for the tests, for this one function in one module. See how we can now start realizing, wait a minute, this code is not maintainable.   It's defined as cyclomatic complexity plus cyclomatic complexity squared times one minus coverage cube. Don't worry about the definition. Basically, all it does is it relates complexity with test coverage. Because we basically are analyzing how risky is a change to this function. A high-frap index means if you make a change, it's highly risky. Now, that can be because the function is really, really complex or because it doesn't have a lot of tests.   So a low-complexity method with no tests is good. A low-complexity method with good tests is awesome. It's great. And a moderate complexity method with good tests is okay. Kind of, we can colorate it, but not really great.  So, again, some rough numbers. Very similar to the cyclomatic complexity numbers because it's based off of it. But yeah, you want to avoid crappy code. So, now what? We've got these basic metrics, and we'll talk about some more as we go on, but how do we use these metrics? What are we going to do on a day-to-day basis? So, for those of you who don't know, this is a German flag, and the German flag is up here for a reason because there are these guys in Germany who are fantastic engineers. And they're preaching something that not a lot of people outside of Germany are preaching, which is test all the things. They're obsessed with quality, and for a good reason to... specific, actually, one quick anecdote. In terms of popular PHP quality tools, there is only one that was not made by a German. Can anyone guess what it is? Very good. PHP code sniffer.  Sebastian Bergmann. He's done more for PHP quality, in my opinion, than any single other person in the industry, piping it. Some of the things he's done, PHP unit, which hopefully Drupal you guys are moving to, right? Yes? No? Please? Yes? Very good.  Some of the things, the two really, really good resources, PHPQAtools.com, KeyMaintains, and JenkinsPHP.org, which is a Jenkins profile. So, both of these leverage the tools that we're going to talk about. So the first one on this list is PHP-LOC, which stands for PHP Lines of Code. It's a really, really, really simple tool. Again, by Sebastian Bergmann. Yeah. It's a command-line tool that gives us a high-level summary of a code base. It's not going to tell us what about a code base is good or bad, but what it's really, really useful for is you have a new piece of code that you've never looked at before, and you want to know what you're getting into. Whether it's because you're sitting at work and they can't do a legacy system you need to maintain, or you're building something new and there's a module on Drupal.org that you're thinking about using, and you want to just get a really quick 30-second glimpse at and say, is this good code? Is this possibly not good code? How is it structured? So by running this tool and running this on Drupal 8 takes about 15 seconds, it prints out three pages worth of data. And I'm just going to go really quickly through. High-level gives you the number of files and directories. Simple. The number of lines of code. The cyclomatic complexity per line of code. Remember that measurement we measured earlier? So on Drupal 7, it gives us that cyclomatic complexity of .04. We can start getting in 15 seconds. We can get an insight on how complex a piece of code that we've never looked at before is. We can also look at the number of non-comment lines of code and the number of comment lines of code. So we can say, hey, wait a minute. Drupal 7 has about 20,000 lines of comments. Seems relatively good comment. So it gives us that high-level inspection. We can also go into the number of interfaces, the number of namespaces, and the number of traits if you're using .54+. The number of classes of abstract versus concrete. And the average lines of code in each class. Again, not necessarily entirely useful on its own, but information that makes comparing two projects really, really useful. Really useful for getting a high-level feel of what's going on. And then the last one is the methods and breakdown by methods, including cyclomatic complexity per method. Really straightforward, but it gives you a really high-level analysis. So this tool is used at the project level. You want to look at a project as a whole. Well, what if you want to go deep? P depend, which was made also by a German. It's like PFLOC in that it analyzes the whole project, but it's granular. By default, it spits out an XML file, which includes everything that PFLOC gives you, except broken down for functions. So you can look at every single function, what the cyclomatic complexity is for it, so it gives you the ability to drill down into not just that something exists, but also why it exists. It's a lot lower level of analysis, but the reason I have this tool up here besides long-term tracking and things like that is it gives us two really, really, really pretty and really freaking confusing graphs. Nobody gets these. I have trouble keeping track of what these mean, but they're really pretty. So the first one is basically abstraction versus instability. Make sense, right? No. The concept here is instability is basically... I'm trying to think of how to phrase this again. Instability is how much a package depends on other packages. So if we say a package is a Drupal module, a purely stable Drupal module down here is one that doesn't depend on anything else, and a purely unstable is one that depends upon a lot of things in the codebase. Then we compare that to abstraction, which means how much logic is in that codebase. Codebase is with a lot of... So basically what this graph is telling us is what we want is very abstract code to be very unstable code. I'm sorry, very stable code. And very concrete, very unstable. It's basically one inverse relationship between them. So things on the line are good, off the line may present issues. Make sense? Kind of? Not really? It's okay. I tried. The other one is a pyramid of metrics. Oh, sorry. Each one of these dots is a package. And the way it reads it is based upon the doc blocks at package head. So what it parses every single file, it looks at the doc block in the file and says this is what this package is, and then it lumps all the classes and everything from that package together. So the next thing is this pretty pyramid. Now, this seems confusing at first, but it's actually really simple. What it is is there's two sides, and also if we cut it in half, the lines of code, 6500. Cyclomatic complexity, there's a number underneath this tool. The number of methods gives us that high-level concept, that high-level analysis that you'd be able to see there. But it also allows us to divide the two. So this number right here is cyclomatic complexity per line of code. This is line of code per method. Simple. And it walks up the chart. Now, there's three things on here that aren't self-explanatory. Fan out, which describes the outward dependencies that your classes tend to have. The higher the fan out, the more your classes and your code depends upon code elsewhere in the application. And then finally, these two on the top, ANSI and AHH. ANSI tells you how many classes that you have in your code base extend from other classes. AHH is average hierarchy height. So if all your classes extend from one parent class, average hierarchy height is one. If you have very, very deep inheritance, then your average hierarchy height goes higher. It's really just a rough number to give you an idea. Does this application use a lot of inheritance or does it not? So the final tool is PHP mess detector. Command line tool, also by a germ, it finds messy parts of your code. So you set up your rules and it chips with default rule sets.  So the default rules it ships with, and you can extend these both in code and by changing what the rules are, are code size which includes systematic complexity, and path complexity. But it also includes things like the number of methods on the class, the size of each method. So you can set up rules to say, hey, you know what? I want a PHP mess detector to tell me every time a method has more than 20 lines of code. I want to tell me when I use design, when I use an eval state, because I want to flag that. So I don't want to eval my code base. It can find unused code which is actually really, really handy because you want code to be readable and unused code kind of hurts readability because wait, is that code readable, runnable or not? And finally it has some controversial things which typically I turn off just because I don't necessarily read they're controversial for a reason. But again, these are just for the full ones. We can extend them and the default values are pretty good. So the reason we want to use this tool is because we want to prevent complexity from getting into our code base. All of these metrics and all of these tools are really, really, really useful by themselves. You've seen how we can apply them and identify code, problem code, how we can compare and look at and judge code bases and get into it. But over time, and tracking these metrics over time is purely invaluable. So I wrote a script. Basically what I did is I ran phploc. I took the output and piped it into a CSV file and then the script went back 10 commits again and it moved until it ran out of commits. So basically I ran phploc every 10th commit back to all time for whatever project I ran the script on. So the first project was Drupal 8 branch. So this goes back to the first commit of the 8 branch which was somewhere back in 2010. And you can watch the number of non-comment lines of code. It dropped off here in 2011. Maybe there's a refactor or something. And kind of things kind of stayed pretty sane until roughly this time last year at which point it goes straight up to the chart. So there's a lot of development activity. The number of classes. Now this chart is a logarithmic chart because the non-logarithmic chart looked like garbage because all it was was a big spike. But the number of classes skyrocketed. In 2010 there were six classes. In 2013 there's about 2,500 classes. So now let's look at the metrics. How did cyclomatic complexity change through all of this active development? This is what you want to see. This is fantastic. You see high cyclomatic complexity in the beginning and there's some bumps in but the general trend is downward. That is awesome. And if we look at it per line we get this really big jump here. I don't know why we've tried to figure it out. I don't know. But then after that big jump the trend is downward. And you're going to get little spikes here but for the most part this is awesome. And here it's just based on all four charts together. Lines of code, then classes, complexity, complexity for method and complexity for line. So looking at them align we see the story. We see that okay there's a refactor here called a submission, but then afterwards a lot of active development, a lot of work, but it's getting less complex. That is awesome. That is absolutely awesome. But so now I have this script. 2-3-8 is fun. Analyzing some other systems. This chart is cyclomatic complexity for method on the top and per line of code on the bottom versus symphony 2 and word press. Notice anything interesting? Because I sure as heck do. Drupal is tending down. Symphony 2 is tending down. And Drupal and symphony 2 are right about neck and neck pretty much the whole time. Word press? What's word press doing? It's trending up, right? That's not good. That's not what we want. So I didn't stop here. I ran this tool against a whole lot of different methods and frameworks. In fact, 10 of them in all. And then I took all that data and I fed it into Splunk. Anyone familiar with Splunk? All right, for those of you who aren't, Splunk typically is used by like DevOps people to look at logs. But what is really, really, really great at doing is some complex analysis on raw data. So I took those CSV files from a whole bunch of projects and spit it at Splunk and asked it a question and it gives me a nice, really pretty answer. So this one is looking at cyclomatic complexity per line of code. So on the top, so blue we have cakePHP, which is actually really good. I'm completely surprised by all of these methods. If you were to ask me to predict this stuff, there's only one that I would have predicted and I'm not going to tell you that one. If you know me, you know which one I'm talking about. So cake started really complex back in 2007, 2008 and it's getting really, really, really simple. Awesome. Code igniter. Started complex, finished complex. Drupal 8. Over time now. Why is there that big dropout? I have no idea. We've tried to figure it out, we can't figure it out. But overall it's a definite downward trend, which is awesome. Joomla. And about the same as code igniter. Symphony, now there's not as much data for symphony because at Git repo they started fresh with two. But again, downward trend, which is awesome. WordPress. Zen framework too. Pretty much level. And PHPBB. Out level. So you can see most of the majority of the projects are pretty much level or slightly trending downward. Drupal is trending strongly downward, which is awesome. WordPress is trending strongly upward, which is okay. So let's look at a different metric. Let's look at, and with Splunk we can compare anything. So why don't we look at the ratio of comments to non-commented lines of code? So basically the ratio for every line of code, how many lines of code of comments do we have? And this is that graph. Again, there's a really weird dip in Drupal. If someone can explain that to me, please do. But... So cake. Pretty much everything is relatively low. You can see which one. Zen framework tends to be almost one-to-one for a long time. And now it's about 0.6 to one. PHPBB is by far the lowest. And Drupal, for a while, was climbing to ridiculous proportions. There was one point in here where it was 1.75 lines of comment to one line of code. What does that mean? We could argue all day about it. But again, we're just trying to compare it at a really, really high level. So let's look at the non-commented lines of code in general. How big are these projects? Well, by far the smallest one is Codignake, which finished up with about 37,000 lines of code today. And you can see it's generally pretty much the same. The most lines of code today is Julo. And you can see it basically is trending upwards roughly about the same amount. Drupal, we... Symphony, pretty much a solid approach. Now, again, this metric by itself is pretty much useless. I mean, comparing 30,000 lines of code to 200,000 lines of code without knowing why, without knowing what it's doing is kind of pointless. We shouldn't really focus on it. However, using all of these metrics and looking, we start to see a picture. We start to see, hey, wait a minute, wordpress is trending upward in every single one of those, every single one of the categories. What does that mean? We could start making inferences. We can compare it to Drupal and seeing how they change, how they're behaving, and what is this? Cyclomatic complexity per method. And PHPBB starts ridiculously complex by far the most complex that I track and ends up pretty much right underneath wordpress in terms of complexity. But it's a downward trend. The trend is what I care about. This is more complex. This is way more complex than my liking. But it's a downward trend, which means the team is doing a good job with it. Anyone want me to do any kind of analysis here while I have this up? I'll give you the fields I have as everything that PHPLOC has. So if there's anything you want to see over time, now's your chance to ask. Anyone want to see anything and compare all of these different frameworks? I have anonymous functions right here. So this is, by default, what it does is it looks at everything. So this trend right here is the number of anonymous functions over time average across every single project. But with one tiny change, this belt, one tiny change we can see. So wait a minute. There's one project, and this is the first time I'm running it, but there's one project that has, by orders of magnitude, more anonymous functions than anything else. Symphony. Symphony has about 400 anonymous functions today. And the second one on this list is End Framework 2.  Number of classes versus which systematic complexity by method or by line? Okay. So this is going to take a half of a second. So systematic complexity. That's non-common, systematic complexity by line. Well, no, no, that's fine. And then you want by number of classes. If you ever worked with Splunk, it's incredibly powerful. What does it look like, obviously? So basically I took the number of classes and I divided it by the systematic complexity per line. And what this means, I honestly don't know. You have to sit down and think about what are you looking at. But it gives you the ability to ask these kind of questions. And that's the point I want to get across is that tools like this and doing the historical data doesn't give you answers. It gives you the ability to ask questions. So with that said, when I started doing this analysis, I really expected Drupal 7 especially to be towards the bottom. And 7 kind of was towards the bottom what the community was doing. 8 is towards the front of the community by a very long margin in terms of everything. The only thing that comes close to touching it is something. So you guys are doing a kick-ass job. Keep it up. But also adopt these principles. Look at what core is doing. Look at the direction core is going. Because it's awesome. So one more thing to keep in mind here. The only way to get good code, I don't know how to do it. So even though we want to achieve these, keep in mind that at the end of the day, working code is what's important. Profitable code is what's important. We can sit down and argue over the theory as much as we want. If it doesn't work and it doesn't pay the bills, at the end of the day it's bad code. Something to keep in perspective. Any questions? Yes. All right, so the question is based on systematic complexity, if you have a whole bunch of these statements doing things like checking parameters. If parameter one is in return or if not is something, basically where you're ensuring that your inputs are valid or some other state is valid before doing your logic. The answer basically would be to recommend a book called Refactoring of Legacy Code. Basically instead of having all those if statements at the top of your code, instead what I would recommend is to refactor that out. Put that into a separate function. So now you can have a function called IsInputValid or AreInputValid or whatever that code is trying to do. So now that 15 if statements block of input validation is one function. If not input is valid, return. That's how I would handle it. And there's different patterns depending on what you're doing depending on but there's ways and extract method which basically says you take this block of code and you pull it out into a separate function is I think the one that you're looking for there. And in general with cyclomatic complexity that's going to be the better one to use. Honestly, it's refactoring of legacy code. It's got a picture of a brass clock on the front of it. Michael Feathers, that's the one. Michael Feathers. I have about two questions. One. Sorry. Is there a... What's a good point to stop? Like you were saying it will show you metrics about if you're depending on other people's code. So where's the good balance in that because obviously you don't want to rewrite something that somebody's already done. The easy way for me to say this is a bad answer which is there is no right way. You can talk to 20 different developers. You can talk to 100 developers here and 200 different answers. Really what it comes down to in my experience is personal experience and judging the requirements of what you're doing. I'm a big fan. I have a phrase I use a lot which is judging between good and good enough. Yes, good is we want all these things. We want 100% test coverage. We want low cyclomatic complexity. We want all this stuff. But at the end of the day because the other side of the coin is we have to... We're not doing this just for fun most times. We're doing it because we have a reason to do it. Either because we need the tool because we're getting paid to do it. So you need to make a judgment called certain points in time to say, you know what, it would be better if, but we're going to take that technical debt and go forward with this. And my other question was do you have tools for JavaScript because increasingly all of us are using JavaScript? Yeah, we do. So there is a tool for JavaScript. I'm completely blank because I ran these numbers on Node.js. And the only reason I didn't point out what they were for Node.js is they're completely non-interesting. It's just flat level... I didn't find it in trading which is the only reason I didn't put it up here. I do not remember. Follow me on Twitter and I will check a login of my system that I ran all this stuff on. And I could not find anything for Ruby on Rails that was worth the damn that computed these metrics. They may exist. They very well may exist. I could not find them. In about an hour's searching. Thanks. If you want to ask a question there's a mic in the center of the room, so... I was just checking to make sure that your slides are going to be up there because I think I might have missed some stuff. Yeah, I moved pretty quick. I will post them to my blog in the slide share. Hopefully if I can get a decent internet connection within the next half hour. Thank you. Can you go back over abstraction versus stability real quick? I totally missed that. The one slide that I'm not comfortable with. Well, I shouldn't say the one. One of. Instability is the ratio of how much your code or a packages code depends upon other packages.  So if you have a lot of dependencies you don't want to have a lot of logic. If you have a lot of logic you don't want to have a lot of dependencies. General rule of thumb. Again, the entire what my entire theme behind here is this class here is not bad. It's, hey, this might be something we want to look at or highlight. In addition to the slides, is there any chance that the Splunk scripts and the scripts used for HVMD are going to get out? Well, okay. I will post that that much, I promise. I do not have any of the data with me other than Splunk. And Splunk is a commercial product. What I will do is after I get home next week some point I'm planning to write a blog post about all this analysis. And what I will do is put up a zip file containing every CSV that I analyzed as well as the script they used to generate a little bit. Awesome, thank you. Any other questions? Okay, one more. So when we see, you know, let's just call it Network Presses, negative trend lines. Are we basically saying it's going to be harder and harder for programmers to contribute because their complexity is going up? Is there a possibility this code base they're heading the wrong direction and it's just going to implore us a point? So there's a few ways to look at it. The political way of looking at it would be to say they're trending upwards meaning they're tending to get more complex but you can still work on it. It's just every incremental change is going to get a little bit harder over time for core development. If you're using it from the outside that number probably doesn't really matter other than the velocity of code. Looking at it as a potential contributor I want to contribute to a project that's getting simpler, that's not getting harder because the harder it gets, the harder it's going to be to get into it later on down the road. The harder it's going to be for me to make a meaningful change. The harder it's going to be to produce quality software to prevent bugs from getting in. We can sit here and talk ideals all day long but the bottom line is does the software work? Yes. Is it complex? Okay. It depends upon what you want to do what you want to get out of it with how these metrics are going to relate to you. Thank you. Anything else? One more. That could be a plenty of time. I'm just wondering is there any correlation between the metrics that you've shown with runtime performance metrics? Okay. Now we're starting to get to that's actually a very, very interesting question because all of these metrics in complexity tend towards lower performance software which basically says we want to trade off between maintainability which is what we're tracking here we're tracking maintainability but performance is a very tangential to maintainability so a lot of times we give up performance so that way we can have better maintainability. The usual reason that I give for that is unless you're Facebook scale or Wikipedia scale your servers are more expensive or cheaper than your developers and the answer is this at the given cost of a server let's say a server is expensive and costs you $1,000 a month that's what? $12,000 a year? 10 servers for one developer's time. It's cheaper for me to reduce the number of developers than to reduce the number of servers 90% of the time. That 10% of the time where it's not cheaper that's where you go into in that one little area. So typically what I find is in production code bases you'll have 90% of it that's really maintainable, really pretty and follows all these metrics and then you'll have a little corner 10% or less where all your performance is spent that's what all the time complexity is in the code and that's optimized which is going to throw these numbers off but you're doing it for a reason and for a definitive gain. That's basically how I answer that. Yes, one last? Yeah, just curious about the sort of format and the output of these analysis tools just potentially like how you use all that. What's the CSV? Or it can output to standard out. P to PEND outputs an XML file and PHPMD outputs a XML rule set file. Now these are all standard files so things like Jenkins they have native plugins in fact the PHP QA tools sorry the PHP Jenkins script that was on the slide before parses all the stuff in by default. Last one I promise. I assume that your numbers for Drupal 8 all include symphony? No. So basically the script that I had excluded anything with the directory prefix of vendor so all of the symphony stuff all of the I think a couple others had some really weird dependencies all of that was excluded from these code based analysis. Thank you very much and I do have a YouTube channel for that.


So someone asked me in a comment on one of the my videos to talk about my own experiences From when I was really really struggling with procrastination And of course, there's all those feelings that come with that of unworthiness and shame and guilt and stress, right? So, you know, I'm someone who has made a lot of videos. I wrote a book about procrastination And I think one of the things that helps people kind of resonate with it is the fact that I Struggled personally with this issue To a huge degree I Would be what I would classify now is having a chronic problem with procrastination It was really one of the main issues the big problems I had in my life So I'm going to talk here about like what did that look like for me? What kind of problems was I running into with it? Because when we do have this issue when it's not resolved it does lead to problems. Okay So an example will be well, let me just start off from the very beginning this issue kind of showed up for me more so in secondary school or high school as it's known in America and in high school really Everything I did was done at the last minute Okay, everything. I don't think I ever did anything proactively ahead of time And this was the thing that persisted all the way through my my high school experience And of course, you know when you're a younger person you have people in your life that are kind of keeping you accountable to a certain degree So it doesn't become that big of an issue. Although it is. I mean, there's huge amounts of energy I expanded worrying about things in conflict with myself. I should be doing this, but I'm not doing it so my entire experience in in school really in Second-level school was really kind of mired by this entire issue, right? But really when I got into university is when it started to show up to be a really chronic issue so again every single Assignment I did was late or now I did manage to get them done But it was never to the standard that I wanted it to be it was always I was just me doing enough to get by really is what I was doing Often I did get in into trouble for not having it done. I get into I take short cuts I would I would again I would would be late. It will be so standard. It will be poor work Now somehow again, I managed to get through that, but you know, it was showing up this issue in my life It's not just like it's this one issue, right? I remember for instance a friend of mine I had a big issue with like following through with plans any plan I would make I Would invariably failed to follow through in it. I remember one day a friend of mine. He he said to me Look tomorrow. We're going to get up early. We're going to go in and we're going to do some work And he made me promise to him that we would do that and I was to meet him there the next day I know in that moment when I was having that conversation with my friend. I Was like, yep, I will do that. I will be there tomorrow and in the moment When I was making that promise I Was seeing what I wanted to be true Rather than what I knew would be true and that's kind of a typical thing in procrastination We say and we almost convince ourselves that what we want to be true is the truth But of course the next day came and I completely blew it off. I didn't do it and You know I did that little little things like that would keep happening again and again Again, everything was done so par for me I remember I even started to go for like interviews and stuff for jobs and things and Again, I would go there, but like preparation work for the interview. I would do late It would always be just do something but never actually doing my best for it so it would start to like really show up in my life and have a negative impact on Opportunities for me really good opportunities. I think I've probably missed dozens of really good opportunities in my past Because I was dealing with that said this issue. Okay, now. I'm not trying to scare you here I'm going to get to the point of the point is yes procrastination does have a negative impact in on our lives But when we overcome it Things just change instantly. Okay in your life And you don't really care like I don't really care about those missed opportunities now The real great thing for me is that it's it's an issue that is in the past and The personal growth that has come for me in actually putting that issue into my past Okay, moving forward and not having it as an issue anymore shows I guess that I'm growing as a person That's really what we're here to do is to grow as people not necessarily about any of the opportunities that we miss Are you growing as a person? It's the real key issue here so Problems with saying I was going to do things wouldn't do them missed opportunities everything was done subpar and But the real problem with all the years of procrastination that I had Was I didn't feel good about myself at all My self-esteem was rock bottom really. Okay, again, I would get things done But it was never really what I wanted to do or I was capable to do it But it was this constant pattern of saying I'm going to do things even just to myself and not doing them It has this terrible effect of undermining I had I was undermining myself every time I did that And of course the more you undermine yourself The the worse yourself esteem the lower your confidence becomes the lower yourself trust becomes So I had no trust to myself my confidence and self-esteem were rock bottom, but it's so interesting to look now and see well You know, it's what it's why when I look at videos about like how to build confidence, you know, and you do this and you do that Really that the whole key as far as I'm concerned and building my myself confidence and my self-esteem Was to stop undermining it. I didn't actually have to do anything. I just had to stop doing something and Isn't that kind of for relief, you know, oh if I just stopped doing that It automatically improves and of course it did, you know, my self-esteem and my confidence went went way up when I did resolve this issue so in College, I kind of realized, okay, this is a problem I think I had actually suffered with it so much that I got to the point where I was like I Think it was more the self-confidence issue and the self-esteem issue that prompted me To try and change this issue, okay Now, of course, I did like what everybody else does and I start to look to self-help videos and self-help books and Some of them, you know, I would read those those books and it was like It was all kind of on the discipline model, right you have to develop discipline you have to do this And I remember I would like try and make these drastic changes. I would try and become an early riser That was a thing I was obsessed on for a while Of course, that didn't work because really all I was doing was more control over my own behavior Which if you know anything about my approach is is not really what it's all about And the other thing was, you know, I would try to implement this change to become an early riser and then of course I was going to be this great productive guy and I'd wake up late and then I had this other issue of procrastin or of perfectionism And I was like, well, I screwed up. What's the point now for the day that is ruined So I would go into this self-defeating kind of talk and well tomorrow I'll try again, I guess, but that day was a write-off So it was really this massive perfectionism thing that I had So I kind of had to give up on this whole idea of early rising, okay, because that was getting me nowhere But these self-help books were not helping me either, okay, this self-discipline thing You see my whole problem was I was very ambitious and I actually wanted to do well The discipline or the desire to do well was not missing in me Okay. In fact, it was this self-bullying stuff that I have been doing for all these years That was the real problem and I didn't need to be told to be more disciplined. I didn't need the tough love approach Okay, now I think Maybe some people need the tough love approach Maybe I think if at all and if at all people need the tough love It's maybe when they're younger and they need to be Really just given some some boundary issues about things but with behavior what's acceptable and what isn't But at a certain point, you know, we all are on the same page that yeah, discipline is important Yeah, but like reading the self-help book that was telling me that was not telling me anything I didn't already know in fact. It was actually making me feel worse about myself So that wasn't working and So I really I had got to the point where I was like, okay, look I'm struggling here. I've been struggling for a long long time with this issue I really want to find out what the issue is Now I remember the first thing I came across somebody said That the whole problem of procrastination Is that you believe you have to do things Now at the time that idea went into my mind and I found it really really kind of opened my mind a bit now it didn't change the the behavior at that point for me But it had put a little seed in there It was it was this kind of different approach that I hadn't heard before It was it was it was kind of pointing to this inner critic or this bully that was really really driving the behavior And the have to terms that it uses to intimidate us into behavior So I don't have to do things. I don't have to do anything was this kind of idea this philosophy that was was beginning to be a new philosophy for me So that was the philosophy part was kind of changing for me a little bit and then Neil Fiore's book and now what happened the He he introduced this concept I remember reading that book and I was almost at the point where I was going to give up I was like I'm fed up with these self-help books now. Nothing is working here But his his book was like you have things entirely upside down and back ways if you have a problem with procrastination your whole issue is that you're focusing on productivity and discipline and achievement and you're actually secretly resisting or Pushing away or not liking or judging the need to relax and have fun without an experience of guilt Now when I heard that it was like Okay, what does that look like on a practical level? So I started to implement a lot of the things Neil Fiore talks about scheduling in guilt-free play And now the issue was starting to actually clear up or I was actually starting to see real progress with this. I was actually enjoying myself more. I was feeling more valued as a person because work and achievement and The various projects that I had to work on were no longer the sole focus of my life, which they had been Even though I wasn't doing very well on them and I was struggling with them so much Now there was more balance with actually, you know what the priority here is for me to relax and Experience the the enjoyable parts of life without it being tainted by feelings of guilt So that was really working and another thing then I started to write it out myself I started journal on it and I started to write down little insights. I was having about the whole thing I started to do a lot of research on procrastination I was studying psychology. So I figured I may as well study something that's I'm kind of experiencing so Then I started to develop this thing about Developing trust with myself and this was all about okay I have a tendency here I've noticed all throughout my my life that I keep making elaborate promises to myself And maybe I'm not following through on many of those and maybe most of those sometimes all of those promises I was breaking So then the tendency became okay If I can develop more trust in myself, I really feel much more secure in myself So I really start to watch okay. Where am I making promises? And I started to realize I'm making way too many promises even just to myself So that I started to make very very few promises to myself And all promises I made from that point on that period on were very very small promises Okay, because I had been undermining myself for such a long period of time And because there were small doable achievable promises this trust in myself started to develop And Another thing I started to do was to realize okay There is this thing about momentum if I can get going if I can convince my nervous system to cooperate and move forward with me Then I'll really be getting places with this whole issue I'll really be actually enjoying my life more and actually moving forward on my goals and I started to develop this thing about um Developing a kind of an hour never attitude Which was much more about look if I make a promise and I don't follow through and itself trust is just so important to me That if that happens, I I have to just step away and regain some perspective on things Okay, so anytime I did break a promise I would say okay. This is essentially important here. What just happened Let me step away now from this. I'm not I'm not going to torture myself with indecision or procrastination for the rest of the day I'm actually just proactively stepping away from this now And I'll try again tomorrow and I'm going to reflection what happened with that that I take on too big of a task that I That I over promised something to myself was I not giving myself something I needed outside of that work area or that goal and really from that point on Occasionally I would slip back into procrastination. So I really realized at that point I really do need to keep these ideas or this new philosophy or these new approaches to personal productivity really front and center in my mind in my consciousness So I would write a little story for myself or I would write a short thing that I could keep just looking at now It wasn't like law of attraction or try to manifest anything It was really just to keep my mind focused on a new philosophy because it was an entirely different philosophy To the philosophy of personal productivity. I have been carrying for years So I needed to kind of train myself out of that and I found that once I started to do that And it was very quick thing a couple of minutes a day I would just look at these ideas about what's the best way to stay productive Without, you know, this self-discipline stuff. It's much more of a compassion based approach It's it is ambitious. You know, there's there's the I definitely want to achieve things part of it, but also balanced out with a self-compassion So I started to to really integrate that story into my lifestyle And I focused on it and I focused on it more and more Not trying to convince myself of anything but just gradually letting those ideas integrate into into myself And really I just started to notice I haven't procrastinated for a long time. In fact I can't remember the last time I procrastinated All my work was simple I became super consistent with things There was no more drama. There was no more stress. There were no more late night deadlines It just became so easy and the thing was I was having fun now in my life. I was actually Making time for things away from this goal focused stuff Which I hadn't really been doing up until that point Sure, I was doing the things that were enjoyable or fun But they were always tainted by feelings of guilt and unwordiness before or low self-esteem That was all gone now so really A part of it for me was I I wrote the book afterwards when I finished in in university and it was I had to just talk to so I was I was now practicing psychotherapy And I was realizing so many people you see I hadn't heard many therapists talking about the issue of procrastination up to that point And I was like, you know, that was something that really bothered me in my life. That was a real real problem for me In fact, it was a huge problem for me. There was so much pain that I went through because of that. Now, it wasn't maybe The type of pain you could point to as a kind of dramatic experience, but it was the The struggle and conflict I had had had been drawn out over so many years If you added up all that pain, it's like a huge huge painful problem in my life So I said, you know what? I'm gonna I'm gonna focus on this issue because I'm gonna tell people that it's not about self-discipline Essentially, it's really much more about balance and self-compassion and develop and self-trust with yourself It's not about pushing yourself. In fact, it's the opposite of that it's about developing an understanding of My ability to push myself so hard that I come to a my nervous system just says no I'm not doing it and we can become very resistant to doing it so I can honestly say now that I have no issues with procrastination at all. It's such a huge relief. I have no Regrets about any of the missed opportunities or the problems. I was creating for myself Because of that issue It's because I know the issue is gone. I When I say the issue is gone It's not like I'm this great person that has overcome something very simply the only thing that changed Is I understand the issue now? That's it. That's all we really need to do with this issue is understand What it is and what's driving it? So if you want to check out here's my little sales pitch at the end here, I guess My book is available on my my my website for this and I also have a course on it too I would say probably half the people that come to me for therapy I guess a lot of them resonate with the same problems I was having and Really the work I do with a lot of those people who have this the same issue that I had is basically just showing them a different way to relate to themselves That's going to allow them to be productive And it's so surprising to them that it's not the old way It's not some kind of a a guilt thing or there's something wrong with me or I need to try harder It's it's just different to that. That's it So those resources are there if you want them and I think I'll leave it there for today But I hope that answers that question that that person asked me And as always, thank you so much for watching and I will see you again in the next video. Take care


So, out here today we're conducting Boganville III, the McCree, and it was a good rep for India Company and the rest of the battalion to practice EAB exercises, which is expeditionary advanced base operations. So we started off with an amphibious assault, basically a shore-to-shore assault, so it went out five meters, got in formation, came back, landed on the shore, and then came into the training area, pushed up, seized the EAB, started providing security and made link up with local security forces as well as the local mayor. So Boganville I and Boganville II were mainly focused on building individual teams, squad, platoon, and some company-level tasks via really live-fire training. So this is non-live-fire training, it's all been blank and force-on-force, so this is really allowing us to take a lot of those skills that we developed in Boganville I and II and now apply it against a thinking enemy, as well as in maybe a situation we're not necessarily very familiar with. Whatever we need to do to be capable and ready to execute on a moment's notice, preparing to fight and train in any environment, any climb in place, basically this is our last operation before we deploy, and that makes us the most ready unit in the Pacific.


Thank you for coming. This talk is about how to design your board so that it is manufacturable so that the companies that you will find in Shenzhen in the Futian district, according to the advice in Bunny Huang's Guide to Shenzhen, will actually be manufacturable. So I apologize if you can't hear, I was thinking, but I do need, I will need to go back to the laptop to show you what's on the screen. So we just have to bear with me on this, okay? All right? So your nightmare scenario is one which actually happened, this is a real world scenario that regularly happens with the factory that I know in Shenzhen. Mike tells me that he receives PCBs with a bill of materials from companies in the United States and the United and the rest of Europe, which have been exclusively designed using AVNet, RS Online, Farnel and Digikey, and they expect him automatically to be able to beat the pricing for the components by a factor of four to five to ten. Okay? All right? It turns out though that the parts that the people ordered were last manufactured in China ten years ago. For a project, which was some very large thing that there were a million made ten years ago, Digikey was the main buyer of those parts because they were very commonly available. They ordered 100,000 to keep stock to supply the repair centers, etc. You get the idea. Then that product went end of life and to make space in the factory in China, the company destroyed the tooling. You know what's going to happen in going to come next, okay? So basically that part is no longer manufactured and the only place in the world from which that part may be obtained is the warehouse in Digikey somewhere in Phoenix, Arizona. So in order to fulfill the order that Mike has done, he has to go back to that has been received. He has to go back to the factory, the owner, and say, I'm very sorry. The only place I can fulfill your order with is to order these parts, oh, which were from China shipped to the US, get them imported back into China with a six to eight week delay and customs duty of 30 to 40%. On top of the fact that the parts were made in China for one dollar, by the time they got to China there were two dollars for the shipping cost, plus import duty, plus warehouse storage fees, plus things so it's that one dollar was now ten dollars for a one dollar component. It's now going to come back into China with a 30% import jack. Now it's $13. Yeah, for a one dollar part. You do not want to do this. Okay. All right. So what I'm going to do I think is I'm going to give you some advice on how to source the components and check that they are available. Okay. All right. So your two friends, can you hear me over there? Brilliant. Your two friends are AliExpress.com and Taobao.com. All right.  Okay. If you really, really want to buy from AliTaoBao.com, you should go to EngTaoBao.com. All right. This guy is a Chinese national. By law, if he is ripped off by a Chinese citizen, he is entitled to take them to court. You are not. Okay.  All right. They don't listen to foreigners, but I am assuming that you are all aware that there are fake suppliers on these sites who sell, even to Chinese national citizens, they will sell, the famous one was the people put concrete in milk powder cartons. Okay. So it happens, you know, you get 100 microfarad capacitors in 10 microfarad capacitors in 100 microfarad case and three and a half inch ID drives turn out to have a two inch ID and three and a half inch SATA drives turn out to be a two and a half inch ID drive with an ID to SATA converter in it. Okay. So I must I'm that he's out of scope for this talk. Okay. All right. Just bear that in mind. So EngTaoBao is your is your friend. If you are abroad and you actually want to buy the components. Okay. Bear in mind, it's the Chinese equivalent of eBay. You get what you buy. So you're not actually buying, but what you are doing is you are checking the availability of the part. Okay. Your most important thing is when you want to find whatever it is, you first go to dig a key or whatever. Okay. Now I searched here. Some people paying attention will have noticed I searched for the SN 75 LVDS 83B, which is a Texas Instruments part, which also was cloned under the name NT 71 in China. They're identical. All right. Surprise. And on here, you get the original masks. Yeah. And they were the original masks. So on dig a key, you get access to the data sheet on the Chinese equivalent of eBay. Don't even think about asking them for the data sheet. Okay. All right. But you don't even want to buy the part. You just checking the quantities of suppliers that have it available. If you've ever been to Fujian district, one of the places that the ground floor is football pitch sized and it is five stories high. Okay. There are 5000 suppliers of parts in the one building. Okay. So you want to check quantity rather than quality. And so having done your search on here for SN 75 LVDS and got the data sheet and designed everything. Before you commit to that, you go to the Taobao website and search for exactly the same part. And you check, if I can get this over, how many pages of stuff there are. Look, there's loads of suppliers. They're all different. They're not identical photographs. Okay. You can tell all the names of the people selling a different. You can get a rough idea of the price from the thing. Discard the low ones, discard the high ones, roughly in the middle of somewhere.  Okay. All right. And this is very important. This bit is that there are five pages and more of the same part. So you know that there are massive numbers of suppliers and you can, it's not totally guaranteed. You can pretty much guarantee that this part will be available when you go to the Shenzhen markets. Okay. This is the bit of information that is missing from Bunny's extremely otherwise very, very good book. Okay. Bunny has assumed that you know how to order these parts and which ones to get. Yeah. Okay. And he helps you to find the ones and distinguish between the parts that are prime quality and the ones that are secondhand recycled, et cetera, et cetera, and the dodgy guys. All right. So, but it's this information of what I'm giving you here is completely missing. So step one, look on Digikey. Find the data sheet. Check that it is for, it suits your needs. Step two, before you design the PCB and the schematic with the part, check the availability using either AliExpress or Taobao to check the quantity of suppliers and the diversity of suppliers. Okay. And if it's not available, don't use it. I'm really serious. Do not use that part. Find an equivalent circuit that uses an alternative part. Okay. The other more popular one, there is, it's very common, for example, for people to use a Texas Instruments or a USA designed current limiter chip for USB power. Okay. In certain circumstances, you can't use the power of the USB hub. You have to do the power check, the current limiting yourself. Now, in some cases, like the Sylergy Sy6280, you will not find the data sheet online. And the only way to find out about this chip is to find somebody else's schematic, which has this in. So there is, it's a bit of hidden miss. Some stuff you will find on Digikey or Finale, et cetera, really easily. Some of it, you will just have to find somebody who knows, who has specialists in this area knows their parts. Okay. All right. So copies of this data sheet are now being distributed over the thing. Thank you very much for marking this as time. There is one last thing, which is very, very important. LCDs. If you are sourcing LCDs, use this website, panellook.com. It overwhelmed all of the other websites that were court sourcing. You don't buy from there. You put the information about in the brand, blah, blah, resolution, et cetera. Make sure that you put the available, that it is available rather than discontinued. And just search for it. And you're looking for quantities, multiple suppliers, again, of 30,000, 50,000, 100,000, from multiple suppliers. That's basically it. Thank you very much. Yes, gentleman here. Why do I not buy from Aliexpress or Taobao only? The reason is because those suppliers, they're eBay. They may not supply directly. They may rip me off. So I have a trusted factory owner whom I have a good relationship with. I have met him. I know he exists. And he even takes credit. He even gives credit. I'm not going to give you his name because I don't want people to take advantage of him. But if you really need an introduction and you're serious, I can walk you through the process. Can't find my email address on Yoma68 or rhombustech or lkcl.net. You can find me and contact me and I will walk you through the process and introduce you to him. Okay. I think in case you're only needing a few single components, then it's totally different story. Absolutely. Right. Very good. Very good point. If you're buying only like 10 or 20 components rather than 1000, then it's okay to use Aliexpress. I would strongly recommend that you try and inch Taobao because they buy it and they don't check it but they buy it and make sure it goes on. It's a risk. It's a hidden risk risk. If you can find somebody who is prepared to buy a thing, it is a pain in the neck. I cannot even get quantity 20 samples within a few days because it's not worth their time or money to do it. So what Mike does for me is he has a big order of 50,000 and he says, oh, and incidentally could you look for this 20 for me? Okay. Then he knows that he's doing them a favor by getting lots of money. So it's very, very different. That's why Bunny suggests going over there personally. For dissolving this problem of I just want 20 components, you really need somebody to go round the markets personally who has the time or do it personally yourself and that's where Bunny's book takes over from this talk.


The president's budget proposal eliminates public media funding. Learn how you can help at lptv.org slash action. Well, when you mix local celebrities and businesses and add some cake, you get a cake decorating contest. Haiti Clotter shows us how a piece of cake can go a long way. The chocolates, the rocks, all got them. Cake icing and creativity were the main ingredients at the piece of cake celebrity cake decorating contest in auction put together by the United Way of Bemidji. The contest is for United Way's Backpack Buddies initiative to help provide meals for school-aged children. They're non-perishable food packs to kids or students in the elementary schools that wouldn't otherwise have food on the weekends or during holiday breaks. So there's about 200 students in Bemidji that benefit from the Backpack Buddies program every week. 11 teams started off with their very own cake, spatulas and other supplies. Each team had 45 minutes to work on the cake and none of them were the same.  All teams revined for the top prize, maybe even the title of cake boss, but also bragging rights and the winner of the People's Choice Award. The frosting won't stick to anything and I'm not the only one that thinks that. Everybody's been saying that. Once the cake decorating portion was over, the auction began. Lakeland News also represented and its cake had a $70 bid. Items available for bid included the newly decorated cakes, gift certificates and Minnesota Twins game tickets. The cake pavers of Knife River materials took home the People's Choice Award and their cake raced more than a thousand dollars. It's a program that we love to support, so we feel great about winning the People's Choice Award. In total, the event raced almost $2,100 in Bemidji, Haiti Clatter, Lakeland News. This was the seventh annual piece of cake decorating contest sponsored by Marketplace Foods. If you would like more information on the backpack buddies program or the United Way, you can visit our website at lptv.org. If you've enjoyed this segment of Lakeland News, please consider making a tax-deductible contribution to Lakeland Public Television.


My name is Lucy. I'm a principal engineer in the Advanced Project Group of Universal Hydrogen. My role is to connect dots between what we're building and what external partners could help us advance. The mission of Universal Hydrogen is to make sure that we actually meet through zero emissions by 2050. What we're trying to build here is really the future of aviation. Today, infrastructure doesn't exist to allow hydrogen to go from the production point to the aircraft. We're developing hydrogen capsule that will be used for storage so that we remove all the barriers related to infrastructure. But in order to use this hydrogen, we need to also build the aircraft that goes with it. So we're developing a hydrogen powered powertrain in order to enable the technology. Right now we see a lot of debate around how much carbon emissions we do per person and we're trying to tackle that, making sure that whenever you're flying with a Universal Hydrogen aircraft, you will be emitting zero emissions.


Welcome to the Endless None. You may have noticed recently that there haven't been any main videos, any big videos, and the reason for that is that I've been traveling. First of all, in June I went to VidCon and in particular participated in EduCon, a special one-day session of workshops and so forth for specifically creators of educational content for YouTube, and that was really productive and hopefully there will be some suggestions that I've taken away from that that can improve our videos. The second trip that I took with the family, this was a vacation, not a working trip, was to Iceland and England. But of course, I can't leave etymology completely behind, so along the way I decided to talk about the etymologies of the place names that we visited, and so that's what today's video is all about. So it'll be a bunch of clips taken from traveling with me talking about the place names that we were at and a little bit about those places. Word of warning, of course, since this was taken on the go, the sound quality varies from time to time. Most of it was filmed outside, so there was, you know, outside noises and wind and so forth. Hopefully it's not too bad though. And of course, it was just done sort of on the spur of the moment. It wasn't scripted or anything like that. But hopefully you will enjoy hearing about these place names. Some of them, you know, are very well-known places, but some of them are also out-of-the-way places that we happen to visit, so they may be quite new to you. But I think they're all quite interesting. If you want to hear more about these trips and things that we saw along the way and things that we learned, check out our podcast, which will be going up towards the end of August. So of course our journey started at home here in Sudbury, Sudbury, Ontario, Canada. There wasn't really much here before European colonization. I was only sparsely populated by the Ojibwe people, but not a major centre as far as I know. However, when Canada was building the Transcontinental Railway, they discovered that Sudbury was a location containing nickel ore, and so it's because of that, that a town really grew up in the area. The name Sudbury obviously comes from the name of a city in back in Europe. So in this case it was Sudbury in England in the county of Suffolk, which was a small market town, not particularly well known. However, it happened to be the home of the wife of the superintendent of that stretch of the Transcontinental Railway. Her name was Caroline, his name James Worthington, and so he selected that name I guess in honour of his wife. The British name Sudbury is pretty straightforward, so the Sud part means south, from Old English soothe, and the second element, burry, comes from the word for a fortification and is a common place name element in many British place names, some of which we're going to see a little later on in our trip. So the first stop on our trip was Toronto, since it's much cheaper to fly out of Toronto than Sudbury. So we drove down to Toronto, we spent part of a day there looking at an aquarium and then flew from there. The name Toronto is an interesting one as you may well guess. It comes from an indigenous language, though its precise source and meaning are uncertain. The Huron people had been living in the area, but a little later on as they moved away the Iroquois moved in. It might therefore come from Huron meaning meaning place, or it might come from Iroquois meaning wood in the water, or some other source that we don't know. Once the British colonizers arrived in the region, the British Lord Dorchester arranged for the purchase of these lands in 1787 from the Mississaugas, and he intended it to be named Toronto. However, the Lieutenant Governor of Upper Canada at the time, John Simcoe, didn't like the use of indigenous place names, and so he was set on renaming it York. John Simcoe specifically chose the name York, not just after the city, but in fact after the Duke of York, who was Frederick, Duke of York and Albany, the second son of George III, and we'll hear more about that etymology a little later on in our trip. It only stayed with that name for a little while, though the people living there decided they wanted to change the name back after Simcoe was gone, and so it was renamed Toronto going forward. However, that name York still survives in a number of regional elements like North York, which was originally a separate city just north of Toronto, now just a region of the mega city of Toronto, and the various nicknames for the city. Sometimes it's called Yorktown, there's the neighborhood Yorkville, so there's a number of different references to that earlier name. By the way, Simcoe, in his renaming insistence, decided to change the name of the River Toronto to Humber, after the famous river in the north of England, separating what was north of the Humber, Northumbria, or Northumberland, from the regions further south, and that name has stuck. It's still known as Humber. So, welcome to Reykjavík, Iceland. This is the first stop on our little vacation, and I'm here my first day in Reykjavík, so I thought I'd tell you about the origin of the name Reykjavík. This is a pretty well known one, so you may have heard it already. It means literally Bay of Smoke, the first part Reykjavík means smoke, and Vík means a bay or cove or inlet, something like that. So the name obviously refers to the volcanic steam that is produced here in Reykjavík. It's well known for it. So that first element, Reykjavík, is cognate with rík, English word rík, and the second element may be cognate with the first part of the word viking, depending on which etymology you prefer for the word viking. So viking either means refers to the fact that they came out of these bays, these fjords, unless you choose to go with the other etymology for viking, the vike part coming from Latin vikus, meaning a settlement. So there's ongoing debate as to which of those etymologies is the right one, but in any case it seems like the vike part in Reykjavík and viking may also be cognate with the the wick suffix in a lot of British place names. So we'll be looking at a few of those a little later on when we end up in England and look at some of those place names. Today's place name is geysir, from which we get the word geyser. In fact, geysir is the very first geyser. All other geysers around the world are named after this one hot spring in Iceland, located in Haukdallar near Reykjavík. So the word geysir in Icelandic means literally gusher from geysa to gush, and it comes from a Proto-Indo-European root that means to pour, and is thus cognate with words such as English gush as well as gut, funnel, fusion, and refund. Next we have the place name gofos, a waterfall in Iceland, and the name literally means golden waterfall. Gol means gold, it's cognate with English gold as well as the English word yellow comes from a Proto-Indo-European root that means to shine, and fos comes from a Proto-Indo-European root that means to spray or splatter. Fos means waterfall in Icelandic, but the Proto-Indo-European root pers means to splatter or spray. Next we have the place name Thingvillir. Thingvillir is a national park in Iceland and is the location of the very first parliament in Iceland. It's also the site of the join between the North American tectonic plate and the European tectonic plate, and they are gradually drifting apart and new land is being created as the volcanic material comes up from the ground. The name Thingvillir has two parts to it. So the first part Thing refers to the fact that it was a meeting place for the parliament. So a parliamentary or an assembly of any kind is known in Icelandic as Thing and originally Thing meant that too in English. The root that it comes from the Proto-Indo-European root and the Germanic after it, the word originally meant stretch and it came to mean a stretch of time and from that it came to mean the sort of appointed time for a meeting. Hence it's meaning of assembly. The second part of the word, Villir, originally meant a forest, a wooded area and it comes into English as Wold, which we'll see a little later on in an English place name, but it eventually oddly enough came to refer to an area that is sort of an open land. So that's where the the Villir part comes to really mean something more like a field or something like that in Icelandic. Thingvillir is in particular the location in which the famous Law Rock is located. This is where during the All Thing, the General Assembly, the Law Speaker would stand upon a particular rocky outcrop and read the laws or speak out the laws. And in Icelandic the word for Law Rock is Lübberg, literally Law Rock. When we arrived in England, we flew into London and we took some footage there but forgot to actually record the etymology itself, so I'm doing it now that I'm home. This name is recorded as far back as Roman times when Britain was a province of the Roman Empire and so in Latin it was known as Londonium. But of course the name doesn't come originally from Latin, it comes from a Celtic source that we're not exactly sure what and what it originally meant. There's actually a lot of debate on this. So one theory is that it means something like place of the navigable river or unfortable river, so in reference to that point of the Thames which runs through London. So at that point the Thames is quite deep, therefore you can't cross it, you can't fort it, but it is navigable by relatively large boats. So that's one theory of what the Celtic root of that name might be. Another theory is that it might be an eponym, so therefore named after someone named Londonos, so place belonging to Londonos, that personal name might come from a word that longed that means wild. It may even be a pre-Celtic source that gives us the name and I believe that's where the affordable river idea comes from. So today I'm in Leicester. The city name Leicester has two elements to it. The second part comes from the word Chester which you find at the end of lots of city names in England and that word comes from Latin castrum meaning a field or camp. Ultimately it may come from a Indo-European root that means to cut, so it's a sort of cut-off area. The first part of the place named Leicester seems to refer to a tribal name in Latin. It was the Ligore. It seems to come from the name of a river, so they were the the people who lived near the Ligore river and that river name is also preserved in a nearby river, the Lera river. According to Geoffrey Monmouth that name is connected to King Lair, the legendary Celtic king, and it possibly goes back to the same Proto-Indo-European root that gives the river name Loire in France. So that root means to lay or lie, the idea probably referring to sediment, hence a river name. So in some it means the camp of the Ligore people, the people who live near this river. The river name ultimately coming from a reference to the sediment that is deposited by the river, I suppose. So today we're in Nottingham. Specifically I'm standing in front of Nottingham Castle, which is unfortunately closed at the moment for restoration, but I thought I'd talk about the name Nottingham anyway. So the site before it became known as Nottingham it was already a Celtic site. So in Brithonic, and I'm going to mispronounce this name and I apologize for that, it was known as Tigro Cobauk, I think, which means city of caves and this is demonstrated by the fact that the site that Nottingham Castle is built on is riddled with caves underneath it. After the arrival of the Anglo-Saxons the place was taken over by someone named Snot, hence the current name of the site. So it was originally Snottingham. So Snotting means the people of Snot, so his tribal group or family group, and the ham part is cognate with home. So the home of the Snottings, the home of Snot's family or Snot's tribe, we could say. Eventually after the Norman conquest the S was dropped off the beginning of Snottingham and it transformed into its current form, Nottingham. So but you can still remember that this is the place that's not owned. So here I am in Lechleid on Thames. It's a village in the Cotswolds. The village sits next to a very upper part of the Thames, and the town's name means probably River Crossing near the River Leech. So the River Leech is a tributary to the Thames, and the River Leech gets its name from an Old English word latch. That means a boggy stream, and is cognate with the word leak, as in water leaking. The second part of the name Lechleid comes from Old English Yalad, which means a way, a course, or a going, and is cognate with English load. And Lechleid is the highest point in the Thames that is navigable by a relatively large sized boat or laden boat. So in times past goods would be loaded here and shipped down to London. The Cotswolds is a bit of an uncertain etymology, at least in terms of the first part of the name. It might be a personal name, an Old English personal name Cod, so it's Codswold, or it might come from a word that was used to refer to sheep. Ultimately from a word that means a little hut or cottage that could be used to keep the sheep in, and it would therefore be related to the word cottage. Wold, or an Old English wild, means a forest or wooded area, and it ultimately is related to the second element of Thingvillier, where we were before, in Iceland. So originally that the protogermanic root referred to a wooded area, and then in Norse it came instead to refer to more of an open valley or meadow kind of area, but in Old English it continued to refer to a forest or treed area. So it either means Cod's forest or it means sheep forest, I suppose. The town Sirencester in the Cotswolds was originally known in Roman times as Corinium. The name seems to have come from a Celtic name. Corin is cognate with churn, the Celtic name of nearby river, but its ultimate meaning is unknown. This, during Old English times, was then suffixed with the common place name, element Cester or Chester, which ultimately comes from Latin meaning a town, a fortified place, and the first part developed into Siren, and so it's now known as Sirencester. So here I am far upstream on the River Thames, the famous river in England, which runs all the way from the Cotswolds through London and out to the Channel. So I thought I'd talk about the name Thames itself. This is somewhat of a disputed etymology, this may not be much of a surprise to hear. It had previously been called Thamesis in Latin, named as far back as 51 BC. So the the TH at the beginning is not etymological, it was added in later, but still pronounced with just a hard T sound. So it either comes from a Celtic root, tam, which means dark, so the the dark one, the dark river, something like that, or it comes from a pre-Celtic root, ta, that means something like to melt or flow turbidly. And by the way, in Oxfordshire, it is also known as Isis. So today I'm in Oxford, the location of Oxford University, which you can see some of behind me, with its many very old medieval buildings. The name is pretty straightforward. It means the place where oxen ford the river, cross over the river. So it's a it's a point where it's possible to lead your oxes across the river. So the first part of that ox comes from the Old English word oxa, meaning ox, probably ultimately from a Proto-Indo-European root. That means wet or to sprinkle. So literally then an ox is a bespringler, an animal that sprinkles. The second part of Oxford, ford, comes from an Old English word ford, which ultimately comes from Proto-Indo-European root pair. That means to lead across or go across or something like that. I'm not actually in Yorkshire at the moment, but we'll show some pictures from when we were. But in any case, the the moors behind me may be reminiscent of the landscape of Yorkshire. Anyways, we're not far from there. The name Yorkshire is actually quite a complex part. So the Shire part comes from Old English Sheer, referring to an administrative region. It possibly is connected to a Latin word for any care. But the York part is the really interesting part. It was originally known in Latin as a boracum, a Latinization of a Celtic name, possibly. So in that case it would be Iborus's place, Iborus's form, or something like that. Or possibly it's related to the word U as in U-tree. So it therefore means sort of the place and the place built with U-trees, I suppose. After the Anglo-Saxons invaded, they thought that Latinized Celtic place name Iboracum sounded a bit like a native Anglo-Saxon word, A-O-4, meaning wild boar. And so they kind of reinterpreted the name as alphawick, or alphawitch, which would therefore mean something like a wild boar farm. So the wick or which part of that is a Germanic word, that possibly comes from, is borrowed from Latin vicus, meaning village, and may go back to a proto-Indo-European root. That means clan. Now after, this is the story of many invasions, after the north of England was invaded by the Vikings, they again sort of reinterpreted the name somewhat and they replaced that English place name element weak with the Norse word vique, as in Reykjavík, which means bay, even though the town York was not any more close to a bay, but nevertheless it sort of sounded similar enough that they made that transition. And the first part, A-O-4, became simply your, so they called it Jorvik during the time of the Danelaw, and eventually that got contracted to simply York. So today I'm in Lancashire, the name Lancashire is a sort of contraction of Lancastershire, so the first part of that it comes from a Celtic river name, the Celtic river name moon that may mean healthy or pure, the Caster part as we've seen before from Latin meaning camp, and the Shire part which goes back to Old English, ultimately from a proto-Germanic word that refers to an administrative region, but it possibly has been connected with Latin cura, so meaning care. So we're currently visiting in Burry, we're actually a little bit outside of the town at the moment. Burry is a pretty straightforward one, it simply means a fortified place, it comes from a Germanic root, Old English Burr, and that Burry element occurs at the end of many place names in England like Canterbury or anything with a burrow on the end, that's where that comes from. It comes ultimately from a root that means high, so you can imagine a sort of fortification high up on a hill or something like that. So we visited Manchester obviously, we're not in the city right now, the name Manchester, we've seen that second part, the Chester part a number of times already, referring to a Roman fortified place. The man part is from a Celtic source obviously, the meaning is uncertain, but it quite possibly comes from a Celtic word that means breast in reference to the hills, so breast-shaped hills, so I suppose therefore that would mean Manchester means breast hill fortified place. And one more we forgot to film while in England was Liverpool. Liverpool comes from Old English elements that basically means pool that is thick with mud or weeds, so the pool part is fairly obvious, the liver part is indeed related to liver the organ, but in a different sense it meant sort of thick or coagulated, so it's obviously connected to the idea of the liver, the organ and the body, the word also happened to be used to mean a clot of blood, and it goes back to a proto-Indo-European root, lape, that means to stick or adhere or fat, and so hence this idea of being kind of thick or clogged up, it therefore referred to the, I guess the Mersey, thick with mud or something like that or weeds. There is another theory about the etymology that it came from something more like elder pool in reference to eels, so a pool filled with eels, but I think the consensus now anyways is that it is this idea of muddy water. So the people from Liverpool are often referred to as liver pudleons, so this is a kind of humorous joke on the name, pool being replaced with puddle. Also the people from Liverpool are known as scousers or their dialect of English as scouse. This comes from an aim for a type of stew, the sort of local stew, the local dish, and so again this is kind of humorously referred to the people and the way they speak. Well here I am in Filey, you can see the ocean behind me, and it is called Filey because of that large promontory you also see behind me. Filey comes from Old English fiefel, meaning sea monster, and the the e part of Filey comes from Old English a, or ea, which is the first element of island. There is another possible etymology that it comes from Old English fief, meaning five, and la, meaning clearing, so five clearings, but I kind of like the sea monster promontory, and it does kind of look like a sea monster if you look at it. Thanks for watching, and coming along virtually on our vacation to Iceland and England. If you want to hear more about these trips and the things that we did and learned, check out our next podcast episode coming out late August. Main videos will return very soon, there'll be another video at later in the month, and lots more to come through the fall and beyond. Bye for now!


Little has been published on the demographic composition of the Clinical and Translational Science Research Workforce within the Clinical and Translational Science Awards, CTSA, program despite the well-documented need for greater diversity in the biomedical research workforce. Analysis of workforce demographic reveal that women and members of underrepresented groups remain persistently underrepresented in the CTSA hub and training components principle investigators. In contrast, in the CTSA program career development and training programs, females have greater representation as participants and non-whites were better represented in training programs. This article was authored by Mercedes Rubio, Heather L. Baker and Jamie Nihoko Doyle.