I can post it on my community account, can't I? Because Discord won't record that. It should be fine. Anyways, I didn't do it last time. It's because I was worried that my window would be recorded live. I will also post it. The only problem is I don't know what to post. I haven't got a link to the video. Are you able to post a link to it? I mean, send me a link. Yeah, I think so. Already live, is it? Awesome. Let's see here. Let's put it in our chat and Discord. Okay. Of course Discord has to butcher the link. Of course it does. That's so wrong. Well, at least we're fapping about doing this stuff. People can show up. So prepared. We're professionals, man. Professionals. Yeah, absolutely. Is that you typing? Yeah. Awesome. Very subtle. Not like a big, loud, clanky keyboard. Unless you do have that and it's just really quiet for some reason. Well, it's a little clacky, but it's more thock-thock-funky. Because of the sound I like. Oh, look, E.B. is in the chat. It's shmog. Awesome. How are you saying it? I thought we were going to be screaming. Yeah. Hello, guys. Hi, guys. English Bob's going to giggle in the chat for a while. He always ends with giggles. Yeah. All right. So I've tweeted it out as well. How's the volume? Yeah. I forgot to ask that. Especially on Terminal 4 Life's end, he was loud last time. Yeah, like really. To the point at which it was distorting it a little bit, but it was just about hearable, though. Listenable, even. Hi, Joshua. This is awesome. I'm psyched for this. Hope now I'll be on the ball like I was last time. Last time, I swear, the stars are lined. We put you through your pages last time. It was big. Yeah. Apparently, nobody has anything to say about the audio. Yeah. Utter silence. Yeah.  Either that or not. Hearing us at all. True. That's true. God, I don't know. Well. Oh, well, that's an easy answer, Joshua. Watch this first and then watch my showy video. And I wasn't trashing it. Much. Much. That's good. I always get really conscious. It's really difficult doing a video. Have you seen it? One of the so-called trashing DT scripts. I got through about three-quarters of it before we started chatting. It's difficult. It's difficult making that sort of video because I don't want to insult the person who's writing it. But at the same time, to do it justice, I feel like you have to be kind of honest. Yeah. If anything, for educational reasons.  I know Brodie Robertson always talks about disagrees with him very often. Oh. I don't think it's anything new for him.  I don't either. Oh, by the way, is your server private TLC? Yes, it is. It's still private. So here's the thing with the Discord server. I don't know if I want to make it public. And that's not because I don't trust you guys, but it's the other people I don't trust. As the channel gets bigger, I would expect there to be more and more goals out there, and as small as Tyler's server is, he's already had problems with spam and stuff. So I'd be very worried that if I opened it up to everybody, I'd have to do moderating and stuff, and that just sounds way, way too much like work. Yeah, it's too hassle. It's the same reason I don't bother with it. So I've set it up. It gets set up for public, but I haven't invited anybody to it yet. And I don't know if I will. Maybe. I don't know. Ah, the IC. I waffle back and forth. Yeah, I probably won't set up a server just too much faff, too much kerfuffle. Can't be asked. Like, it's just like, you know, it'll be fun for a while there'll be like 10 people on there and we'll have a good time and then it will slowly start creeping up and there'll be that one guy that you just kind of hate, and hate you and it just causes problems. Yeah, it's definitely going to be Tyler, by the way. This he shows up. He knows I'm joking. This Bob's the right trouble maker.  Oh, good science. I watch his streams, but I always lurk. I don't get into the comments. Yeah, because it's fun. Just to watch trolls whistle. His videos are great.  I think he would happily admit that. And yes, I know he's in chat right now. That's why I'm saying all of this. All right. Well, what are you going to take us through today, TFO? You're in charge of the driver's seat this week. Oh, God. Why did I spring this on you? It's not like I told you. I did say I what was your quote from earlier saying our plan is to not have a plan. Oh, yeah. Pretty much. I haven't actually honestly looked to see what I could show you. I just I've got so much it wouldn't take long to find something like this. I don't know what people would really be interested in. By the way, guys and guys and gals, wherever you are in chat, can you let me know if my volume is inordinately loud like it was in the last stream that we did? If so, I will adjust something, I guess. I could look at CSI 3. It's not too big. That's what she said. Ha ha. Ha ha. Oh, good. Ha ha. I don't know. It was a bit of a joke because it just came out of nowhere. Ha ha. Those are the best ones.  Um, well, I'm actually almost glad that you put me in the so-called driver's seat because that gives me the opportunity to ask you if there's something that you're struggling with lately. I don't know what regex means. You used it the last time and I have no clue what it means. Well, for a start, it's regex. See, I don't even know how to say it, so there you go. Most people don't, most people will say regex because of regular expressions. I'm mostly mocking them. Some people just prefer to call it regex even if they know the difference, but the reason I say it's regex is because regular expressions. Um, so I have made a video going on a lot about regex. Uh, so I kind of feel like I just repeat myself. Okay, I'll watch those instead then. Okay. One thing that has been on my mind for ages and that is going over positional parameters with you. Okay. Um, I mean like passing arguments to a script kind of thing. Do you think that would be something you'd find useful? Yep, have at it. Okay. So I go to the whole test dur thing that I have.  Um, so... Do you even have one there that says called random crap? Awesome. Do I? I don't even know what that is.   Uh, so bash.  Um, okay, so... uh, echo... I'm going to echo the first positional parameter. So now when I run bash random crap, I could make it executable, but I don't know if I don't need to. I haven't given any argument to it, so it's not going to show anything. Echo, if it's not given a value as you know, we'll just echo an empty line. You probably know that. Uh, but if I give it a thing, then we'll see thing because one, uh, that dollar sign one thing has a value. So that's like a really simplified introduction type thing. Uh, so you've got one, two, three, uh, all the way up to nine, and I think in order to get ten and onwards, you have to use the braces. So you've got ten, eleven, and so on and so forth. So that's cool, I guess, if you want to access each individual one and you don't want to do anything particularly complicated. Um, but a lot of the times in programs you will want to do something more complicated. You will want to iterate over each of those. And then whatever you have thing, uh, equals thing or thing thing, like file, and then you've got the file name or you know, something like that, maybe in multiple parameters, file one, file two, file three or whatever, and then you've got another flag or something. Um, so it can get quite complicated. Uh, I'm just bothered that English Bob was asking a question before even reading it. I just swear this is probably going to be a troll question, but here we go. Question one for TFL. What is the best way to prompt for a yes, no confirmation? Whoa!  Wow. Okay. Um, so everything I just said about, uh, that I've been passing you with me so far. Yep. Okay. Uh, so have you done that kind of stuff before? Just recently on something, but I don't remember what it was.  So, um, yeah. Okay. That's good. So we'll have to do this stream a few times then. I don't remember anything we talked about last week. Nothing. I'm just, I'm just really depressing. I'm kidding. I'm kidding. I'm kidding. I was just going to say, wow, great teacher. Oh, yeah. Um, okay. So what's your name again? No, sir. What way you can pass multiple arguments is to, um, is to Oh my lord. Okay. Hey, you want to what? English Bob, not the only one that can be a troll, man. That's true. I'm in a stream with a troll right now. Yeah. That's what I was going to say. Yeah. That's great. Okay. Whatever stream we were in the other night, I don't know who we were watching, but you beat me to that too then. That was fun. Oh, so good. I think it was English Bob. It was somebody. I don't remember what it was. It was somebody. It's like somebody's stalking somebody else. Yeah. Okay. Well, since you're with me so far on that, before I move to the next bit, I might as well address what English Bob says, as he did put me in the driver's seat. And if you have any questions at any point, by the way, just feel free to stop me and ask. Don't hesitate but to ask. And that's directed at you, Matt. And anyone in the comment section as well. Okay. So regarding English Bob's question about how to prompt for a yes or no confirmation in a script, this should be pretty straightforward to do. So what I usually do in this particular case, if I want to have a really nice confirmation dialogue box, a box but a thing in a script, I would use a while loop. This would make it infinite. So that's an infinite while loop because remember this colon is synonymous with true. I just used the while, the colon because I'm super leap like that, I suppose. So while true and then do and now we can actually print our question. So print F, for example. Would you like to fart? I don't know. It's like some random thing that entered my mind for unknown reasons. What do you like to fart? And then you can say yes or no, so the user knows which characters they compress.  So rather than doing that, you can actually put the prompt in with read. So read is going to actually prompt the user because that locates P flag and the text after that actually being the prompt that the user sees. But the main purpose of read is just take from standard input to take something on standard input and store it for later use. So using bash, there's a default value of reply, all uppercase. Default variable, basically. So I don't have to say reply. I don't have to put anything here for like the variable in which to store the response because it's already there in bash. In born shell, this is not a thing. So, yeah. If you didn't press a return to enter this value, you might want to use this locase E flag just to say that because that will do something funky with whatever. Let's just move on from that because I can't be asked to explain that. But just keep that in mind. If you don't have to press enter to accept this, then you might have issues with that unless you use that E thing if you want to not have like this empty line or something. Anyway, yeah, that was really well explained. So let's continue and now what I usually like to do is have a simple case statement, case reply in so, you know, yes, I'm going to use a character class here, not a positive character class just a standard character class. So I'm saying match one of an uppercase Y or a lowcase Y, and then I'm going to use a pipe which is special for case statements. Remember, this has got pattern matching and this means all. So I think we talked about in that last three, actually. So Y or if the user is so if it desires to type that full thing out, they can do that. Then you just, you know, do something based on that. So let's just say you said reply and that thingy here with two semicolons and it's actually pointless to think about to use a case statement for this because you could just put that there on its own since I'm just printing out what they said, but whatever. So n, whoops, uppercase n or lowercase n uppercase n, lowercase n, uppercase r, o, or lowercase o, get rid of the s, and there we go. I guess let's make this not so pointless. You said yeah, just depends on what the user actually types, doesn't it? Okay, so now let's run this. I hate when that happens.  So would you like too far? Sure. You said why? So I would absolutely love to far, but notice how it's asking me again and again and again if I would like to far and I'm not that desperate to pass gas or to pass a wind. So I need to break out of this. So after every time I've said what I want to do, I've replied basically I need to break out and then do something accordingly. Obviously this is kind of a silly example but just imagine that I gave you a proper one. But the reason I use this loop is because I might say something dumb, I might say something else or I might have an empty response and I want to handle that accordingly. So I could say an error message here. I actually have a function just for error messages, so ignore what this function does and then unless you want to be curious about that, in which case I'll go over that in a minute. So I can say error, exit with an exit status basically don't exit because zero true so don't exit and then let's you know response required or some dumb thing like that and if that's no good then if they don't say something, if they don't not say something and they don't say no or yes or some variation thereof then maybe have another response to say maybe like invalid response I think I actually do use that sometimes and both of these they will, because we're in a while loop and we're not breaking out over here that means it will continue to ask you over and over again until you get it right so it's assuming I don't balls it up, where did I balls it up? balls it up somewhere, what have we done? oh yeah, okay so what do I like to fart? there we go error, invalid response, would you like to fart? response required, would you like to fart? no, I don't want to fart, there we go so that is a very decent little way of getting input from the user in a very nice and tidy and robust way with nice output provided you want to make a script all about asking if the user wants to fart so there you go an inordinately, there goes that word again long explanation for that question you had, Bob alright, somebody said I'm not getting tempted to say that name, you said your s is really high pitch and loud, oh my god so who you were talking about I don't know yeah, that sounds like the other video I don't know what your s are your s are really loud I was supposed to get that from a single letter I turned down the desktop volume a little bit so hopefully that fixed it because it was picking a little bit so hopefully that fixed it somebody asked why would you use awk and not a blob I don't know what that means so maybe you know what that means that was good, Bob why would you use awk and not a blob what there's no context there yeah that's like saying why would you eat a quiche or a cake, there's a sign of the fact that a cake might be nicer if you're in the mood for a cake versus a quiche, I don't know I probably should stop talking about freedom and be hungry but yeah, Bob I'm going to need some more context for that question okay so back to the original thing do you remember where I was you had just explained the basics of the I've already forgotten what it was called but I know what you were talking about okay cool that's been the name to stuff man yeah argument part and the other name you might be looking for was positional parameters positional parameters actually what I'm opening up VimWiki, I'm taking notes okay that's a good idea okay so I'm trying to think, okay so one thing you can do is use a for loop so I can say for arg and I could say for arg in every single parameter and then do it that way, I mean bash which is why I'm using those braces like that but fun fact I don't know if you know this but you can actually get rid of that how cool is that so this will actually iterate over every single one of the positional parameters a special thing for for loops I think that's really cool I was so happy when I first discovered that so that will iterate over each of the positional parameters but I'll only do it once and although we go over each one of them sequentially it's very simple basically so that's actually rather than escaping and setting some positional parameters doing it that way I'm just going to set the positional parameters right now within this script using the set built in so I can say set these are parameters okay I'll use a full things positional parameters so those are four positional parameters and it is as though I ran you know the script like script, the name of the script and then these are positional and so on it's as though I did that just want to get that out of the way so it just says we're quitting out and going back in over and over again which I'm going to have to do anyway too execute those damn things I can't use so now I can echo arg and let's run it actually I do have a thing for that don't I obviously you can do that there we go these are positional parameters I've used it so yes that's one way to iterate over them it can be good so let's say you have some kind of usage outputs, usage information for the program so maybe you have a case statement case arg in esac maybe the user types in version so let's set a version string and maybe that can be like the date that's usually the kind of version string I use so now when the user types in dash-version or v they can get the version of the program printed out so the version string there we go and then we need to x out because it's not an error and they you don't want to continue executing the rest of the program is pretend there's stuff that you just want to see the version string that's kind of the point of that they may also want to get some usage information like I said earlier so that can be help or lowercase h so very standard stuff there now usually for this I have a usage function which is this so I'm just going to grab that and plonk that here and now I've got this usage thing this is kind of a template if you like I usually just build on this add what I need but this is a worry lupin with a here dock we'll just pretend that's not there so now I can just have usage and then x is 0 and there you go now when I run it oops with version say we get the version string and also an error because because I screwed that up somehow don't know how much that they're good there's the version string but what about if the user wants the help stuff so they need to know how to use this program or there we go now they've got help so it makes that very simple so what if you have like file so let's say the user types in f or file and then the name of a file something like that so this is where we run into an issue I can say f or f the user types those things so if arg the current argument that the for loop is iterating over if that is equal to either this or this then we do something perhaps have a check to see if that file exists and is a file so let's say but this is where we run into an issue because how do we continue because what do we test because all we can really do is test with the current argument so we're screwed and this is what happened to me when I first got into this stuff and I was like down I am so screwed so what I did was eventually find out that the for loop wasn't ideal for this at all and this is a roundabout when I started or stopped using I started to stop using for loops for this purpose so now these days for a long years I actually use a while loop most of my programs ones which aren't using shell I will use a while loop so while the first positional parameter has a value so in this case the first positional parameters is going to be this help thing that's the first thing handed to the first argument the first field the first argument I said that you know what I mean and this n flag locates n flag is to mean not empty so while that value is not empty do this now if you remember from our last stream remember stop me if I'm confusing however from our last stream while loop is basically this while this condition remains true this condition this these commands will be executed repeatedly as fast as possible are you with me so far yep cool so if now we can actually continue with this thing properly so instead of case odd we say case one so in case if you like the first positional parameter which we know has a value is equal to these it's still going to work as intended and this will work as intended as well but now we can actually complete this so if the second probably going to break your brain a bit now because it did but for me back then if the second positional parameter is equal is a file if it if it exists and is a file let's say I'm going to negate this so if it is not because I want an error message so if it is not a file basically which exists then just error out and I'm going to have an exit status of one remember this is for my error function which I deleted because I'm an idiot okay let me put that back there we go it's for that error function so now I can say file not found typical kind of error message we've probably seen a million times I otherwise that's fine actually so there is actually I've read that's what I'm trying to do now so file is equal to that now I can handle file whenever I want so however this is still not going to work because what's going to happen right now let's say it's looking at the first positional parameter it's help okay so it's going to go through this the first positional parameter is help so it's not empty case is going to look at it and say it doesn't match this but it does match this so it will exit this so let's make it the file thing so let's say file is equal to my.bash rc so it sees the file it sees that this matches rather now we test if it exists and is a file the second positional parameter the second positional parameter in this case is this this is the first positional parameter this is the second one and you might be wondering what happens if you have something file so these are prams these are prams are actually invalid prams at least according to this if I have a check for it that is I know I'm jumping around a bit I do apologize so if it is not one of these then we can assume that that's an illegal parameter so let's have an error message here error with an exit status of one and say invalid argument provided one or more invalid argument provided should be right and then exit that there we go alright now we have a check so those will be invalid parameters or arguments or whatever you want to call them so it finds these it gets all the way down here it doesn't match it doesn't match these so it goes here and we get the error message even if these are valid we get say some random ones which I imagine there's a load of them here a load of other options and they are absolutely valid this should still work however this is not usually the way I do it which is it could be quite possible but this is actually not going to work because it's not usually how I do it so what I usually do is use it reminds me to shift should go down here I will explain shift in a second so shift I usually put here I guess before I explain why I'm using shift there I'll explain why I have shift here sorry if this is really fragmented by the way so let's say I have the arguments we've got the script and we've got an argument argument one, argument two, argument three now if I use this is the first position of parameters second is third, if I use shift this vanishes so the one on the far left vanishes argument two becomes argument one or position of parameter one and argument three becomes position of parameter two and if I shift again and so on and if I shift yet again we've run out of position of parameters in which case or at which point while loops condition is no longer valid so it breaks out of that loop so that is how I process position of parameters and how I'd recommend doing it if you're not using getOps which is a massive pain in the ass so now that I've explained that are you with me so far? yeah I think so what if they only so you put that shift in there but let's say they only give just the first parameter oh they just say file that's true, that's actually a really good point so what if the user doesn't provide something for the file that's exactly the kind of thing I would test for so we've got to test for if it's not found so let's have an LF and we'll test that second so what if if the second position parameter is empty then error one and then we can say something like file required imagine some error message if you're choosing file required I guess with suffice for for whatever position of parameter they picked that could work nicely there we go I think that will work nicely oh actually no I know what I usually choose argument one requires something I'm getting way too caught up in the details okay so that hopefully address that question so when I was saying that what I usually do is something else that's because I don't usually do it like this so what I usually do is say it's shift so remember that when I was talking about shift earlier it's like you know arg1, arg2 do you remember that mm-hmm well if I shift here this goes bye-bye so now instead of checking for two I just check for one and then one again and this file thing I don't have to make that file equals two or anything just one so before I shift what you can do is say the current arg just have some sort of thing here usually I'll have something like file arg so that I can keep track of the file arg to output to the user you know the actual argument they chose don't necessarily have to do this it's just a kind of quality of life thing so file arg equals one and then I have to do that before we shift otherwise we lose what argument they chose so then we shift so remembering what argument they actually picked then we're shifting to get rid of it and then we're looking at that so-called first positional parameter but it's not technically I mean I suppose it would be in this case because it is the first one I've chosen but let's ignore that and then we do all the testing and stuff and if it passes those tests and by the way I should point out at this point I would suggest not running actual commands because at this point we haven't done any dependency checking and it's usually after this when I would start looking for dependencies to make sure the user has programs that this thing might use so I would suggest not making any directories doing all that kind of stuff even though it's core utils you still probably might be good to just check that those executables are accessible just in case I'm not sure why they wouldn't be but maybe somebody's in a weird Gen 2 system and I don't know they've got some pretty weird stuff let me ask you a question what if it you've kind of explained it but I think my brain didn't quite pick it up let's say you have a script that has multiple positional parameters in it and you have this file thing going on and you've shifted so that first arg is gone what if file isn't actually well it's only going to shift if so that shift is only going to work if file is the one that they picked so what if it's like the third one instead of two oh so like what if they picked some other imagine this is totally a valid flag what if they picked that and that did its thing and that's all very one and wonderful then they chose file well the same applies it will do the exact same thing but remember this will be the first positional parameter let's actually I'll show let's have a thing called flag and we'll do this here flag and if the user chooses that flag just I'll use echo so echo flag we'll just spit it out for the user there we go so what if they do that well when it looks at the first positional parameter and it sees flag the wall loop is going to basically see that it's not valid here it's not valid here, not valid here but it will say oh this is valid and then it will echo it out but then it will go to the next positional parameter but it's shifting at the end I probably didn't emphasise this enough because it was an afterthought, I forgot about shift so this shift at the end after every single time it processes one of these it's shifting at the end of this wall loop so once it's done with flag the first positional parameter once again becomes the next parameter that the user actually gave which is file and then everything I said earlier still applies it will still work fine yeah it's just the magic is quite largely down to the shifting a lot of this really just comes down to the wall read loop, some kind of way of testing like in this statement or a case statement and then shifting at the end you have to shift at the end otherwise it won't work okay, yeah I got that, that's good so I have a totally stupid question it has very little to do with anything you just said okay and you may not even know the answer but my question is why do they reverse the end so like you have case and then you have case reverse you have if you have if in reverse why is it that way cause like in other programming language when you have an if statement you just have and if or something like that I'm just wondering why is this way you have to ask the developers really of the shell I imagine it's just so that you can look at it and easily see well that's the end of it because it's a reverse the opposite end maybe I don't know I said it wasn't a silly question it was just I've always wondered it seems weird a lot of these syntactical things are totally different in the language I don't know what you mean and vim scripts is if and an end if in Perl you've got if then the condition and you use braces for that and then oh yeah if I'm correctly you've got Python which is just if I remember what the condition syntax is like but there's no semicolon there's not even like then or anything like that you just have if something for the condition and then I think that's it there's no thing to end it because it's all with tabs isn't it quite interesting like that Haskell has a whole bunch of like question marks and dollar signs and stuff that mean different things it's weird it is it's bad Haskell is not for me uh Joshua Lee wants to know when you're going to switch to Emacs I'm just I value I value the muscles in my fingers I think we've lost the chat it's pretty much they went on for about five minutes just talking about your fart script uh emotionally that was English Bob of course yeah of course it would be uh schmog schmoy whatever his name is however you say that once parameters are explained maybe you guys could also explain functions since they're connected yeah sure I mean I mentioned this in the last stream but I can go on about functions again might as well um are you okay with all this is have I do you have any any questions I think I I understand that um one of these days I'm going to go through and ask you the different checks that you can run because they're like the n and then you have if it's a directory which is d right and then yeah f is file right yeah okay so I know three of them there's a whole bunch of those checks right yeah so basically uh just talk about test really I could I could do that after we um I've answered whatever this other question was if you like sure okay uh so let's get rid of all this guffin gubbins we don't need any nonsense do we mention nonsense right what was the question to the other person's functions functions that's right so you can either write a function function which is I believe a keyword then the name of the function which is a shell's idea of word and it cannot start with a digit by the way I think I forgot to mention that in last stream um and you can option have braces here sorry parentheses but you actually don't need them when you are using a function keyword uh and then you've just got your simple open and closing braces so this is how you declare a function and then you can say echo hi and then when I type in function let's say I'm on the command line right now and I type in uh what I type in word or then we'll get we'll get high so that's what happened about you executed this I suppose I could just run it can I set save word um oh there we go I forgot to save okay so yeah echoes hi uh that's one way of declaring a function the other way which I usually use because it's quicker is that um and I quite like spacing that out as well but that's totally optional it's just a stylistic thing so if I save this and execute it we still see hi it's working just fine uh so it's up to you how you want to do that just remember you can't start it with a word sorry a number because that's invalid um there are some other things to watch I can't remember I don't I can't remember I think there's a rule where you can't have a hyphen yeah oh word not found okay let's try that I can't remember oh you can get away with that I think get away with I know you can get away with underscores I guess you can get away with hyphens um it's actually possible to make a function which is just a colon which is part of what you might have seen before uh which is a fork bomb just I can't remember how it works something like that I don't know it's it's something weird have you ever heard of a fork bomb no uh it's kind of a cheeky little malicious thing to run it just constantly spawns loads of new processes over and over again eats up your ram until your system crashes I think there's actually thing is in place now to prevent this being a problem but back into there it used to be a problem it's kind of cool though it basically you create a function to put it in a less obfuscated way you've got uh say where a funk as in like the function the name of the function is funk um and that's uh equal to funk or rather that's going to that's going to run itself basically and we're going to use this job thing here to put that in the background and well then you just you just run it you run funk so funk will constantly execute itself and I think there's something else as well you're meant to like do something else maybe it's like funk funk again I can't remember but uh yeah it's it's kind of dumb but anyway it's so fun in fact for you there that you can use a colon I don't recommend using a colon because then you can't use that for true so yeah the general gist is though you've got like word and then you put whatever the commands you want in it and the good thing about a function is though um we talked about argument passing earlier so you can actually a lot of that if not all of it can actually be uh done with a function which is really cool um so you can actually have really allowed like flags and stuff for your little functions that you set for your bash environment which is pretty cool all yours ever such environment I think I pretty much done with functions yeah I you talked about them last time so um so how long until I install the max uh forever so here's a question for you and this has little to do with bash itself because you can use it in zsh but a lot of times in like bash rcs you see both aliases and functions but an alias just I'm gonna see if I got this right so an alias just is like uh a shortcut to something else right but where a function can actually like run a script or something right um kind of an alias can actually run codes as well like it runs actual code um so the main difference I think with an alias and a function aside from the fact that a function is actually a programming thing concept I guess you say um and so can do a ton more uh but an alias is actually expanded I believe it's expanded just before it's executed now I know last time you had an issue with expanding you were looking at it from an english point of view it's not to make bigger in this context it's to expand to a given variable uh value sorry so if we have an alias ls is equal to ls and color auto or whatever it is um what happens is the shell will look at ls so it'll be like oh and keeping in mind this is before it's executed it oh this is equal to ls color auto so it'll immediately expand to that then it will execute it whereas a function it literally will execute a function called func for example and then do the commands within that function there's no expansion going on as far as I know okay yeah I think I knew that it's just sometimes get confused Josh really asks um he'd like to get the time of day and change the gtk theme in a script uh so you can use something like gs settings to change the the gtk theme from the command line I think so you could probably do something with with that yeah I've done that before g settings um let's see okay so really cool little program actually I vaguely remember talking about this in one of my shell notes videos you're the one that I got it from cool so you can do g settings uh list schemers so you've got schemers uh are you at all familiar with the concept of associative arrays no yeah I thought that might be a little bit like I know the declare arrays in like a D menu script but I don't know really how they work I don't know if they're the same thing so what about if I said key value no does that mean anything okay what key value is basically key equals it's super super basic like that really just it's just a key which is equal to something kind of like how you have a folder in a drawer type thing and that folder is called something and then inside that folder you've got the value pieces of paper or whatever how is it different from a variable the reason I said that is because an associative array which is a form of a type of variable um is basically just a set of key values a regular array is just a set of values but an associative array is a load of key values okay you're confused aren't you a little okay I think I'll get there okay some more context so the reason I brought up all that stuff is because the schemers are basically a key and the values are what they call keys which is really confusing to me so this is at least how I see it so if I say uh I don't know I'm trying to remember this it's not often I use this so list keys for org uh dot desktop dot privacy dot sound so these are the keys in oh yeah there are keys in that context yeah it's kind of really complicated but basically you've got the type of settings as a category and then in that category you've got a load of key values themselves this is so bad it's really complicated it's really good and registry in windows actually works a very similar way this is just better so if I wanted to uh show the value for something specific I can't really do it I think it's just something like theme name by default it should output okay apparently not get that's it so by default if you want to get something just use a get thing so get in the schema the key theme name so I think maybe I shouldn't have started off calling these schemas keys because if you're not familiar with associative rays or nested associative rays that's going to just be really confusing multi-dimensional that's the word I was looking for multi-dimensional associative rays why was I bringing that up in this video wow anyway um so that would be how you'd want to get that so that's how you could get for example the theme name um if you wanted to do that but obviously you want to set that's what how we got to this in the first place so you just do set and then the theme name and I'm I can't remember how it's done I think it's theme name equals and then something so I could say name maybe it's not that then maybe it's space and yep okay um so now if I get that once again it's name so now I really really want to set that back to what it was because I don't know what the heck that is and then if I get it again it's back to free desktop so that's how you can get and set and there it is somewhere a value for the GTK but maybe I'll find it uh oh GTK settings okay um well it is somewhere what you can do is this is what list recursively well list all of them and then I can just grep for uh I know case and sensitively GTK uh theme or something let me just do another grep for theme I'm not too bothered about being efficient or whatever when I'm just on the command line um so GTK there we go so this is the schema this is the key and this is the value for that scheme that key um so if I wanted to change from Adwaita which is what I'm currently using which I'm sure you're so happy about so if I can I can set uh org.nome oh crap let's run that other thing again because it's it's gone and vanished it okay whatever you can probably tell where I was going with that it's the get set and then the key that I just found and have it lost now unless I scroll all the way up uh so that's that's kind of the gist of how you would handle that and then it would just be to finish this question to get the time of the day you just use something like uh oh yeah it's just date right yeah yeah and then you can just then you could just create uh like an if statement or something or or a while loop to uh change the GTK theme based on what time the output date is right oh I know yeah that would actually be really cool yeah it's cool that's a good idea I suppose I didn't think about that in a long time ago because that would have been really useful um what are you going to say no go ahead okay uh printf itself as as as you can see here actually can show the time and date and basically anything you hand to a date command so if you do date and then like class f oh yes that isn't it uh then we'll see the same thing well printf is a built-in it's built into the shell so there's no need to really use the date command the date command is really useful but most of the time people can just use printf command sorry to printf built in but uh that is for bash uh born shell or a derivative obviously uh doesn't support this date to stringf time type stuff I say stringf time for people who are familiar with that in other languages such as all pearl python and so on okay uh I'm going to butcher this person's name milkyus something like that I'm sorry I'm going to I'm just going to say someone ask can you give the advantages of learning bash scripting to a very advanced extent I know bash enough to basically create any dirty little script but is there an advantage to learning more hmm so essentially uh what is the advantages of learning of spending years and years and years obsessing over bash and all its uh nuances like I've done uh it's not just you can write more more efficiently it makes debugging much much easier because if you understand how all of these moving parts work it's so much easier to fix things you can get involved in the development of other people's things for example I'm right here helping you guys learn and that's cool so if you would enjoy this kind of stuff then you too can do the kind of things that we're doing um but as far as like having your own scripts and stuff it just makes sure that you type these things out efficiently uh and you know actually I said type out what I meant was uh you can actually develop I guess this stuff efficiently but as far as literally typing this stuff out you don't want to spend too long typing out you know stuff that's just going to take you forever versus the more efficient type out approach so not only are you going to write more efficient code but you're going to be more efficient at writing more efficient code um so there's all sorts of reasons like that why I would say it's worth learning more advanced bash usages um you can learn a lot of shortcuts if you like um just like any language there are shortcuts some of the most languages I imagine there are shortcuts ways to do things more efficiently uh whether it's like whether it's regarding code execution or the time it takes for you to type stuff out but I can't stress enough how helpful it is to have this like this amount of knowledge um when it comes to debugging I can just look at a script and it's not working it doesn't take me too long to figure out unless it's just something dumb like there was this thing a while ago with uh Zany he was or Tyler he was um he was working he was working on something a really simple shells go so simple and we were both looking at it like what why is this not working like it was embarrassing honestly I should have known but yeah it turned out to be something simple but generally speaking you should be a lot better at debugging we can talk about debugging if you want a little bit you say oh yeah sure yeah that keeps coming up actually now I think about it um so let's uh okay where do I start with this it's a tricky one to just swing right into uh when you're debugging scripts or shell programs or whatever uh one thing you can do is take use of the set built in to do like set lowcase e lowcase e is really cool um as I understand it something the last uh let's say you have a pipe or a list of things piped you know pipe one thing to the next thing um the very last one if that exits with a non-zero exit status the shell script will exit with that processes exit status or that that things exit status um so that e can be really good it will stop the code it will stop the proceeding code from executing if something exits it can be really helpful to avoid a bunch of issues um there's also set you uh this is really cool if you have a variable which has been unset but is called for uh then I believe it will exit out or at the very least it will tell you I don't know if it exits out I can't remember at least it will tell you what the variable is but it doesn't it's not set or unassigned or whatever words it chooses to use um another one is something that I was I mentioned in or it was basically Derek used it in his uh scripts which I looked at in my last video so uh this one called pipe fail so if you remember I said about this and how the last thing in the pipe list of pipes if you have echo echo echo I'm not sure if you can do this of course but only this echo here uh only its exit status will be used and it will only the shell script will only exit if this one has a non-zero exit status uh but what if this second one fails well that's where pipe fail comes in uh because any one of these if any one of these has a non-zero exit status then the shell script will exit presumably with that process is exit status and you do set with whatever flag you're going to use at the beginning of the script or well um what you can do let me where am I um uh let's see mplay because for reasons so right here I've got this bash thing and let's say I want to because this is supported in bash I'm not using use of environment bash actually but uh I can put an e here right in the shabang um but you can't if you're using environment so if you're doing that you can't go ahead and do this because that's just not how environment works um but if you are using bin bash or wherever the path is to your whichever shell you're using uh then you can use e and you and all that kind of stuff if they are available in that shell uh or you can if you don't put it there you can put it this is really really really cool by the way for debugging let's say you've got a certain little snippet of code which is playing up let's say my error function is playing up all I have to do is put in uh x here I mean you can put in the e and u and all that other stuff but I want to take this opportunity to show you x which is amazing so I can enable it with minus even though you'd think that would be too disabled but it's the other way around for some reason so uh set plus x so what that does is here uh between those two sets uh debugging will be enabled or I don't really know how to it's like a certain kind of it will show you all the output um so it's actually exit the bottom there so I don't actually run this and or the rest of it at least and now let's run bash mplay um interesting why didn't that work maybe I do have that wrong wrong way round pretty sure I don't but okay well it's supposed to work oh because I've not actually called for that function have I okay there we go so that's the kind of output you would expect to see so if I wanted to know why that wasn't working well that's because unary operated expect which is actually uh it would show that regardless of the set x thing so let's have one or zero even so we don't muddy the exit status uh so now we can actually see what it's doing line by line so we can see that it's uh we're using an error function and we can see this is the message we've given we've got print f here because this is part of the function now it's a shame it doesn't show you what the bit this is in a function or something but that's it's enough to get you going to get you figuring out what's going on um and you got error and this is actually a variable but it's showing you what that variable is what's stored in that variable so I believe this is yeah sort of um so basically this this x x thing will show you what variables actually are it doesn't show you the name of the variable which kind of sucks it just shows you what that variable variables value actually is can be really useful if you want to figure out what the heck a variable actually is um but it's cool as that is especially for these tests although you do have to try to figure out the syntax a little because it's kind of ugly with these quotes and stuff but it's cool as that is there's another thing I like to do uh because honestly that set x thing I don't really tend to use it um it can be useful you know for example let's say you've distributed distributed a program a shell program to somebody to people whatever and somebody has an issue well they can just you know do the whole you give them a command that uses the x debugging thing and then they send you that output and then you can look through it and see what happened and all that stuff um but one thing you can do is I guess uh I probably just have to check that out so what you can do is echo stuff so there's really you need to know the power of echo or the power of echo it is a phenomenal let's say you are doing some really complicated stuff let's go to something complicated uh let's go to autoexec it's a little bit more complicated at least um and we've got loads hopefully loads of uh statements and stuff let's say I'm having an issue with these tests for whatever reason uh what I can actually do is echo something here which I usually actually do at the very start the line just so it stands out so I can say echo some gibberish something that I know that I will recognize and then when I exit the program I'll know that the code made it to this if statement and I'll know that this condition is true so something is not happening as it should or is happening but not quite in the way I want um at least I will know that it made it to this if statement I don't know if that will sound particularly useful right now but I promise you that is phenomenally useful it's saved for my bacon so many times just being able to know where what that it's reached an if statement or a loop or something um you can use it's like know when you've bailed out of the loop or if you've even bailed out of the loop or whatever I don't know you can use it for all sorts of reasons and then there's of course echoing what variables are so let's say we run signal handle handler and we want to know what uh once it is equal to or that's probably not very much used but just imagine there's a variable and then there's some use to actually echo it so echo force I want to know what force is before we get to this statement uh for whatever reason it is dumb uh well now I can know because when I run this function which is a signal handler function so uh yeah I guess to talk about that I have to make sense of trap and uh let's not get carried away with the details uh basically you can use echo in this way to echo the result or to echo the value of variables to echo variables basically and this can be great because a lot of the times when you have errors when you have something not working common ones is that the variable isn't what you think it is it's either empty because you type over damn name like a dumb ass I've done so many times um or uh just for whatever reason that variable is not what you think it is um so that's why it's important to echo that variable I can't tell you how many times ages trying to figure out why something's not working only to find out it was the bloody variable um so that's why I got into habit of using echo quite really okay two things one Dirichlet we know that tfl's turn in is fading out a little bit we can't do anything about that it's going to be the internet problem um no it's not happening a lot just we're missing some words it's coming through on my into the other thing can you know what happens yeah what is the dash z test I noticed it in auto exactly we we oh that that's empty oh if it's if it's empty so yeah so you got that for if it's not empty but uh that is if it is empty okay so uh obviously is not empty so that's not we'll echo true because user is not empty but if I do this my username actually has a value so it's not empty sorry yeah what are those called so like because there has to be like a list of those somewhere where I could see those right uh yeah the bashman uh bashman page I can't remember what there's those I mean I usually just call I don't even call it I don't even think these flags I mean aside from flags I don't know what you can call them but they are here somewhere um I know one of them is file so let's just look for that this is usually what I do honestly because I can't remember this quite in extensive there we go uh so is that yeah that's fine use functional tuning so many different versions of file it's it's somewhere in there you'd have to go through it a while I might have skipped part there we go good lord okay so the section for that is conditional expression so just open up your man page type before then type in conditional expressions uh if you're at the start of the man page or something and then jump straight to this section and then you'll see our whole list of them okay cool I'll definitely take a look at that because I'm just very slowly getting learning those those are really cool oh yeah amazing the useful I don't use too many of them honestly but you know file directory if it exists so the e1 b can be quite useful sometimes t can be quite useful if you're looking to match whether something is a terminal that's it's pretty much it really I don't tend to use a lot of them except for the z and the n thing of these kinds those particular kinds I think they're called file testing operators or flags or something this stuff something like that okay what is it what is it some people in chat might know where that's from does anybody have any more questions for TFL I'm sure he has answers he has all the answers I'm sure he has answers that's where you're wrong my friend you can also replace the brace with parentheses to run a function in a sub-shell oh I think I know what they're on about like funk echo hi is that what they mean because that's not valid not valid anyway there we go funk oh wait that's to put the function the sub-shell is it I vaguely remember coming across that years ago but apparently that's a thing so a good job for bringing that up that's cool I would stick the braces though because in just in case that does open up a sub-shell because you probably don't want to be opening up a sub-shell I think it probably would open up a sub-shell because I can see when that might be useful such as if you're cd-ing or something that's cool actually let's see here I should have made that coffee do you want to go for about another 20 minutes and we could just BS on some Linux stuff so are you still using elementary os or are you back on just your regular boom 2 install you mean you can't help well you can use your i3 or whatever on elementary os you could easily install it I'm such an idiot I just switched to one of my workspaces and opened up a crap-time terminal with all the gaps and stuff just to show you were like hey see I'm on i3 but I'm only recording my terminal I stopped using elementary os a little while back because the only reason I really restored the backup again the main reason was to get games running but then I had issues with the Nvidia drivers so I just couldn't be asked with it in the end though I think I'm done digging about with elementary os to be honest at least for a while and you're still planning on sticking with 1804 until end of life yeah definitely yeah I wish I just got done with that Debian review and man some of the packages even though they just had an update some of the packages are just still really old oh yeah so like that pearl youtube subscriber account thing that you wrote me that won't work in Debian because it doesn't have the proper version of pearl the weather python script that I have that I'll just I'll put the temperature won't run because it doesn't have the proper version of python installed yeah so and that's like a brand new version of Debian so that was I mean that was a really big turn off for me in terms of Debian because you know you have to change to the back ports or whatever it's called in order to get that kind of stuff and like then you just should just use the unstable version of Debian to begin with I can't remember if I still have that pearl program digging that script because I was thinking you could probably force it to work by just ignoring the check for the right version because it probably would still work it until the last three lines or something oh ok and then it had an error or something it said version error and then the last three lines it echoed the last three lines for whatever reason it was really weird it works fine at Arched worked fine in Ubuntu it worked fine on something else that I was using on because I put that on all my computers it reminds me on the Linux main support problem is what common questions I see or common threads is just like the topic of the thread that they're making it tends to be about like new Python versions and not pretty much just Python versions everyone wants to install new Python versions and then they wonder why their system is broken because they used PPAs and stuff yeah so my biggest problem with Debian outside of the older software ended up being lack of some software in the repositories because like Discord's not there in the regular repositories now you can install, you can get to in some other repository that you have to add but I wasn't doing any of that stuff so I ended up having to use a snap and we all know my hatred of snap, I'll think snaps that ended up being a pain just a golf on a complete tangent, the snap version of Discord is old and that version of Discord has a bug in it where any notifications that come through freeze the application for at least two minutes and it's just the dumbest thing ever, I don't know it has something to do with the interaction between that and whatever notification system you're using because it happened in Firefox for a little while too so maybe it's just the I don't know what files I think it was Dunst that was running but I can't even really remember why didn't you get it from the Discord website that's where I downloaded it well see it has the dev package and I tried to just install the dev package I was like dependencies for whatever reason it just wouldn't install I don't know I need to tell you there's something because this is a lot of people get caught out by this if I install that I also it fails but it's not really failing it's just informing you that there are missing dependencies but one command will sort that really easily done that will go out and install any missing dependencies it will try to resolve dependency issues and if it can't resolve it it will just uninstall it just basically won't install what you're trying to install I got to that point too and ran that exact command and it just uninstalled Discord okay in that case yeah I guess whatever was yeah it probably would work fine in Ubuntu because it has those dependencies to install but I'm assuming that the version numbers in Debian are wrong for that particular dev package so they couldn't install them and satisfy the test or whatever it was going for yeah probably yeah so it was apparently to the next long-term review I'm going to be a pull-up right now and the the one that's winning right now is Artix Linux and that's basically Arch without SystemD of course man I was really hoping yeah I was really hoping OpenSUSA would win really hoping OpenSUSA because I know I can use OpenSUSA I've used it many times in the past the one time I tried to install Artix I was a complete failure at so I don't know apparently it's just like installing Arch but I didn't find that to be my experience so we'll see how that goes you know it's your channel you can just say screw the poll in just go with the second I will go with the second choice I will try Artix to install I will try but I'm not going I'm not going to put a lot of effort into it if it fails one time I'm done that's kind of how I want this when I put up a poll to say what should I switch to next so I had Fedora KDE in one I tried it it failed it wouldn't even get to the installer properly so I was like okay screw this so I tried the second place one which was Fedora KDE I think yeah so it's a good chance that it's going to end up being OpenSUSA that I go to next it'll be interesting because I've never installed a window manager on OpenSUSA before I'm assuming they have things like in their repos but I don't know how well like something like DWM would install because DWM has some interesting dependencies like in Ubuntu they have some excellent dependencies that you have to install on the side that you don't have to do an Arch so it'll be interesting to see one of these days I'll switch to Arch one of these days probably about the same time probably about the same time I installed Gen2 most likely most likely not that I'm going to be enjoying Gen2 anytime soon Tyler gets to pick our next challenge for the podcast we should talk him into choosing we all have to install the one distro we never we said we'd never install so you'll install Arch I'll do Gen2 and Tyler will have to do Debian but he can't he can't Google the ISO he has to find it through the website why am I being roped into this oh, didn't you know I'm not installing Arch nah maybe in a virtual machine I've actually thought about doing that in a virtual machine in just like live streaming installing Arch it's been so long since I've done it it'll probably be quite hilarious to watch me so the thing is so I've installed vanilla Arch the true way you go through the terminal all the commands and stuff like that and I've done it I got my user participation badge that you get when you install Arch but once you have that there's no sense in installing Arch that way there are several scripts out there that will install Arch for you it's just you go and change your settings in the config file and run that script and it does it for you I actually started writing one of those that's the lazy man's way of installing Arch and that's the way I'll always install vanilla Arch I think it's called the Arch Linux install script I think it's exactly what it's called and it's regularly maintained and that's what you do it's so simple even the people who are developing Arch know that their installer is terrible because they've gone through and actually created now a guided installer that's included on every ISO it's terrible but it's there it doesn't work great at least the last time I saw a video on it it was kind of buggy but that's something that they'll fix over time and it wouldn't surprise me if eventually that becomes the default way of installing Arch and that's a guided installer for Arch Linux apparently we should all try Linux from scratch no we're more likely to install Gintu yeah that's so true like I looked at the document I was actually gonna really get stuck in scratch but no no no no no no and also no just no no too much time too much buff Arch installation is also easy I didn't say it was hard I just said it was pointless when there are other easier ways to do it installing Arch more the thing is everybody who has installed Arch seems like there's some Linux God they've accomplished something that is noteworthy as a lot of people say installing Arch is actually fairly easy the hardest part I always found was connecting to Wi-Fi and even that after you learn how to do it is perfectly fine especially with this new way it used to be harder but it's not an achievement really it's just it doesn't make you a lead hacker just because you installed Arch because it happens to have a terminal installer I mean it's just so it's so so I've never understood the feeling of entitlement the Arch people get I'm gonna be wrong I'm an Arch I like they you are I'm a member of that community but I don't understand the feelings of superiority they seem to get just because they happen to know how to type a few terminal commands I use Arch by the way right just because you don't use the Calamari or the ubiquity installer doesn't mean you're you know sometimes somehow better than those people who do I mean there's nothing wrong with a graphical installer anyone can follow a guide that tells you what commands to run when the way I did it was to actually I didn't just follow the guide I learned all the commands I was using because that's how I work I learned what I'm using so I know what the heck I'm actually doing it sits in my memory for longer that way and I actually learned a lot of information a lot of stuff that I can use or that I have used in Ubuntu which is under other distributions which is really cool such as time date control could also that yep yeah I don't add load keys you have to change the keyboard yep yeah that's the only in that Arch Linux script that I was talking about that's the only command you have to actually run on the command line for your work because they and even then I don't I think it's still work fine because it defaults to us or whatever yeah it's great for you well I mean you got to remember the United States is the only country that exists me man I'm an American bro yeah thanks every single American oh that was a well placed yee-haw because Americans are all southerners going yee-haw well I mean I don't want to be like you British people have that really weird enter key I mean why would I want that we've got a weird enter key you guys don't use the ISO maybe that's Europe um we do have an enter key we've actually got a return there are two enters you know back in the day the enter key that's the biggest one is actually that used to be called the return key but then they changed it on keyboards so on your keyboard the return key or whatever the enter key is not shaped like an L like an upside down L no it is shaped like an upside down L yeah that's not the way it is here ours is just a straight line that's actually that's actually a different keyboard layout that's the reason why it's so hard because there's like a ton of like linux manufacturer linux laptop manufacturers that are based over in Europe and Great Britain and stuff and they make some really good hardware and actually not really all that expensive but none of them offer ANC keyboard layouts they all offer that weird ass keyboard layout with the thing it makes the shift key the left shift key smaller than it is on ours and it's also oh yeah my shift key is tiny I've gotten used to it but I prefer the bigger shift key one thing I really hate about the American layout is where the pipe is like I use pipe religiously of course in programming and on the command line for shell and stuff obviously and yeah I mean the pipe is just so easy for me it's just a left pinky on the shift key and then ring finger on the pipe and that's it yeah it would be a lot harder on ours because it's further to the left right yeah right left basically the same direction oh yeah totally tfo why do you use linux and not windows all you do is terminal you've just answered the question that's definitely that was an English bob question if I ever heard one I know I know I was reading it as well the typical classic English bluff and of course Peter popped in says is this to gentu installation no never has hell frozen over if not then no like I have a patreon goal people I want all your money before I do do I know a famous unix quote the famous unix I guess not or unless the quote is right on a pipe and no one to read it there's going to be a that's gonna be like the start of a joke or something okay I'll take your word for it the linux from scratch live stream when I doubt it ever happening I just yeah I don't know the thing is you hear people talk I mean at least with the gentu stuff you know there are people out there running it like you see other youtubers that run gentu I've never seen a single youtuber that I've ever followed actually running linux from scratch have you I don't think I have either it's nobody does it I mean you have people here saying well linux from scratch linux from scratch impromptu poll anybody in the chat right now actually running linux from scratch I doubt it in fact I can always guarantee it like I don't think there is I'm surprised that project is even still is that project even still maintained pretty sure it's still going it's probably always going to be going I mean I'm pretty sure there are distributions out there that actually use tfo they use linux from scratch yeah well their website their website is very much very minimal nice there is one thing I really want to do which I scratched the surface a little bit ages ago and it went okay I just couldn't figure out what to do next because I can't find any guides on it or anything and there's no documentation but what I would like to do is boot strappy bunto you know how when you're installing arch the arch way you basically install arch from within arch I want to install a bunto from within a bunto and there's actually a special tgz file an archive just for that reason I think it's called a bunto bootstrap or something like that and it's pretty cool you just extract it and then install it from there but I couldn't figure out I mean aside from installing it that way sure I could do stuff in there but there was something that tripped me up ages ago I don't know what the heck it was I never got anywhere after that so it would be really cool to do that yeah this sound interesting I love the idea of just installing a distribution from distribution because now I kind of want to just go into a distribution and install a distribution from that distribution then go into that distribution distribution section basically that would be awesome how deep can you go the mods of the arch discord use lfs hmm so interesting lfs I don't know who that is I wonder if arch linux was actually like it came from linux from scratch if they used that and built went from there basically I don't know is there anyone in chat using a weird district called arch never heard of it sounds crap it's inspired by crux never heard of that am I still cutting out by the way you were a few minutes ago but it wasn't too bad it was just like a word every 20 words or so okay you're probably being censored by the man most likely will there ever be a collab with the linux experiment at some point I don't know probably not I don't think he's ever done a collab with anybody honestly although I think he's been on a podcast with uh linux for everyone I think this the guy from Forbes so it's possible that he does it just with big youtubers he does follow me on twitter he does subscribe to the channel I believe but I don't think he does collab with just anybody hey we're not just anybody we're part of the crew I'll have you know we got our own little like we have our own linux youtuber community just you know we're the little guys yeah doing our thing yeah we don't need a million subscribers we'd like us a million subscribers but yeah we would like I'm very happy with what we have I don't want to agree I think this Bob said arches for noobs just coming out there well I do say I'm an eternal linux noob so and I use an arch based so I got a lot of I got a lot of shit for using arch based if you're not vanilla arch but I can't help it that's what I like to do I like art go better if for no other reason that it will allow OBS to actually capture discord without me being on the same workspace I've seen similar sort of slanderous type comments from people who uh original Ubuntu or like you you use like linux min or whatever else which is based on Ubuntu and then people get at you for not using just plain Ubuntu well I guess it's pretty much everywhere if that's such a crime then we'd all have to go through and we'd all have to either use Debian or uh arch or something like solis fedora we can't use fedora we'd have to use red hat we'd have to use red hat so there'd be like four distros that's all there'd be if we had to use some other ship yeah so it's kind of dumb for people to piss and moan about that stuff I mean what what I've been saying is great is the choice right is the selection of freedom to choose and do what we want and create what we want it's kind of well to me at least is part of what makes it so amazing yeah I mean I totally just like arbitrarily say oh you can't use that you have this I mean sometimes the derivatives are just better than the the original I mean look at look at Debian I mean a lot of the the Debian derivatives are just better than Debian I mean there's nothing wrong with Debian it's just you have to put more work into it like if Ubuntu's miles and away more user new user friendly than Debian ever will be I agree and that's the same reason why Linux Minix is right it's like they didn't care for Unity so they decided to go create Cinnamon and decided to create a distribution around it yeah now look at Linux Minix it's pretty cool so I mean that's the reason why these derivatives exist and a lot of times they you know have good ideas sometimes they piss me off but yeah for the most part it's it's a good thing for the most part you talked about this in one of your videos how you can't force developers to focus on things in order to reduce duplication of effort and while duplication of effort definitely does piss me off it's still a good thing that developers can pretty much work on whatever they want to work on this isn't Microsoft where they you know have to do whatever the guy at the top says they have to do yeah exactly I'm pretty pissed off with Canonical because they seem to have abandoned the whole mini.iso thing which is why I'm not on 20.04 what whichever one what what would you I'm not an Ubuntu guy so why couldn't you install the like Ubuntu server and just turn that into your desktop thing because you can install all the same packages and stuff but that's headless I probably could but why release Ubuntu server and me.iso they are not different and then if they are different well I don't want a server I'm not trying to create a server I don't know what it sets by default in that server environment it could set a whole bunch of server related stuff that I don't want to use I simply don't know what but actually they haven't defined what that makes it the server environment it's just going to be missing it's going to be missing packages it's going to be the end of the day probably things that would well not just that I don't know they could be setting kernel parameters configuring at that point so many things rather than just packages there's a whole lot of other aspects too I'm sure somebody has gone through and I mean they're almost it's weird that somebody hasn't come up that's weird especially as debbing has many dies so they've had a mini dies so for years and so is Ubuntu but now they've like no I can't do that anymore because nobody uses it I use it it should be making me die so for me I'm over here like going on about how amazing mini dies so and like trying to like lift up Ubuntu as not just this new distribution you can actually have a more advanced set upon and then they go in the band and mini dies so it pisses me off I think the reason why they did is because they included the minimal install on the standard ISO yeah but it's not I know it's not the same but that's probably the reason why they did it what is the ISO what is the image like for the raspberry pi version of Ubuntu because it's that I wonder what that includes and doesn't include it probably doesn't include things that you'd need to run for one thing it will have an arm kernel yeah that's true I always forget about that so probably won't be able to boot it I keep looking it for Ubuntu things that don't include the install they'll also have software compiled for arms so I probably won't be able to use all of the software at least some of them Firefox made me for example that is weird that they took that away I love that mini die so so much it's been my go-to way turns years and yeah just the fact that they say no now it annoys me like I will have to switch to Debian I'm not I mean the alternative is to either go for the server one and just you know go at it and see what happens and see if it's configured in a particularly different way and if I'm lucky it's not unless you tell it to or I could do what I used to do back into there which is install something like Ubuntu and just tear its guts out just completely disembowel it and just take out all of its trash and then build it up myself like I would if I'm using the data ISO I wonder if there are so like there are Debian based distros that have the minimal installs to like Sparky and I think MX Linux has a minimal install as well so I wonder if there are like Ubuntu based derivatives that have the same thing so then I could just install that instead yeah that could work but honestly I mean if I have to result to that just switch to Debian yeah because they do have a minimal ISO and they probably always will well all the default ISOs of Debian are actually that way so all you get is the installer awesome and then she specifically choose an ISO that has like a live environment which is what I ended up doing because it came it just seemed like the thing to do seems how I needed the non free ISO anyways yeah have you ever heard about that a rolling release version of Debian the what's it called it starts with an S right I don't know oh Sid I've heard of it I've never used it yeah same Ubuntu has a rolling release script or whatever too that Martin Wimper created called rolling Rhino that's it yeah yeah that's very good too the thing with it I don't think that he's actually kept that script up to date so I don't know if it would work still yeah that'd be really cool I'd love to have a rolling release Ubuntu I mean just to try out and see what it's like I don't know how reliable it would be is what would a how would your system I mean you wouldn't want to do this without having proper backups of it obviously but yeah what would a place upgrade to 20.04 look like just on your system because you can do that I mean you might have to go to that through the steps could you like go to well I mean you yeah that's a good point I mean you should be able to go from one LTS the other just in place there is actually something called Ubuntu upgrade or something I always uninstall it but I can't install packages part of the core upgrade or something I don't know I can't remember what it is but yeah there is a package that suggests to me you can use that package or a binary within that package to go up to the next major release so disk upgrade is the one that I use to use disk upgrade that takes you up only a minor release minor release right yeah there should I mean there has to be a way up because if that actually works I could just install 18.04 there but I doubt you can go up and up and up and up and up and up maybe you can I don't know I mean that would be incredible the problem is though like I mean going up a major release in place like that is sketchy very sketchy well yeah that's why you'd want to obviously have make sure you're fully backed up because I mean you would especially in my minimalistic setup where there's fewer things moving around, fewer moving parts it could work quite well the only thing you could ever do is try it I'm not going to do that right now of course but that would be fun see if I can find out what the hell this package is I always uninstall it update manager no that's not going to be it what's the name so according to ubuntu.com do release upgrade dash D release then upgrade ubuntu release upgrade manage release upgrade so there's update-manager.core which apparently manage release manage release upgrades but there's also ubuntu release dash upgrade-core-dtk-qt I'm going to send you a link to the direct from ubuntu.com instructions for upgrading from 18.04 to 20.04 because you can't go directly to one LTS to the other and then the command line stuff is at the bottom of the article Discord's being soo-ho-ho-ho slow it sucks it doesn't like doing multiple things at once but the link will be there for after if you want okay thanks why the hell did they write it in electron seriously all right you gotta remember I'm not a developer so calling me calling other developer calling developers lazy but I think it's not necessary laziness but convenience I can just it's just so much that's just the only language they know or something well they write it in well because they want it cross-platform but they don't want to have to write in I don't I don't know it's it's weird because you can still write and it's not as if Linux doesn't support something like C++ or Python or something so I mean you could write it in one of those programming languages and it'd still be cross-platform outside of adding some whatever in order to get them to run but it probably does add a lot more work and I just don't know because I'm a developer so the real question we have to ask is why does electron suck if electron was actually good we wouldn't care like if it just ran really well it'd be good all right I think we should wrap this up I think I've actually lost TFL so I don't know whether or not use Archdebi and you only install what you want I've seemed to have lost terminal for life which is disappointing so he won't get to say goodbye we'll see if we can actually get him back he may have lost his internet because he was having internet problems um I'll give him a minute electron is the easiest platform to work on I don't know really anything about it all I know is that electron oftentimes blows yeah as a concept electron is good for cross-platform applications but man is hungry and resources yeah that's the problem just for whatever reason it loves its memory but the reason why it loves its memory is because it's based on chromium and chromium has its own memory problems right it doesn't look like he's going to be coming back something Arch scared him off hello I had to restart discord completely I had to actually X kill it because even Pete kill wouldn't work well I told you about the one version of discord reason that maybe you're using that version of discord oh you want to know it I bet you me sending you that message froze your discord I bet you that's exactly what happened yeah because when I went to go back on discord and browse to it it just was so slow so lucky discord is terrible just as we were slagging off because it's written in electron and then it dies on me yes it's just typical alright I think we should wrap this up so is there anything else you'd like to say we've been going for almost two hours damn no I think I'm good I'm ready to call it Chris as well because I'm pretty naked yeah it's getting late over there so we want to keep it too late alright everybody thanks for watching we'll definitely do this again because this is a lot of fun thank you everyone so thanks everybody for watching before I go I'd like to take a moment to thank my current patrons if I can Devon, Chris, East Coast Web, Jentus, Fun2, Marcus, Bagel, Sven, Jax, Knife and Tool, Joshua, Lee, Mitchell, Arch, Sinner, Merrick, Camp, Mr. Fox thanks everybody for watching we'll uh we'll see you next time


Kia ora. My name is Tayna Hurza and I am the Digital Content Manager for Auckland Museum. For the last 20 years I've been creating and producing content for online and over that time I've been focused mainly on sport, music and culture. I've seen a lot of content that flops. I've seen a lot of content go out that has very little impact but I've also seen content that really flies and there's a pattern to that success of content. For the past 18 months I've been working with Auckland Museum and like many of the other organisations here we've been going through a period of great transformation. We've got a lot of high expectations on us going forward which means we have to hit some pretty big numbers so it's really important that our content is content that connects. We're also a traditional cultural organisation so that means that we're going to have to challenge a few of the processes that we have and break a few rules. So what's the secret pattern? It's not really that secret but basically we need to talk to people, real people in ways that they understand about things that they're actually interested in and in a voice that's real. That's it, it's that simple. So let's break that down a little bit further. So we want to talk to real people about things in ways that they understand. So this is where you could go into audience, personas and segmentation and try not really get that nailed.  They're developed by people like me pretending to be someone I'm not and then following myself that I can actually have an outside perspective of the organisation that I'm working within. So they're misleading and they're full of bias and if they are actually accurate they're still going to pull you in all these different directions. So your content is going to wind up being really generic and safe and it's going to be low impact. So when you are developing content you can speak simply to one audience and it will hit all your others. Just keep in mind 10 to 12 year old girls. So bear with me. 10 to 12 year old girls are open minded. They are really curious about their world and where they are in their life they're just about to sort of figure out who they are and make their own identity. So they're really looking for connections. They're also looking for amazing discoveries that they can share with all their friends and all their families. So they're dying to share cool stuff.  So if you can get them, if you can catch them with your content you'll hit all your segments because your content will be catchy. It will be understandable. You won't have any jargon in there and it might even be actually cool. So speak simply. Right, speak simply about things people are interested in so that just might find the most amazing thing. This is the most easy one of all. Whatever it is you have to talk about, find out what's the most amazing thing about it and then just go with that. You've got, if I'm on my phone, you've got less than one second to grab my attention. With online content you lead with your knockout punch. Everything you talk about should have something amazing about it and if it doesn't, easy, don't talk about it. Talk simply about the most amazing thing and a voice that's real and this is where it gets hard, particularly for traditional cultural organisations like ourselves. There can be no dictatorships when it comes to online content. No one person or small team can possibly represent the voice of an organisation. We are the kaitiaki of treasures of civilisations. For Auckland Museum in particular we represent the cultural heritage of one of the most diverse cities on earth. There is simply too much scope and yet within our organisation are really passionate people who are knowledgeable and they're full of wisdom and they're making more marvellous discoveries every single day and within that group of people there are natural communicators who are just burning to share. They are our champions and they're not hard to find because we all follow them on Instagram and their Twitter just lights up. So we need to find our champions and we need to give them the keys, we need to support them, amplify them, guide them, have their back but understand that they are the authentic voice of our organisation and they will make real connections. Yes, it's risky but just be cool about it. Because when travel strikes or if travel strikes your values will get you through. Now all of us here work for organisations that have good values. We're not selling soft drinks, we're not selling high interest loans so stick to your values and just let them rain down. Now I actually want to give you an example. So a couple of years ago I was managing the online social media campaign for Red Peck Flag, some of you may remember. Now Red Peck Flag was developed as a symbol of respect and acknowledgement bringing together the diversity and celebrating the origins of our people and our land. And then we had our Godwin's Law moment. In the Parliament of New Zealand on national television.  So angry, how could they have the decency to do, the lack of decency to do that? So what did we do? We remembered our own mantras, stay cool, stay cool, we took a moment and we remembered our values. Now Red Peck Flag was written basically or designed as a love letter to Aotearoa. So this is what we responded in. No words, just this one image. And this is the image that actually went around the world and this is the image that still endures today as a powerful symbol for people that really felt a connection with that flag. So, excuse me, let's hear my page. Right, so basically speak simply about the most amazing thing. Be real and be cool. We need to share our stories and to do that I believe we need to empower our people to share our stories. We need to put our wisdom into the world so that we can all understand it a little better and find our place within it. I really honestly believe that this is our duty and to fulfil that duty I think we're going to have to break a few rules. Thank you.


First of all, let's review the numbers. Last week we had 72 positive cases. This week we're up 14 to 86. As far as active cases, last week we had five active cases, and this week we're up 7 to 12. We had 63 recovered cases last year, and that's been increased to 71. Eight more cases recovered. Last week we had one patient in a hospital. This week we have none, so that increased our positive by one more. We had three deaths and still remains the same. We had 2,740 tests this week versus 2,103 from last week. And the percentage of the tests that were positive last week were 3.4, and this week only 3.1, so that's moving in the right direction. Last week, Sheboygan County Public Health Officials released a Sheboygan County Safe Restart Recommendation Plan to reopen that included strong controls for businesses and residents. We are currently in phase one of the plan that says that businesses open. They need to follow the Wisconsin Economic Development Corporation's best practices in any sanction specific to their sector. In this plan, community member actions are avoiding going to places where safety measures are not in place. Wash your hands with soap and water or use hand sanitizer, especially after touching frequently used items or surfaces. Avoid touching your face. Sneeze or cough into the tissue or the inside of your elbow. Disinfect frequently used items and surfaces as much as possible. Always use cloth face coverings while in public, particularly when using mass transit. If you are sick, stay at home. Do not go to work, school, or any other public place and follow the advice of your medical practitioner. Follow public health quarantine isolation orders when ill or when you are in close contact with somebody that had COVID-19. Business actions that should be followed in phase one are businesses that choose to open must do so using the guidelines from the Wisconsin Economic Development Corporation and any sector-specific sanctions that apply to work that is being done. If your sector is not included, the CDC has additional resources for sectors and organizations to reference. Limit the capacity with non-essential businesses, bars, and restaurants and organizations to 25% of your capacity. Events held outdoors should allow for more people to maintain a six-feet physical distance from others. Support online education or remote work option as you're able. Encourage curbside pickup to reduce in-store traffic and long lines. If community members choose to gather socially, private indoor social gatherings should be limited to 10 people or less with physical distancing and always wear a cloth mask for staff. Sheboygan is meant to the five criteria necessary to go on to phase two. The criteria that have been met at Sheboygan County hospitals have the ability to treat all patients requiring hospitalization. And every resident who tested positive for COVID-19 is interviewed within 24 hours of the test results. The criteria that still need to be met is a downward trajectory of positive cases of COVID-19 as a percentage of the total tests, adequate PPE available for healthcare personnel and testing availability for all residents with COVID-like symptoms. The public health department has scheduled a community testing opportunity at the Sheboygan County fairgrounds in conjunction with the National Guard on May 28th and 29th next Thursday and Friday from 11 a.m. to 7 p.m. And on Saturday, May 30th from 8 o'clock until 4 p.m. Any resident older than five with a COVID-19 symptom can be tested. Emergency management is working to bring additional PPE and for healthcare partners to have an eight days or more supply of PPE on hand. If these criteria are met in the next two weeks, then Sheboygan can move on to phase two of the safe restart recommendations. City Hall is now open to the public. The made public library is open to the public with limited hours on Monday through Friday from 10 a.m. to 6 p.m. And on Saturday from 10 a.m. to 2 o'clock p.m. The third floor and meeting rooms are still closed. Municipal court will be meeting by conducting virtual hearings for the next few months. All city parks have remained open, but the following park facilities are closed and will be closed until June 30th and reevaluated based on the Sheboygan County safe restart guidelines. All city park playgrounds remain closed. All park buildings and shelters are closed. And city park restrooms will have a phased reopening as new dispensers for handwashings are installed. The senior activity center will remain closed. And starting June for a shoreline metro will resume half hour service weekdays from 5.45 a.m. to 5.45 p.m. and maintain capacity of 10 riders on each bus. Currently there is a one hour service midday and complimentary free fares are still available for riders. Thank you very much and have a great day today.