Recently, I looked at five CSS solutions to sometimes hard to solve JavaScript problems that people can run into, and it seemed to be pretty popular. So this week we're looking at a few more tips, but instead of looking at specifically those types of problems, I want to look at just some sort of underrated properties and properties that don't get enough love within CSS, and that can help us either overcome problems and get us out of issues that we might be having, or sometimes just to help add that nice little final touch to our websites. Hello, my front-end friends. Thank you so much for coming to join me once again, and if you're new here, my name is Kevin, and here at my channel, I help you fall madly, deeply in love with CSS, and if I can't get you to fall in love with it, I'm hoping to at least help you be a little bit less frustrated by it, and what better way to do it than exploring the parts of CSS that a lot of people don't know about that can really help you out. So let's dive right into the code. We are here in VS Code, and the first one we're going to look at, if you've been watching me for a while, you might have seen me use it, but every time I use it in a video, people are like, what is that? So it is isolation, isolate, and I've set up this div here, and actually, let's go look at the structure. It's right here. We have this isolation example. That's what has the blue background on it. Then I have this isolation div, which is the green one, and then the isolation inner, my naming here probably could have been better, but CSS naming is hard. The inner one is this one with a gradient on there. We're going to look at, it's a little bit of a contrived example, but we'll look at, we'll turn this into something a bit more useful as we develop it and work on it. And what I want to show you, first of all, is let's take this isolation inner, and let's say we need to play with the Z index on this a little bit, right? So I actually want to come on here and we do a position of absolute, absolute like that. And if we come and take a look here, this isolation inner is inside of the isolation here, which is inside the isolation example. And if I come on that, and I do position absolute, and well, let's just do a save and it sort of just pulls out of the flow. So it's still there and it hasn't moved, but it's not in the flow. So the padding of this doesn't incorporate or worry about that anymore. And then let's say there's text in here. We might not want to do this, but let's just say we do a Z index of negative one and hit save and it vanishes. And the reason it's vanishing is it's going behind the blue background that I have over here. And that's just because of the way stacking works, right? We do a Z index, negative one, it means go to the back, all the way to the back. And there's different ways to overcome this, but the best way to control something like this is to create a new stacking context. And what that means is I don't want this negative one to be able to escape outside of either here or here, depending on the type of thing that I'm trying to do. So let's come up to the isolation example. Again, that's the one at the blue background. Maybe I should have called it isolation outer, but anyway. Here, let's come and we're going to try this. We're going to do an isolation, isolate, hit save. And notice we can actually see it poking its head out now. That's kind of interesting, right? So what this is doing is it still has the stacking context, but we're creating a new one where items can't escape out of that isolation example. So like this div right here, it has its own stacking context. So the negative one is relative to everything that's inside of there. So it can go behind this, but it can't go further than that. And we could even step this up where I could come on just the isolation. So that's the green one. You can see lime green and do an isolation, isolate. And if we do that and hit save, now it can't even go behind that anymore because it's limited to within this item right here. Now there are other ways of doing this. You do a position relative and then give it an item, its own Zed index. And then that now has a stacking context. And there's a whole bunch of weird ways we can also create stacking contexts. But the isolation, isolate was created. So we have something that has no other side effects. It's doing nothing else other than creating a new stacking context to help control where things are going. And if you're wondering, like, why would I ever want to do something like that is we might want to do something with, say, this background gradient. I'm going to cut that out of there, comment this out just so it disappears away. Let's comment this out from here too. And so we have this isolation here. And on that isolation, what we're going to do is come in with an isolation after. And this is a fun trick where we can do, we need a content on that. We can throw a, we're going to throw a position of absolute on there. And because this is the absolute on the isolation itself, so the green thing, I'm actually going to remove this and put a position of relative relative. Then we can come in here and do a, I was going to do index. I want to put a inset of zero, which is top bottom left and right of zero. And then let's put that background on there. So it covers the entire thing. Okay. So why would that be useful? And so what we could do on here is a filter, filter, and do a blur on there. We'll say like 2M, something like that, just to make it nice and blurry. Maybe a 1M would be enough actually. And then we can also come in with a transform of scale and maybe like a 1.2. Just make it a little bit bigger or you could play around. Maybe the inset would actually make more sense here of like negative 1M. So it's a bit more proportional with how it's been pulled out. So we have this like blurry thing that's been pulled out like that with a gradient on there. So here we have the isolation isolate on the blue background. So I can then do a Z index of negative one.  And I've looked at this before, let's turn off that background. So you get a cool gradient shadow like that. And I've looked at doing things like this in the past, but this isolation isolates a nice way to do it without having to come on here and have to do position relative in a Z index or other things like that to be able to control where, you know, how things are stacking up on each other. So yeah, a really fun one that can be extremely useful. But next up, what do we want to do? Well, we can give our unordered lists some life with the marker pseudo element. So let's come down a little bit and let's come take a look actually here. I have these lists that are right here. And actually we can come below this one. That was what we had before. And let's just say my unordered lists, so UL. And on the UL, we're going to do space and marker. And we can just do marker like this, actually, to be honest. But we have some, but that could, I don't know if that would affect ordered lists or not. I'm assuming it would, but I could be wrong. Good question. Something worth looking into. And we'll check that out in a second. But basically I could go start with color. Color is red. And look at that. We get the red color coming in on my bullet points. Super cool. But even better than that, we can come in and say content and give it something else here.  And yeah, we can do party mode for this and hit save. And I've talked about these before, but there we go. We get that coming in. And maybe here you do a UL, LI, LI. So you're getting like nested allies that are coming in. And then that can have a different one. Content could be, I don't know, what else could we do? This one's laughing, whatever it is. I mean, I'm using emojis. Oh, I was like, why is that not working? You need the marker on there. And now we get the laughing emojis on these nested ones. You can play around, do different things with your bulleted lists like that.  And it does actually change ordered lists as well. So we do have to be careful with that. And so it might be useful on this one to actually say UL, space marker. And we can even do it like that. So it's only getting like the first level allies. Because the marker's always on the LI. So we could say like that. And then this one here could be, again, if it's UL, LI. So then we keep our numbered lists in those cases. Or, you know, I guess it could even be like that, whatever you need. But just be careful that you're not accidentally changing numbered lists to something if you want to keep your numbers. But speaking of numbering, another thing I want to look at is numbering things without ordered lists with counter. And so you can see here I have this one and this is a section of content. And then two, and if we come and look here, those aren't actually in my markup. Both of those are right here. My H3 of my list title and my list title right here. I put list title, but this is paragraphs. I guess that could be section title. Let's change those. Section title would make more sense. It's going to break things. That's okay. But we can have like numbered section title. And you can do this to like steps and have like subsections and other things. Now this is for when a OL isn't the appropriate thing. So this is not to replace ordered lists. It's for say you do have section heads where an H3 or another heading is the appropriate markup to be using. But what you want to do is have some numbering on those. So here in my, you can see I've set some a few things up here. So counters section. And on these, so this is my list title. So we're going to change this over to a section title instead. And then this one also to my section title. And you can see that's come in. And basically there's a few things coming in here. We have things that are going to reset counters. And this could even be on your body. There's also a set counter actually, I think it's called. But you want to have something that's going to make sure your counter is at one and you can change the number. You can even have like a number starting at seven or a negative eight, whatever you need. You can do different things with it. But we can do a counter reset just to create like this section counter. And then every time I have a section title that is inside a counter section. So here's my counters section right there. So every time I have a section title inside one of those, it's going to increment the number. So we had a one, then it becomes a two, then it becomes a three, a four, and so on. And then we can use our count or our content property on the before element. I can do it on an after two, I guess if you wanted to. And we have the on the cut on the content property here, what we can actually do is use this counter. And what you do is you say, what counter do I want to put? Well, I want to use my section counter. And then if there's anything else you want to put, so maybe you want it to, this is so my section counters just putting the number one there. And then anything I put here is what follows after that. So it's going to have these, the number one, the number two, a colon and then a space. So if I wanted to, we could even have this be section and section one. So if I do that, you get section put a space.  So section one, this is a section of content, section two, section three, and so on and so forth. If you'd like to go more into counters and more into the different things you can do with the content property, I've talked about it in a lot more detail in a video that is linked down below. And there should be a card popping up for it as well. And you'll notice here, this is nothing. So we'll delete that. I was playing around with some stuff. All right. And next up, this is more a couple of fun touches that you can do, rather than set things up very specifically. But we have our carrot color. And we also have an accent color property. So two for one on this one. So say I come in here and I have these form elements where I'm writing some stuff in them, and then obviously my content here. And when we click into these, we get the carrot, right? This, the flashing, the flashing thing there. And we can actually style that. So if I come here, I can just say that, let's say we do form. So everything in my form, the carrot color is going to be my var color primary 400, which is just a bluish color. And now if I come take a look, you can see, it's not very super obvious. Let's also do font size of like two RAM, make it really big, just so it's a little bit more obvious. And you can see that it's a little blue flashing carrot there. So that's kind of cool. And whatever we're in, it's always going to be there. So if you have a brand color, and again, when these little touches, they can go a long way, along with our accent color right here. So here I have my radio buttons.  We could do this and I'll do it on my route, but you could do this specifically for different things. But it is something that inherits, so you can do it anywhere. And it's your accent color. And once again, we can use my var primary 400 is blue. So let's say it's lime green, just so we get something that, wow, look at that. It just pops right off now. And we get that bright green coming in there. And also, if these were instead of having them as radio, these were checkboxes, it also works on those. Let's go find that checkbox, not check, Kevin. There we go. So if it's a checkbox, you can have it check and other stuff. And there's a few other elements that this works for as well. Once again, I've talked about this before. So if you want more details, you can check the description down below.  This is a unit. Once again, these are all things I brought up into bigger contexts or had different things on. But I still want to talk about it, because not enough people know about them. So this isn't a property, it's a unit. But we can really make our text a lot more readable when we're using it. So let's come down here. If we come and take a look just really fast. We're going to come up here and we have all these. We'll just do it for all my paragraphs. I was going to do it specific for some. Let's just come to here. And we're going to do p. And we're going to say, don't use a width for this. If you do it, just make sure it's a max width. And I'm going to say like 60ch. There's different levels of thing. And it's not perfect because it's roughly the width of the number zero of a font. So like obviously a capital M is much wider than the number zero. So if you counted all the characters here, probably doesn't add up to exactly 60, but it's a ballpark figure. And it's a lot easier than saying like, oh, it's 70 ram or 60 ram or 50 ram or 500 pixels, 600 pixels. Really those are magic numbers. Just you finally get to roughly what you want. Whereas the advantage with this is I've set up a few classes. So I have a font size 300, which would be smaller. So say we do font size of 16 pixels. So you can see this one is shrunk down and we even have another one on here. Let's do a font size of 200. So font size on that can be like 12 pixels. And you'll notice that like the width of them is shrinking with the font size. And this is super handy and super awesome that the maximum font size is limited by this one. So we're setting our width relative to the font size of what's happening in there. And that's a good practice to have to increase readability because we don't want to go over about 70 characters wide or it starts really stretching out. It's just harder to read. So it's a nice easy way to fix things. It does raise a problem if ever you have centered text though. So you'll notice this is centered. But usually if you have centered text you actually want it to be centered in the viewport, right? And this is clearly not centered in the viewport. And that does raise an issue. So in this case what we could do is say a P with a text center. And we're going to look at a few different things because this isn't usually how I do things. But then we could just do a margin in line of auto which would then keep that also centered. So that it has the max width and it's staying centered within the space that it has available to it. So that's definitely an option that you could use. But a lot of the time I don't actually put this text center on a paragraph itself because you might have several paragraphs that all have it, right? So you might come and you have a div up here, div text center. And that div is ending all the way down here. So now what's happened and the issue is like I don't have a P with a text center. I have P nested inside of text centers. And that's kind of awkward and not very nice. And well, how do I fix that? And well, there's again, another way we can have that or we could do a text center P and then do the same thing. Or I mean, this could be one selector that's doing both. So then we're getting it like that. Another option is I like to use SAS a lot. And if I'm using SAS, I do this a little bit differently where let's just actually open this up really fast. We're going to rename this dot SCSS. And I'm going to do this like the really, really fast way. Not the way I would necessarily normally be working, but we can do a SAS watch my style dot SCSS. And output that as a style dot CSS. And that should fix everything. There we go. Things have come back together. And if I come in down here, one thing that I often would do if I have something like this with my text centers is within my P, you could come down and then also say text center because we have nesting within SAS and do the trailing ampersand. And on there, do a margin in line of center. And one of the things I like about this is it keeps all of the paragraph styles together rather than having like your paragraph and then your text center things somewhere else, just how I'm used to working. And this doesn't really affect anything with text centered. It's only affecting paragraphs. So I sort of like doing things like this. Now, the one impact with this is it's definitely a little bit obtuse in the readability of it. So if you do like this type of approach, you definitely would want to throw a comment in here, probably just to keep it from someone coming across and going, what, right? So yeah, but I do think that it's a useful way that we can be working and a fun way to author your style sheets. And if you'd like to know more fun and useful CSS tips and tricks and stuff, I put a short playlist of my recent videos where I look at these types of things right here for your viewing pleasure. And if you would like to learn more about SAS and into that world of things, I have a course that's just about ready. There's a link for more information just down below. It goes into much more than just SAS, but that is part of the course. And with that, I want to say a very big thank you to my supporters of awesome. Dan, Johnny, Patrick, Simon, and Tim, as well as all my other patrons for their monthly support. And of course, until next time, don't forget to make your call on the internet just a little bit more awesome.


In order to remain relevant and productive, Health of Mother Earth Foundation, HOMEF, has organized training on food and farming systems for some farmers in Potakotu River State Capital. Participants were trained on how to use agroecology for better farm production, the report. The program manager of HOMEF, Joyce Brown speaks on the significance of agroecology. She notes that the system will help to mitigate the impact of climate change by retaining carbon in the soil. Agriculture helps soils to be resilient to the impact of climate change. It's important that as a people, as a country, we find our way back to agroecology because most of the practices of agroecology are practices that our farmers have been practicing over time. There are new practices, there are innovations in agroecology but basically there are practices that we know but we are moving away from because of the advent of the use of chemicals, the heavy use of chemicals. Facilitating the movement of food products from the farms to the market becomes necessary and this means the government must fix bad roads. Obviously, the government has to empower farmers with organic fertilizers. Agroecology is the magic, you know, agroecological principles, you know, actually what we stand for, we advocate for it because it's not a risky technology as GM. Agroecology is a system that aligns with our natural system of food production and we encourage the government, you know, to educate, train and empower our farmers, you know, in that line. We should make laws that are contextual, laws that protect the interests of our smallholder farmers because the plant variety protection law is actually in accordance to what they call UPOL. Some farmers are already sold out to the agroecology method of famine as it is in line with nature and does not come with any health implications. They call on the government to encourage the practice across the nation and reject the genetically modified agnus in foods. We don't see any benefit in it. It brings us as a government to give us money, let them give us ground that we empower us to do the manual work we have been doing because we discover that even since the GMO can kill grass, it will also kill the insects that are friendly to farm, it will kill them. After a two-day dialogue and training on agroecology, participating farmers are confident that the solution to impact of climate change and food crisis is agroecology. Hello, hope you enjoyed the news. Please do subscribe to our YouTube channel and don't forget to hit the notification button so you get notified about fresh news updates.


As we go on the show today, in its industry data sheets, the Major Oil Marketers Association of Nigeria, Mormon, outlined the prices of fuel-inverse house across the country between April 11 to April 14. According to Mormon, the Naira per liter prices were calculated based on the CBN rate of $469 to $1. I'll leave you with details of that. I am Justin Akadone. See you again next time.


I can't readily give you a good estimate of the size of that crowd beyond the certainty that no matter what anybody is claiming, the whatever that people claim, it will be much larger than the actual crowd. The reason is people are bad at making appropriate estimates of the size of crowds. It's actually a difficult thing. Once you get more than a few hundred people, it just looks very big. They just pull big numbers out of the air. And then there are all sorts of political reasons why the sizes of crowds get either inflated or deflated. The thing is, the size of a crowd has become a token of popularity of whatever the cause is that gathered them. The area that the crowd is in, actually area in square feet or square meters or whatever measure you want to use for it, and a reasonable estimate of the density of the crowd. In other words, how many on average, how many square feet is each person taking up? At least some of the pictures I saw of the crowd yesterday definitely was more than a more dense crowd. People were really compressed in, but that would be something more on the neighborhood of maybe five square feet per person. One place where attempts at doing reality-based crowd estimating go wrong is unrealistic estimates of the density. Sometimes you will see density estimates of one square foot per person. That's, you know, that's a deadly stampede kind of thing. I mean, it's beyond mosh pit, so that's the problem. The other thing you need, and I sort of referred to it at the beginning, is a decent measure of the area that the crowd is contained in. The best way to get that is with good aerial imagery, something up over the top where you can see the edge of the crowd. The trouble with DC, the District of Columbia for doing this, is there's several barriers to getting good overhead imagery. There aren't any really tall buildings.  The other barrier in DC is it's basically a no-fly zone. You can't have helicopters up overhead shooting aerial imagery, like in most other cities. No drones are allowed. I'm perfectly prepared to believe there were several thousand people there, you know, 10,000 maybe. I don't know. Let's say, you know, still a big crowd of people who obviously were pretty darn fervent about what they were there for. But when you start getting, you start pushing that up into six figures into 100,000, so on. No, that didn't happen.


So, to keep everything rolling, I'm just going to go ahead and get started. So I'm Tom Rondo. I used to be the project lead for Guinea Radio until about two years ago. Since then, I've been a program manager at DARPA. So for those of you who don't know, DARPA is an advanced and fundamental research organization agency as part of the U.S. Department of Defense. So, our role is to create breakthrough technologies for the U.S. government. And you probably have seen some of the output of those breakthroughs, such as the Internet's GPS, stealth, lasers. Most of that was originally funded or inspired through DARPA. And coming from the Guinea Radio and the open source community, then to that role, I really wanted to take a lot of inspiration from what we do here into creating these kind of breakthrough technologies. And so one of those things was to try to figure out how to pull in more people to solve some of the great challenges that we see in the future of technology and science and engineering, not let it be locked into the certain way of thinking and doing business that an organization where 60 years old, actually our 60th anniversary is on the 7th. So when you've been around for that period of time and you've been as successful, you can get into ruts. And we haven't because we keep trying to do new things. And this was one of those new things to do. So we've always done HackFest as part of Guinea Radio. The open source community has done this very successfully. HackFest or Hackathons, slightly different mentalities behind these. But I wanted to do it for software radio in general because I wanted to continue to the trend of making access to the electromagnetic spectrum an interesting, fun challenge and see where we can go from what we know how to do today. I mean, if you think about the history of electromagnetic spectrum, it's 150 years since Maxwell, 120 years since Hertz. We've come a huge way in understanding this concept. And now we have very accessible free software and fairly inexpensive hardware to do this stuff. And I wanted to see what else we could do with it. And I believe we have some interference. So to do that, I wanted to expand on what we normally did in Guinea Radio HackFest, which was really get the core developers together. Somewhere, usually either in the US or Europe, often before Fozdom, we try to get together, and we just hack on the projects. So I wanted to do it a little bit differently, expand the concept a little bit more, so I had this three-party event where I had the hacker space when that was just kind of like our normal HackFest. You just show up with your ideas, enthusiasm, community building, events of trying to just do stuff while you're there. Focus energy of people for a short burst of time and get something done. So we had that set up. I also like this idea of getting speakers together, getting ideas out there. A little bit more focused talks on some really interesting stuff. To continue the conversation, to inject new ideas into the conversation. And so every day I had two talks, so about an hour and a half worth of lectures, coming from some of the world-leading experts and voices in their respective fields. And so it was a mix of software radio, software find networking. And so we had a lot of people together from OpenNFU was there. Corey Doctro and Amy were there kind of giving a perspective on just technology in general, what it means to our lives. Chris Anderson from 3DR, PK's NASA, so kind of giving a drone perspective where we're going. Hackers, Joe Grand and Sammy. And then Linda and Pierre, two incredible thinkers kind of rounded out. So very cool stuff that I think led the conversation and made sure that it wasn't happening. But then, at the end, this mission's one. This is where I really tried to focus the actual technical energy of the Hackfest. So we put together, and we'll go over it, we put together a commercial drone, put a software radio on it. Nothing new there, but what we did instead was use the software radio as the communications link to control the drone. So most people put a SDR on a drone and use it as a sensor. We actually wanted to use it to control the drone. And the reason for that was, to me, software radio makes the electromagnetic spectrum programmable. Now you connect that to an unmanned vehicle, and now that is part of your programmable space. Now you have this programmable robotic system that you're manipulating over the electromagnetic spectrum. And that presents some really cool challenges, and I think some really cool technology to push that forward. I'm not going to dive into this. I just want to give you a sense of, you know, it was a five-day event. It took place at NASA Ames out in Mountain View, California. So different talks along the way, open working sessions. I had some brainstorming sessions to get people, like, again, just constantly trying to converse throughout the week. And then at the end of the week, we had this mission judging, and I just kind of brought all the teams together who were doing the actual focus on the drone, SDR mission together to, in front of a panel with me and four other DARPA program managers so that we could get a look at what could happen. What could people do in a week with this kind of technology and this kind of push? Can we get to the point where, have we gone to the point, it was kind of the question, have we gone to the point where the software radio world is so capable and the tools are so available that you can do something completely new in a very short amount of time. So when the team showed up, they didn't know what they were going to be asked to do. They just knew it was drones and software radio. And then I asked them, solve some certain questions and see how far you could get. And then we asked them to give us the answer on Friday. So I just give you a background on some of what I asked the teams to do called these missions. This wasn't a competition, really. It wasn't a challenge. If you're familiar with DARPA, you'll probably have heard of some of our grand challenges.  This is not a challenge. This was a mission. Like, let's see if we can together address some interesting problems. So the first one was you've got two UAVs and a ground control station and you're trying to control UAV-2 over there. But for whatever reason, your link is unreliable. It's too far away. There's some interference. There's some kind of a jamming scenario going on. What could you do to use another UAV to route your packets around there? So this is an ad hoc mesh network kind of concept. Not horribly new, but an important concept to get right when you're trying to move these flying unmanned vehicles. Mission two was handoff. So if you're controlling the drone, there's one ground station controlling UAV-1 and for whatever reason, maybe, because you want to have line of sight but you want to continue that drone, so you want to hand it off to the next person down the line or maybe you're just tired and you want to give it off to somebody else. This is kind of like a cellular handoff challenge. You've got a drone that's moving and you've got different base stations here. How would you effectively move control between those two stations? And then the third one was, again, the sensor. SDR is a sensor, but what if you put other sensors onto this thing? How do you integrate them quickly? Every time I saw somebody doing something with a sensor on a drone, it was the exact same long process to get it integrated into the system, integrate into the link as well. How do you actually get the data to and from that sensor platform over whatever link was established? So we're challenging that. And all of these, again, nothing new, really. This isn't the most innovative questions we could have asked, but the challenge was, can we produce technology that allows us to do it better and faster and can you actually solve these problems in five days? And that turned out to be a much greater challenge. Let's see, I don't need to go over the details here. Turned out to be a much greater challenge than what it looks like from the introduction slides there. So we'll go over that when I finish up here. So as part of this idea of trying to expand kind of the nature of what we were doing, of the hack fast to try and bring people in, I went around the country and I tried to motivate people to come and apply as a team. Get your mission team together and come out for it. And so I got eight teams, some classic, more government-oriented people, Aerospace Corporation is what's known as a federally funded Research and Development Center. And then BBN, Raytheon BBN, Classic DoD Contractors. BBN, I will point out, is famous for being the company that actually was the one that did the original TCPIP network stuff. So very talented but traditional. Southern Methodist University, UC, University of California, Irvine, along with University of Southern California, academic teams coming out to play with us. Parsons and Assured Information Security, small contractors. Actually, Parsons is fairly large. Small in my world is what they do. They're fairly large and expansive otherwise. And then these were cool, Hacker Dojo and Fat Cat Fab Lab. These were just hacker spaces that I visited. So Fat Cat is from New York and Hacker Dojo is from the Bay Area. And I just went there and I explained to them and they put together a team to come out and participate. So kind of all over the board, representation that Mark pointed this out, how they set up here, mixes, all sorts of people. We got a similar mix coming out for us, which is great because it just shows you the applicability of this technology throughout here. So if you want to know more, I won't dive into the real specifics here. If you want to know more, there's stuff online. I gave a talk at GRCon last year. There's a video of me going over the details of this.  So the hardware was a 3DR Solo. So 3DR Robotics, founded by Chris Anderson, no longer does drones. Well, sorry, they no longer make drones. They're still in drone business. They no longer make drones. But the Solo is a really cool platform. It's actually too bad that they couldn't make it a sustainable business because it's actually really capable, inexpensive platform. But they're out of it now. But we got a hold of quite a few of them. Put on there a Raspberry Pi 3 and a Usurp B200 Mini. And now the Raspberry Pi 3 was not my first choice. It's not the most, it's computationally limited in a lot of ways versus some of the other single board computers you can get. But I kind of wanted to make sure that, A, it was very easy to get your hands on whatever compute platform you chose. And, you know, we were in the Bay Area, so you could just go down the street to fries and pick up a Raspberry Pi if you wanted to. But also, it made sure that it was a constrained compute problem, that that was actually part of the challenge. Is all the software radio stuff that we do can be very compute heavy? How do you do it on a fairly limited platform? And then you got the B200 Mini for your comms or your actual RF connection. And then ground station, just a laptop and a B210. So everybody got one of those, kick off everything. And then what we did was, from my team, I put together a team within the government to build a framework for us to work off of. So again, this idea of controlling a drone over, you know, by manipulating the spectrum, what that means is you want to create a control signal, right? I want the drone to lift off. I want it to move up or down, left or right, accelerate, decelerate, whatever. So what you do is you want to build the information there. And so we were just using the Mavelink protocol, very well-known protocol that most of the, a lot of the flight controllers speak, including the one that we were using.  And to do that, we put together this, you know, using tools that existed, we just kind of put them all together using Pi Mavelink to kind of manage the Mavelink packet. And then Gini Radio, we created Defy and a little bit of that Mac layer level there to be able to move that information from your ground station to your drone. Demodulate it, convert it back into the raw Mavelink packet, dump it into the flight controller, and now you've got some networks. Okay. This is published, I thought, oh yeah. If you go to the Defense Digital Services, they are a group within the Pentagon that is dedicated to helping get code, to manage code within the DOD, and to move more of this stuff open source. So working with them, we published our GRUAS link. Very simple flow graph. It was really like literally meant to, pun intended, get people off the ground as soon as possible. Also what I like to call the stupidest thing that can possibly work. This was not a robust link. This was not doing anything clever as far as coding or interference protection, you know, not too much filtering. It was really just let's make sure that on day one I can send a Mavelink packet from my ground station to the drone and let it fly. And then the real challenge that I wanted the teams to do is take that basic idea and run with it and evolve it and grow from there. So we actually released our UAS link two months ahead of the Hackfest. I released it at GRCon. We went over how to install it, how to build it and all that stuff. So really wanted to get that out there. Part of the reason for doing that was to change some of the conversation that we have within the software defined radio world, especially within GNU Radio. We often build tools to build tools. We work within the GNU Radio project and we just focus ourselves within there. I wanted to provide an application that I thought was going to be exciting and allow us to engage the spectrum and more than just receiving signals, looking at them at waterfall plots. InfoSec stuff has been great, but it's all to me seem fairly insular. So what I wanted to do is have this connection to the real world, have this ability to control something that's local and tangible and hopefully use that to excite people that this is a force that can be controlled and can do really cool stuff. So I wanted to produce that. I wanted to get that out there. It also shows a number of A capabilities of GNU Radio but also some significant issues involved. And we talked about this at our little birds of a feather yesterday. To get data into and out of GNU Radio, right? Eventually you want to stop with GNU Radio. It talks to an antenna and it talks to your computer, but it shouldn't do everything. It should talk to the computer and then you should build applications on top of that. But to get that data in and out can be cumbersome. And we've used every single possible technique within GRUAS link to get data in and out of GNU Radio. So if you look at it, it's probably going to be pretty ugly, but it proves a point and it does provide a capability. And so working with Oak Ridge National Labs to put this together, again we just wanted to create the basic concept here. This is just a control GUI that exercises that graph that I just showed you in the last slide here where you literally, if you press the takeoff, you would see a drone that was tied to this, you know, lift off and hover. And then you could just kind of move it forward, back, left, right, you know, just kind of move it around. We all show, oh yeah, here's the full link to the GitHub for DDS and the UAS link. Let's see, I think, yeah. So starting from there, starting from that UAS link availability, we also made sure that you'd actually didn't really need hardware to get started with this, to play with this. So we had a kind of software in the loop and let's see, do I have it up here? I think that's, I always forget, is that key ground control? Which one is that? Can't remember what's on my head. Yeah, from who though? What's the PI? It is part of PI Mavelink, I forget, but it's called something, there's a, yes, it is PI Mavelink simulator so that you can do software in the loop. So you can actually play with everything by just having a software. We also followed, and we produced information on how to do hardware in the loop. So if you just connected two SDRs, the one that would be on the drone and the one that would be on the ground station, you could do, start studying your RF link without ever having to fly something in real space. So you know, it's more convenient, safer, a good way to kick off. So provided that as a way to get into this idea of flying a drone, and then of course you could always connect up a real drone and go from there. So try to provide, or we did provide the fundamentals capabilities to get people started and get people doing what I think is something kind of new and pretty fun within the software radio world. Let's see, how much of I want to talk about this? We had, we had those three missions that I talked about and when teams showed up, I guess they didn't know what the missions were. Monday morning I went over the three missions and challenged the teams to mostly focus on one of the missions. Like look at one of them and just work on that. You know, choose your own adventure and see what you can do by the end of the week. And so we had, these teams were the ones that tackled mission one. This is kind of the hopping mission. And so a lot of people were trying to build, basically what I liked about it was this recognition that there's a lot of tools available already within the open source community to do networking, to do mesh networking. So instead of building your own, use that on top of Gini Radio or on top of whatever SDR platform you have and then you should be able to make a capability from there. So people tried that. Mission two, we had Aerospace worked on this one. Again, this was a kind of a classic handoff, cellular handoff challenge. And they were looking at this from a, from that, again, similar concept that it's really a mesh network. If you treat it as such, you can do that. And then how do you actually do it with any authentication or encryption, right? So if I'm going to hand off my control of the drone, I want to make sure that the person I'm handing off to is the right person. So they put in ideas of encryption and authentication into it. A lot of people did Mission three. This is a, you know, the classic use of a drone is to use it as a sensor platform. So we had some ideas here. Deep Edge was fun. They were an academic university. They used computer vision to track a face with a UAV. So they had a big poster of Khan from Wrath of Khan and the drone was supposed to identify and wherever the poster went, it would track it. So that's, they did that first and then they used a picture of me and had a drone track my face, which was A, cool, B, terrifying. But still some really interesting stuff there. Just to give you a sense that, like I said, I really was pushing this open source concept here and I asked the teams, all right, so given our release of the code and pushing on this, what did you use? And you can see here that there's a lot of different open source tools that were used and this is probably not complete. It's just what people thought when they were explicitly using these. And of course, behind the scenes, these are using many other open source projects. So really happy that we got to push on this. And then I think the thing that I want to leave everybody here with is this was fun. It was a heck of a week. Exhausting as hackfest weeks tend to be. People left excited. There's a lot of great conversation. But what I loved about it was it really showed that this is a very hard problem that we're dealing with here. There's two hard problems, in fact. There's the physics of moving a drone around and flying it. It all looks easy and, you know, DJI and 3DR and people like that have made the controls of this a little bit easier. But in reality, this is really, this is a hard physics challenge. Similarly in the RF space, these are still hard things to do. It is an unknown. It's not visible. It's kind of intangible. And so when you're not an RF engineer, but you're coming into software radio and we've made it fairly easy to access this space, you start to, I think you start to ignore the complexities and start to miss some of the issues that are involved here. And so without having the tools or understanding how to develop, you know, with debugging and performance monitoring and analysis tools, front of your mind is you're trying to develop these things. If you're just going to go after your solution and think it's going to work, you're going to miss the challenges that the real world presents. So I think a lot of people looked at my three missions and were like, oh, those are easy. And then when you actually try to take your theoretical idea of how to do this into a real flying machine and real RF, that's a very different challenge, a very different problem set. So we were inside of a big concrete structure and we were running a three gigahertz signal and so you had two things. You had the difference in the barometric pressure and the atmosphere inside there is different flying than it is outside. You had to account for that and as the doors were open or closed would change how things behaved. You had to compensate for that and then the RF would just bounce all over the place. So the multi-path issue was horrible but nobody really had the tools, nobody built like the way to look at that and try to understand it and so what they did, a classic problem and I don't really fault anybody for doing this, it's the first thought that you have is my link didn't work when I sent that lift off command it didn't get there, let me turn up the gain. That was probably the exact wrong thing to do because now you're just increasing your multi-path issue and you didn't have the right equalizers, you didn't throw the compute power at solving that problem and so now you've just actually made your link problem worse but there's no way to engage that and so this kind of agile development didn't really take into account certain issues like that. So I just want to leave with that, this is not meant to be a huge downer on everything, it's a reality check on this is really cool stuff, we've come a long way in our ability to manipulate this idea, this electromagnetic spectrum but we also have to respect the real challenges that it presents to us and maybe rethink how we would engage in this kind of world and all the tools that we've been building within the Gini radio, within the SDR community to leverage that and make that happen. So at the end of the day I think it was a fairly successful event, we learned a lot, we're going to see how we take this forward and push forward in the future. I think it was a great starting point for a lot of really cool conversations and I hope a lot of cool technology. So that maybe one or two questions if we have maybe two minutes. Oh, I think so, absolutely. From my perspective, anything that ran a PIXHawk would have done the exact same thing. Now of course then you might have to change the nature of when you send a command and what the physics of that suggests and I think that's a really interesting question is if I have a, we actually, I should step back for a second, we had the 3DR drone solo, we also had a turbo ace matrix S which is a much bigger platform, carbon fiber blades, terrifying if you're too close to it frankly but also ran with the PIXHawk and we did show that we could control both of those but both of them responded differently to the different, you know, the input so you wanted to accelerate, how it accelerates behaves differently. So the answer to your question is absolutely yes and then how would you account for the changes in the physical structures of those things? They do not use a PIXHawk, so I think you could modify one, but no, but I don't think a DJI would work in this way. DJI is a lot more proprietary and locked off. Can you start decompressing? Thank you, Tom. Thank you.


Life on the Red Horse Ranch Hasn't offered to tell the boys at the Red Horse Ranch who the stranger was that came to talk to him during the dance. The boys have almost ceased to wonder about Alabama and his strange actions. However, here's something we do know that Tenderfoot is falling desperately in love with Rose Carter, daughter of Dad Carter, who owns the Red Horse Ranch. Let's join the boys of the Red Horse Outfit. That's one song we forgot to sing up at the dance, ain't it? Yeah, it's about the only one we didn't sing, but if we'd have kept on like they wanted us to, we'd be there yet. Oh, did I swing the gals at that sashay? Rally down. Yeah, but where you made a big hit was doing that ventriloquist act. The folks shored like that. Yeah, it sucked. Anyone can throw his voice if he just learns how to hold on. Yeah, but I was scared someone was going to tell Arizona to throw his voice out the wind and jump after it. You'll find out I can throw my boot as good as I can throw my voice, Bob. Hey, Tenderfoot, you're keeping awful quiet today. What's got into you? I'm all right, Bob. Yeah, Tenderfoot seemed like you didn't enjoy the shindig up at the house anymore than Rose and Alabama did. Well, speaking of Alabama, he's feeling mighty good today about something or other. Where'd he ride off to anyhow? Can't say as to that, but he sure was stepping mighty high, wasn't he? Say, Bob, did you say there was some stranger showed up at the barn dance that asked for Alabama? Yeah, never saw the feller before. Alabama was mighty excited for some reason or other. Well, he's been acting that way for a heck knows how long. Yeah, it ain't bothering me none. Tenderfoot, you better get that fiddle and see if you can get up a little pep. All right, what do you want? I'll lead off on something, Arizona. Say, you don't suppose he's gone over to Roaring River like you thought he was going to, do you? You mean to find out about that Dawson boy? No, I doubt that. Mr. Carter's dead sense against Alabama bringing the boy on the place, him being the son of an outlaw. Well, I wouldn't be surprised to see Alabama bringing the boy in here. Well, well, well, there's our old friend from the Chuck House. What's on your mind, Cookie? All right, Cookie. Alabama ain't here, Cookie. Don't know where he rode to. I was kind of thinking he might have rode over to Roaring River. No, they won't be in no condition to fight for some spell, Cookie. You tell Mr. Carter Alabama will be back before long. Yeah, the environments would have made a short work of you and that imitation of donkey. No, Mr. Man, you're wrong there. I took him out of his office. That gun ain't been shot since the war of 1812, has it, Cookie? This is him, man. This was Oliver.  He was shooting. See, I got one bullet in my office. See that one bullet there?  What are you going to do with just one bullet? I shoot them rustlers with that one bullet. You see, I wait till they all get in line like this and then I level down on them like this. Yeah, and then what? I pull the trigger like this. Oh, I'm shot. I'm shot. Arizona, are you hurt? No, he ain't hurt. Pick up your hat, Arizona. Hey, golly. That bullet went clean through Arizona's head. Yeah, and it took some of me with it. Oh, he's all right. Cookie, you be careful where you punch your gun after this. Take that blunder, boss, and hang it up on the wall. Yeah, that was Oliver went off. Boy, I still think I'm shot. Where do you want us to bury you, Arizona? Gosh, I never thought of that. Well, this might suit him. Hit me a chord, dear money. As I walked out in the streets of Laredo As I walked out in Laredo one day I spied a poor cowboy wrapped up in white linen Wrapped up in white linen and cold as a clay Old beat the drums slowly and play The fight slowly and play the dead march As you carry me along Take me to the green valley And lay the sard or me For I'm young cowboy And I know I've done wrong Let's sixteen gamblers Come handle my coffins Let's sixteen cowboys Come sing me a song Take me to the graveyard And lay the sard or me For I'm a poor cowboy And I know I've done wrong It was once in the saddle I used to go dazing It was once in the saddle I used to be gay First to the Dram House And then to the Cod House Got shot in the breast I am dying today Cove in a cup A cup of cold water To cool my march lifts A poor cowboy said Before I returned The spirit had left him And gone to his maker The cowboy was dead We beat the drums slowly And played by Floney And bitterly wept As we bore him along For we all loved our comrade So brave young and handsome We all loved our comrade Although he does How's that? Say, there's someone riding up With Alabama out in front. Yeah, who is that with Alabama? Hey, I've seen that stranger before. Sure, now I remember. That's a fella Alabama met at the barn dance. Well, see, they're getting off Out in front of the house there, aren't they? Hey, Alabama! Come out here and give us An account of yourself. I ain't golly, he's steppin' higher than ever. What's got into you now, Alabama? Howdy, boss. Who's your new friend, Alabama? Boys, I want some music. Now I want it fake. Wait a minute. I ain't answering no questions Until you play for me. What's the idea? Stop asking questions and play, will you? You see, what love has done for me Solo, solo to my heart Solo, solo to my heart Well, boys, your old pal, Alabama, Turned out to be a pretty good detective, after all.  Sit on some of this snoopin' That's been goin' on around here. Well, boys, here it is. That fella that just rode up to the house there Is Mr. Richard Nile. That ain't tellin' us nothin'. Who is he? What's he doin' out here? Well, hold your horses. I'm comin' to that. He's up there at the house right now on a mission That's gonna make Dad and Rose Carter mighty happy. Alabama, you can do more talkin' in circles Than a ball eagle. What's his business here? Mr. Niles is a representative Of a big oil company. And his business is To see that they begin drilling for oil On the Red Horse Ranch Just as soon as Dad Carter signs the lease. I'll be a cross-eyed Jack Rabbit. Drilling for oil on the Red Horse Ranch Than Alabama was right. Wave an idea no one's going to leave Alabama alone Till he explains how he made this important discovery. Be sure to listen.