We can't find the internet
Attempting to reconnect
Something went wrong!
Attempting to reconnect
Analysis Summary
Performed authenticity
The deliberate construction of "realness" — confessional tone, casual filming, strategic vulnerability — designed to lower your guard. When someone appears unpolished and honest, you evaluate their claims less critically. The spontaneity is rehearsed.
Goffman's dramaturgy (1959); Audrezet et al. (2020) on performed authenticity
Worth Noting
Positive elements
- This video provides a realistic, non-intimidating entry point into low-level programming by de-stigmatizing mistakes and 'segfaults' as part of the learning process.
Be Aware
Cautionary elements
- The use of 'revelation framing' regarding C's history might lead beginners to overvalue manual memory management over modern safety-oriented languages.
Influence Dimensions
How are these scored?About this analysis
Knowing about these techniques makes them visible, not powerless. The ones that work best on you are the ones that match beliefs you already hold.
This analysis is a tool for your own thinking — what you do with it is up to you.
Related content covering similar topics.
Learn Linux TV's Linux Swag Shop #linux #swag #merch
Learn Linux TV
Raising Funds For World Domination (Day 318)
RobertElderSoftware
Raising Funds For World Domination (Day 317)
RobertElderSoftware
ButterTodo 🧈 - I Made a Todo App Nobody Asked For
JustAGuy Linux
Vibe coding vs AI assisted/pair programming
Jake@Linux
Transcript
and this could be the first uh of a number of videos that we're going to be just doing ad hoc and we're just going to go through the head for c together um i just want to say welcome and merry christmas and all that stuff happy holidays this is a cognac glass i'm drinking brandy this morning or this evening and i want a fitting thing to do before all the people get get in here let me just tell anybody who's just starting out these videos because i am going to put this in a category on on twitch and youtube that do not expect these to be fast we are not going to be giving you a quick quick quick quick just do this do this we are all going to be working through uh the head for c book together and and making mistakes and screwing around so it's going to take a long time we're going to be making jokes um uh i will show you the calendar real quick so here's so this is one of a number of plant community courses that i'm going to be doing over 2022 kind of you know setting up the goals for 2022. uh we will have the may the 4th um the may the 4th boost will probably be uh becoming an auto diet act and then we'll do the whole cycle throughout the whole year and hopefully we can get through the whole thing in one year if we can't you know fine but uh i don't you know we're supposed to be doing a good goody goody goody gig here you know i don't know about that i i don't know how these are going to work out we just know that we want to do the c1 so uh we've been wanting to work through the head for cbook for some time uh we'll talk about you know why and when and how and all that uh to work through it we're also working from this calendar so um and this is the calendar that has uh what i call the sea boost on it uh i am still kind of working out the details here we we did have an ama time from from 88 30. uh i think we're probably going to do a longer ama and news coffee time in the morning this is literally me just waking up so if you're if you're tuning for the first time and you didn't see this stuff before uh i just wanted you to know this this is a schedule you can read my about in real about i need to clean all that up but um but this particular stuff is uh it's on my game dev and see you something out yeah um and we are going to be uh the seaboos i i don't know whether to just jump right in or not i think what we'll probably do is have an ama uh session before this so we can just kind of get going but i don't even know if we really need that people have been asking me well when can we ask questions and stuff and i'm like you know if it's related to csg during the sea time uh otherwise you know this you can ask it appear in this time and then we have the sundays for ama time as well uh so i don't know if we need another nightly ama at 8 o'clock um the reason i'm saying that is because i don't necessarily want to stop and start the stream all over again you know every time um and and what to do with the vaude i want to i want to like get on and like jump right into the sea stuff so um i i don't know i don't know what that's going to look like uh we i just don't i don't i don't know basic bros yes uh so i mean i don't know i i don't want to overly spend some of this so we're technically supposed to be starting to like 30 but i have been feeling we're gonna i'm just gonna start right at eight uh because i i feel i don't know i just i feel better about that if we need to do an ama we'll push the ama up earlier and uh we'll have it ahead of that so um again so the c boost is gonna be it's just gonna be an hour we're not gonna we're not gonna overly stress about this we're just going to work through the book as fast as we can and i'm only going to work on this during this time and and i have never worked through the book i've read through the whole thing but i haven't actually done any of the work in the book so you're going to see me making a ton of mistakes uh because i haven't done any c in 15 years the last c i wrote was a a massive fork bomb that i was paid to make on purpose by ibm to test uh some some orchestration software um and it was fun it was really fun so and this the book that we're going to be reading from is is basically designed to to uh to teach seeing a fun way uh so i'm going to go ahead and get that let's go let's go really quick um i'm trying to decide whether we should actually make like a guide for what we worked on but i don't think that's a good idea i think i think we should just i don't i don't want to get too too much involved with like writing all the notes and all that [ __ ] because we won't do anything i'll just be doing all the editing and updating stuff like that so uh every night at eight every night at eight we're going to be doing this um and yeah recovery writers they need to know things that sometimes things fall and that's okay absolutely segbelting is fine we're going to talk about possibly doing this development in the c project inside of a container i don't know if if the end projects are going to be able to be done in a container um and i i don't know i i i actually want to talk about that again this again this is very organic so we're going to be talking and making decisions as we go and every year we'll do something different we'll do the same material but we'll do something different and and make make adjustments so so the first thing i want to do is set the environment and and talk about the book so the book the book we're going to be doing and by the way you know you're free to say anything you want to hear as long as it's within reason but remember it's going to be saved for time and eternity uh for everybody to read so uh if you don't know how to you got to have a linux terminal okay you have to have a linux terminal if you haven't got that set up already uh go watch the boost and i'm going to give that giver a boost go watch the boost and get through day 42 or whatever on that and that will help you set up a command line environment where you can you can write code uh i have a feeling that that at the end of this ebook and actually we can open up right now um and for c i have a feeling that at the end of this ebook let's go to the end that they're going to be doing they do the games and stuff they start to use the graphic engine which means you know we're going to have to port forward the x11 uh or whatever we're going to do at that moment hey welcome thank you for the follow so we're going to go down here and go all the way to the end is it open gl do you know the c lab blaster rides okay so this is uh so this this is a the this is the most fun activity in the whole book and i'm really looking forward to doing it because i was a huge asteroids fan as a kid uh and i we're gonna actually make a game called asteroids eventually um i is it is to see is it x11 i don't know let's go look this slide gives you a spec that describes a program for you to build using knowledge you've gained over the past last few chapters i mean this is chapter like 13 or 12 or some [ __ ] it's like you've already learned a lot of c at this point right um but i i want to go jump ahead because i know this this project is here and i don't know uh if this would work in docker i do know that you can do graphics games in docker you just have to port forward to x11 sockets but that's not a beginner thing to do but it's it's not hard either um so we could learn that so here's the game they want us to make uh using i'm pretty sure it's just seo um so this they actually don't even tell you how to do it they tell you what to do and they give you uh outline on how to do it if you want the answers you have to go to their website and they have uh all the answers there i actually like that i like that they don't give you all the things to type in people instead of typing it in not learning anything so you have to figure it out you have to actually figure out how to write it can be really fun it's a i in fact that's one of the things i like about the head force approach is it's like really it's really focused on figuring [ __ ] out you know it's focused on on on all of that um and so let's do that um i'm actually going to be playing a little bit of music during the live sessions but the music will not show up on the vods on youtube or in twitch so uh that kind of makes it fun i don't have any music right now but but i just want to know that that's coming i just realized i don't have any right now all right so your mission blasts yesterday's without getting hit blah blah blah so we're going to be making these things these are just line drawings uh and what are we going to do i think i probably had to put that there because it would have been asteroids otherwise you see this will be available on twitch yes they'll be available on twitch but but on twitch they're not they're not going to be saved i'm not going to save them they'll they'll rotate out they'll only be available on youtube at the end uh because i'm just going to export on youtube as is i'm not even going to highlight or anything i'm just going to send them as this um so you know it puts something to put on while you're working on it if you want to you can fast forward and all that stuff uh which means i have to wait you know a day in order to push it up to youtube because the reason because that's how they are um allegra is an open source game development library that's what we're going to use elegro does use opengl uh you decide to use 3d objects opengl and handle most of the bathroom all right so we're going to be using this is a craziest thing is this uses an http url to sourceforge which i know i've never heard of it either so i have no idea and we're gonna we're gonna try and see how it is you know i mean how else can we try but it looks fun maybe we can write our own c you know we can like fork we should probably fork allegro and put it and put it in a github because i [ __ ] hate sourceforge i we really should do that we should do that that's probably the first thing we need you you may need cmake when you build the code you probably also need to install an extra coding file cmake cmake is a build tool that makes it a little easier to build c programs different person and i don't want to use cmake i want to use gnu make so you know we might when we get to the game part right here we might have to spend some time like hacking on that thing oh you found a good one you found you found it nice nice nice nice that's good let's put that in the notes well it's in the show notes so people will see it um yeah so so that's that's where we're headed right i want people to head and see where we're headed so when i say game development i really mean it uh i just want to say again i've said this many times tonight but doom the original first person shooter was written in c and cc uh quake also c uh it wasn't until somebody told me do maternal that things started to be c plus plus and i mean there was a lot of cps before that so you know people say you can't do game development you know it's like [ __ ] some of the best first games ever made were done in c so we can we can do this um and this game uses like oh my god look at all this fun stuff you guys are posting by the way keep it coming keep it coming that's what this community is about it's about people finding stuff when i say something or i'm missing something you're backing me up put something out there appreciate you doing that um speaking of getting stuff and putting it out there i've purchased two copies of head for c i have ad for c on on kindle and i have head for c on in paper and so downloading the pdf didn't seem like an issue for me i i went ahead and did it i'm going to let that be your decision if you don't if you don't want to download the pdf that's up to you and let you let you make make make that decision on your own um so but again it's good i see interest rates a bunch of people are jumping and they've got experience already so they can like you know forge ahead and work on the game while we go through the basics of c um i mean they've been coding c a lot already so they can they can figure out some of the quirks for us in advance before we hit them and and aug has been making a a lot of labs for different purposes and that's going to be fun because we could probably work some of this into lab format a lab is a in our is our word for uh get a repo that has you know a set of requirements that and challenges for you to do and then a set of criteria to say you passed it and basically just give you ideas about how to do stuff but not necessarily with any grades but possibly a an occam's badge which is the open credential merit system that we've been working on creating to help people have fun and kind of kind of like an achievement system for for everybody um so let's go back to the beginning again we only have an hour so i'm gonna go from eight to nine and we're already 20 minutes in so let's see what we can do today i'm gonna make a bunch of assumptions about what you already know okay so first of all you need to already know github and get lab if you don't know github and gitlab you know you probably want to do that uh github at least and you should have a minimal expertise with git i am going to be doing the command talking through the commands but i'm not going to teach you git right now i'm also not going to teach you how to use the command line and use bash we're not going to do that that's covered elsewhere as i said we have a number of other um things on that so z edit courses and i told you that's in the boost right so the boost is is going to cover this stuff um you know what hey ancient if you're going to be doing that can you try to put allegro in a can you put allegro in a container and see if you can get it to port forward the x11 uh ports and test the sdl stuff in it the opengl stuff that would be fantastic that would be that would be a fun challenge for you probably do you know what i'm saying the source code we're doing in public yeah it's been around for a while so i mean that might really strike stress so i know by the way if you don't know what i'm talking about so there's a thing i'll give you a search for this so jess frazzle jess frazzle has a as is very it's rather old uh willy wonka um containers she just russell has runs her entire operating system her money at boot from containers and she does a demonstration where she uses docker containers to run valve games and she has rather involved docker lines that she uses but you can go watch this video uh if you if you want to the reason i'm putting this out right now is because the people who know c already or something they want to experiment a little bit in advance just jess is amazing she's a little opinionated but she's fun and she's got this um she if you go fast forward here she's got this is her doing games um she's got she starts with the gears this is running from a container so what i'm trying to tell you is our asteroids game can run from a container and i think the ultimate goal here should be to containerize our blasteroids game because then you can put it up on docker hub and other people can play your blastoise game by doing docker install blaster right or docker run blasteroids boom it'll download it it'll run it it'll have all the sdl libraries in it it'll just work right i think that's what our end goal should be that's not what head for c has decided to do because they didn't have there's no idea of containers in there but in the boost that i put on so if you go to the boost uh you'll get familiar with containers and azure command line to linux so if you're on windows or mac you can you can get right into linux without having to do anything and and you can use containers and you can then leverage the stl libraries uh from within there so the reason i wanna i really want to go this route and i'm really kind of getting married to this idea is because if you [ __ ] anything up you can delete the cluster if you are there's probably going to be a dependency on opengl or something like that and if you if you try to install those things on your linux machine or on your windows or whatever you might [ __ ] it up and i'm sorry i'm going to swear i there's going to be swearing in my i swear my stuff's mature i'm sorry but um so so but here's what she does she's got she's running these are all this is this is all running from a container all this stuff is running from a container and this is her playing a game from valve that she ran from a container uh yeah all of her commands to run her containers yes they're all there so the the goal i mean with the containerization being the way to go with darker being the way to go i think it's super important that we not just learn how to make a game but we learn how to containerize the game and to use docker as we can create a a a common uh development container as we go this is a really common approach for software development today so today rather than have everybody have to all download and get their computers all synchronized uh they there's pair programming that people do across the internet which i don't particularly like because you have to have the internet to do any coding or you create a container and then you build the container the whole development team builds the container as they go and while they're building it up they say okay all of our dependencies are in the container and so if you want to do development on this project you do the development in the development container and if somebody finds out that they need an extra library or something they put it in there so if you've done any python virtual environment kind of thing that's the idea except for it's better like way better because you can do it for anything not just python so the one thing i want to take i want to adapt this is one of the reasons i don't like calling it the head for c thing because we're gonna we're gonna be adapting a lot as we go and one of the first major adaption adaptations we're going to make is we're going to build a development container to build these games and things as we go it's going to be ephemeral it's going to be it's going to throw away our stuff if we don't save it somehow and it's going to do a bunch of [ __ ] that that that our containers are supposed to do so this is going to be a container-centric sea development thing and and i'm also going to make a ton of assumptions about whether you know containers or not and if you don't know containers you need to go watch the boost and there's there's a beginner boost that goes through you know this stuff and we use containers to get linux access and install it's pretty easy install docker desktop i i hate this proprietary oh well install docker desktop you know pull down a linux a linux image of your choice you know compute do whatever you want to do that's really it that's really it you don't have to [ __ ] around with like virtual machines you don't have to install linux on your hardware you don't have to you can do those things if you want but you don't need to do that this is one project by the way that you cannot do remotely you cannot do this because you're going to need opengl and seo and all that to have to do it locally another reason i'm really anti-pair programming [ __ ] over the web because they're trying to develop on a project but if you're doing something that's using local device drivers and and libraries you can't do it so so i think this is gonna be the best the best path um so the first step we have to do besides getting the book is set up our own development environment all right so i think we should spend the rest of the night tonight doing that we have like half an hour to do that and and again i'm going to assume that you know linux or you already have a containers on there and i'm going to have to refresh my skills with dockerfile i'm not a absolute king at it i i have to look it up and we have to set up a git repo for this so traditionally when we do this um we set up so i'm gonna go into my github directory uh i organize my stuff so that i have a github.com uh i have a pretty clean repos organization uh i've talked about this in the booths but uh the reason for this is because i like to know you know what service i'm on there's two or three or four services or sources gitlab github whatever um and i like to do this because there might be i might have an already mixed rob on get lab so i i organize them all i put them in a capital repo this is just a standard thing that i have uh i've been doing for years but it helps me organize everything so we're going to go ahead and we're going to make um a git repo for this i'm going to use get the github command line tool which i'm not going to explain this is something that's all from the boost uh but i i'll i'll talk through it while i do it so the first thing i'm gonna do is make a directory for what we are building uh and this is this is a tricky one because i mean if you go back to the if you go back to the to the thing here we're going to have multiple projects right so do we have to make a decision do we go mono repo and do we have like a ton of stuff all over the place uh it doesn't have x11 lm so cmake build that example game filled i just use package manager or gcc horse nice ancient straights you're ar you're like you're like scout you're like you're like ahead you're like you could be our scout to make sure the jungle doesn't is isn't gonna send us off a cliff or something also cheers um so we're going to do uh the first thing we need to do is figure out how we're going to we're going to use a monorepo for all the projects in in in head for c uh which means that there's just one repo you put everything in there or are we going to do multiple individual repos for everything else well my my first inclination is to start with a monorepo and then if we run into a problem that we need to do that uh my relatively young eyes okay people are giving me [ __ ] because they're doing c coding they can't believe it i've been talking about doing second because i want to do c coding i just don't need it for my job that's better than admin i'm sorry no offense anybody doing admin but i would much rather make blasteroids than [ __ ] advent sorry sorry no offense but cheers i think i'll have i think i'll have a nice cup of tea or a very large brandy name that quote um okay so let's do this i'm going monorepo people so that means we're gonna make makeder uh head first see uh projects how about that all right make a big up big ass directory so and that uh we're going here and what we're gonna do in here well we're gonna make it into a git repo okay so let me make a readme for it the [ __ ] did i spell that wrong yes it's the brandy uh ahead first uh c projects repo that's fine and and that's all and that's all git init i'm gonna make it a git repo we're gonna add a file uh this is good ad i'll do the long form of the command since since i've got shortcuts for everything but i can't even remember get a dash a dot that has everything recursively and then git commit and we say add uh initial readme.md harry potter you got it you win the prize i wish i had points to give you i do i wish i had points i don't have points to give you so so what do we do now we got this git repo right well we need to put it someplace so let's turn it into a git repo and get them gh repo create a head for c projects same thing here um and uh first of projects and i'll make it public and post that and you have access rights oh that's because my ssa keys aren't working sorry give me a second i need to run an application i just rebooted earlier actually dota made me removed i need to open my key manager give me a sec here i this is using ssh key agent that runs without having your keys on disk anywhere it's much safer to do it that way uh but i i have to reactivate my um i have to reactivate it so uh i have to i have to touch my ub key which is hiding i really have to get a cable for this yubikey it's at the back of my computer right now it's pain in the ass where are you where are you there you are okay oh [ __ ] everywhere we're reading database credentials um one more time damn it i haven't needed this stuff for a while cancel all right here we go ready open an existing database cancel uh-huh okay there we go all right so i'm probably gonna take down that security notch it doesn't need to be that high it's some pretty high security i have going on there i don't know if i need it i don't i don't know if i need it but i use keepassxc i'm probably going to move a lot of my stuff to the pass uh password manager and just keep things i i don't know i feel uncomfortable having ssh keys in flat text on the system i just always have i don't like it um even if they have passphrases on them you know that's what ssh agent does by the way ssh agent manages your passphrases so it just keeps it running and and cleans out memory so it can't be owned so add key to ssh agent and here's how you test it ssh you get at github.com that will tell you hey i know you goodbye that means everything is good everything is good oh my god you saw my password i feel i feel i feel exposed i've been exposed all right so um what are we doing we're watching justice thing oh okay um what are we doing oh yeah so we're doing this did my thing failed right so gh repo create uh head for c uh projects public yes already exists i wonder if it went through i have a command called open that just opens it okay it worked that's weird it worked anyway all right so i'm going to keep that there uh now watch if i do open detectives give repo and opens it with uh to the right spot it's a it's a thing uh do you want it here it is that's my the command that does that i'm going to be sharing commands with the twitch chat as i go uh just to let y'all know what you have and also you can go read it about it um what else this is all the command is in the command it's actually written in pearl i get [ __ ] up for writing this in pearl all the time but it was so much easier i could probably port that to bash at some point but um i like bash i because i use all of them what are we doing here so i need to do git push dash o actually you upstream it's the same as upstream origin and i have and i have main set as my default uh in git get point i can't get two two or further as you get one for two you can you can do that uh uh if you if you don't if you wanna set main which i recommend it's just easier to type honest to god that's the main reason i i understand the other reasons but that's the main reason i use it so uh i don't get um config yeah so here's my gate config uh it's got a bunch these are all the aliases i use for for gh and stuff if you want to see them this is all my dot repos uh this is all in my my dot uh stuff if you want to go look at all that so again i'm trying to since we're trying to do this more educationally i'm going to tell you everything i do and you can kind of go look at it and dig it apart um but the one the one i was going to tell you so i jpg signed everything if my default branch is made so this is the setting you can put on there and it'll make it make it all made it's the master all right um status we're good we're going to go in fact if i open the repo now why are you opening it up there head for c project so there we go and you know nobody's there yet but that's fine it's a good place to put stuff close that up um close this one up too adjust this thing um and that's it that's it we're ready to go let's start coding so since we're going to make this as a darker uh project we have to think about this what should we use now there are already c containers for doing building of this kind of thing one of them's called kona in the container and i kind of want to go look for it on docker hub so openhub.docker.com i've used this a lot it's called quoted in the container and it's actually designed why am i not signed in it's designed for sea development conan i o here we go so gcc8 gcc7 uh g69 and it's got everything it's got all the libraries and everything all set up in it so i almost don't think we even need to write our own we can just extend that one and then and then go from there i feel like that's the right way to go but um again i said we wanted to do containers here so let's try that let's read the book and see what they want us to use um they they let's just go straight into the book how we i'm going to read every page of the book i'm going to read it very quickly but i'm going to read every page because i'm doing some vetting here as well uh we're going to be watching inverted stuff because i cannot stand other than that the the head for seed just in a nutshell the idea of an adversary is to make it silly so you remember it which is a well-documented scientific way to remember things that's how people who do mnemonic competitions do it with a memorized pie associated with a big crazy ass you know imaginary story in her head and so all the silliness is actually it's got scientific basis to help you remember it uh this section we we're trying to bring a question why did so why did they put c in a book um this book is for do you already know how to program another language do you want to master c probably uh the answer is yes you're looking for this this is your book we know what you're thinking can this be a serious ebook yes whatever your brain is thinking here's your brain your brain craves novelty so you can read that whole section but i summer i did detail there already on that we think headfirst reader as a learner uh this is you're trying to learn so i love this uh some of the principles from head for c these are backed by science make it visual make it conversational personal get to learn and think more deeply again learning the reader's attention and touch their emotions i this i could not have more perfectly summarized my own learning principles from skill set over the last since 2013. i've been doing this since that time i've been making silly ass nine cat projects and and waffles and bridge keeper python and uh monty python and as silly as we can do it because it sticks and i've had people come up later who are now in you know big-ass colleges or crazy jobs that have told me one particular said i really appreciate your mnemonic mini projects that you did because it helped us memorize them and remember i had no idea about any of this it just was intuitive to me to make it fun so we would go watch a meme and then do it and then make it and it's stuck it's stuck because they could always associate that crazy fun thing that they that they watched that video about that thing uh we did badgers for loops for the badgers badgers badgers and we're still gonna do that by the way all that stuff is going into the other boosts uh i don't know if this is time to make a plug for it again but we are going to be doing uh another course i'm calling it a course instead of a boost because it is of course going to go it's going to be linear i don't like linear but whatever um we're going to learn python and go the hard way and and that will be following along with the book but it might also include some boost content from the challenge library so that's another thing um that we're going to be working on so this is by the way this is just only a continuation of what i was already doing at school stack so i'm not i'm not really it's not really a departure for me from from that um let's go back to the book and see what kind of c we're going to be coding if you have questions by the way along the way just shoot them out shoot them out and there's no bad questions uh i wonder how i can trick my brain into remembering stuff this i'm not going to metacognition is the whole thing read about it here's the way we did it just do the exercises write your own notes read write x w rwx sound familiar do the exercises x for exercise write your own notes w for right read about it don't just stop and read but you need to start there uh are you wanting us to create your own fork no just make your own look this is this you don't need forking at all at all you're just making a project just make your own project you don't need to fork mine you can come to mine and look at it every okay so that's probably a good question so but if i'm going to quickly say this if you do you think there's opengl no reply doesn't have it wait it's not even worth mentioning there are some online coding weapons you could use you're going to need to do it locally on this one uh what's that i started only called the allegro libraries because they have like 50 separate ones yeah so i have a feeling can you guys check and see if there's an allegro library on github i mean in docker hub if there's not we need to make one we don't need it for the first lessons but we're going to need it for the end we're going to need to make a docker image that has allegro in it all set up and and and and as the final version and then i but i actually want to help people learn how to make their own containers to do this along the way so we'll be learning how to make a container as well as learning how to make a game in c and learning c of course i didn't want to stop here though so read write exercise that's rvx and i didn't i it's why i'm so on board with with with these guys because the people who wrote this book really understand what i prioritize and so talk about it out loud god knows that's me right write a lot of code i just love it i love love it and and that's why we're doing it uh there's not one we're gonna have to make one i think yeah we could be the first one to make it too so this is cool we can break all the ground here interest rates you wanna you wanna learn containers there you go go go go maybe maybe build off the base of the docker file from like the conan gcc one and then add all the lego [ __ ] in there and then call it allegro and put it in your docker hub and then we'll just clone that that's if you want if you want like a you know stretch you kind of project that will really help a lot of people yeah and it's a github repo i know what i'm saying is you could take that github repo and you can put that guitar repo and combine it into the build container for uh the gcc version that we're using and you could you could actually pull pull the one of the cone in containers you could even steal strip because it's all open source you could combine the allegro source with a docker file there and put that docker file with the kona gcc source and we'll have a container that will be good to go and then we'll put it's probably it probably doesn't have any stl or opengl in it as well we're going to put that in there as well the end result is going to be um a head for c container that has everything for allegro in it and and and and it includes a readme that says here's how to mount the x11 sockets so that you can use this container to make your games and run them that would be phenom phenomenal and then i mean obviously you're going to be able we're going to be compiling code uh and the the artifact of that is going to be able to run anywhere you know what i mean so at the end of the day we're going to we're going to be fine to have you know a single executable to run your game uh we're gonna have to put cmake and canoe make on there and all kinds of stuff so that would be that would be really fun uh let me let me move my my my preview screen it's like freaking me out here um yeah there we go all right good good good good good good good good good good good good i'm super excited so we still don't know what gcc reversing i i know we knew zcc read me uh this is a learning experience not a reference book we deliberately stripped out everything that you might get in the way of learning whatever is working at the point in this book uh at the first time through you will need to begin at the beginning because the book makes assumptions about where you are already so the reason i picked this book again is because it's linear and um you know learning isn't linear but it makes you feel cozy so you know we're going to go with that uh and people like well why are using a book why aren't you doing some original [ __ ] i have done plenty of that i don't need to do more of it so i i really want to vet this book and see how good it is and i know it has a couple errors in it already uh but they haven't errata and we're going to be able to go through that and i like i think because it's something that i can refer people to and it's fun you know so we assume you're going to see but not to programming so this is my this is my assumption as well if you haven't if you haven't programmed in python bash or javascript uh you're going to be in trouble because you should have already you should already know basic programming concepts like for loops and stuff like that if you don't know those things you can try it but it's going to be a little bit harder we're not going to go deep into you know what's the difference between recursion and iteration and blah blah blah we're not going to do that that's all in learning you know head first python and go which is another course um okay so you need to install c compile on your computer this is the stuff that we've been talking about right all this stuff with and they look at this they want you to put mingw on your computer no don't do that don't do anything that they say here don't do this you need to still see your computer the best way you can see on your computer is everything we talked about install decker desktop install docker desktop right and then install uh gcc they didn't tell us what version of gcc and then we're going to run the conan container all right hands down the fastest way we begin to teach some concepts in c then we start putting c that work the right way uh coding ninja master okay the activities are not optional exercises do not skip them the redundancy is intentional repetition is the mother of learning i love gosh i [ __ ] love these people because you do code.org or code or code combat i'm sorry code.org or uh free goat camp they don't put any redundancy in there at all it's like you finish the challenge you go on you forget it immediately so this intentional redundancy or layering of learning is really really good i really love that example as lean as possible our readers tell us that we are frustrated the way through 2000 lines of example code looking for two lines they need to understand most examples books are shown with the smallest possible context so that part you're trying to learn is clear and simple don't expect all of our examples to be robust uh brain power exercises do not have don't have answers so the brain power answer this is pretty big deal uh creating windows vm code for windows running code and container done and no i didn't say any of that do not do that do not do that do not do that create windows vm no no i tell us options okay i'm telling you the option i want you to do and if you want to do your own thing that's fine you're your own master of your own destiny get docker desks up on your machine and get ready to put a container on there to do your development in the end that is consistent with what i've done in the boost and if you've gone through the boost you won't be lost if you if you don't know what mngw is i don't care you can go figure that if you want ancient technology that that you probably shouldn't get involved with at this point i did i did oh you were joking okay um so in some of the brain power exercises you'll need to find hints to point in the right direction i actually like that they do this so they don't tell us anything about how to make blastoise we're going to be on our own and we're going to be struggling as a community group trying to make it like working through this project i love that because all that failure and frustration is going to make you learn it and me learn it so i'm looking forward to that again this is why i love the head first approach technical review team some kick-ass seat coders uh they've been developing c for a long time 20 years of consulting for fortune 500 firms uh likes to play piano guitar wiping three kids i mean these are good people right in this book uh editor brian sawyer is awesome the o'reilly team i mean o'reilly has always been kick-ass they've always been really great now my friends and colleagues uh brett mclaughlin which is interesting i think i recognized that name for somewhere i don't know any of them personally let's see safari books yeah i'll go down here diving in don't you just love c comes in lovely you want us uh i want to get inside computer said so we are going to read all this stuff because it talks see i've say this all the time learning c everybody says it's not just me learning c helps you understand your computer learning assembly helps you understand it better but c is a little bit easier in fact i used to teach have people learn c by coding micro controllers because you understand the the components a little bit better at the lower level but we're just having fun here learning c so this is a little bit different you dry high performance code for new game program and arduino or as i mentioned arduino is a microcontroller it's like a little you know single board computer sbc uh or use the advanced third party library in your iphone app if so then c is here to help c works at a much lower level than most other languages lower than everything including rust um so understanding c gives you a much better uh let's like to tell you this but c is a thousand times faster than rust that's not the exact number but it's way faster than rust is it less safe than rust yes it allows you to be less safe it doesn't there's no safety net under you you have to learn how to write code properly and that's hard and a lot of people don't learn that and they [ __ ] everything up and the world gets owned and that's why the rust people want to do their thing but learning c first learning c first and then learning rust makes you even better because now you know or go even because now you've got a point of reference what does it even mean to be on the safe code well let me see if i can write something you can't even so well i guess you can turn on save on anyway c can help you better understand other languages as well so dive in and grab a compiler and don't and soon you'll get started in no time it is important to notice that this language needs a compiler all right so javascript and python uh don't need to come out they have a compiler it's called adjust the time compiler that just runs as soon as you run the code it compiles it immediately to my code and then it runs it and sometimes it'll keep the cache the bytecode around next time so it's a little bit faster to start up that's why those other interpreted languages are slower to start up because they have to compile it on the fly and languages like go and c and rust don't have that you do the compilation step so it doesn't have to do it and then you get an elf binary uh like this you get an elf binary like this that's uh just a bunch of binary code right that just that goes straight into the computer's brain and runs and it doesn't have to be redirected you know like like this program that's got a shebang line and the computer sees these first two characters and goes oh this is you need an interpreter here okay i got you and then it goes and finds this binary the bin bash uh you know actually bin bash you'll see is another elf binary compiled c code right and so so that's the binary code that's right people run you know python or bash or z or whatever they're not running they're not running that script they're running the binary if you actually list it uh if you list in your process table you'll see there's a ton of batch code running see how this is bash right but if i but if i run a program that is a binary you'll see the binary here because it's that that's the actual binary of this ring when you run an interpreted program the the interpreter is running and it doesn't compiling and everything for you uh we're we're that's why it's so efficient because we're actually writing we could write bash and see bash was written in c so you know then that give you a sense of power that you're learning a language that linux itself was written in i mean come on doesn't it just like this like make you excited bsd linux every operating system pretty much on the planet was written in sea and you're learning that language i i there's no more i think it's one of the most satisfying feelings in the world is to know that you can even read the source code not to mention the syscalls and all the things you do to track to trace a program those are all written in c so i'm kind of supplementing what we're talking about here but i really want you to get excited about learning this language because it's going to give you so much insight into somebody let me give you there's a hacker inside right hacker's like why do i need to see well let me if you're going to debug a program so let's say let's take any number of programs that are running right now pss you have um actually let's do one let's let's just write um i mean let's write a simple go program okay i should probably i didn't see i don't know how though it's been so long i i am so ashamed i can't even write hello world and see thank you for the fall offense um and russ this is a funny joke i how do you okay we'll we'll get there i want to show you what a system call is just remind me later to tell you what a system call is i'm trying to find a running program so that you can see like if if some program goes awry and starts doing [ __ ] then it's not supposed to i used to do this for work and ibm and you have to track what those programs are doing or if a program crashes and you have to track why did this thing crash um you have to be able to read c because the system calls the linux kernel are written and see a system call is the communication that happens between the programs and the kernel uh to make things happen on your computer and you can think of it as kind of a network it's not but you can think of it kind of as the you know communication going back and forth and you can actually monitor that communication while it's happening so next time you have a piece of program that's running and you're not sure if it's like phoning home and giving away your personal private information you can actually put up an s trace on that thing and watch everything it does and the language of what it is doing is c so so just you might not think you need to learn c to make applications but understanding how to read c and understand what a c function looks like and stuff like that return values all those things that all comes into extreme play when you're trying to determine what things are doing and understand them when you're looking at core dumps and all kinds of stuff so what i'm trying to tell you is there is a ton of [ __ ] out there that is going to benefit you related to learning c even for a simple game like this uh more than realized i was i was alias celeste lol yeah so uh i don't know let's look at what kernel d is doing i have no idea what colored is doing let's go look so uh what process is that process with color d well i'm just going to show you a way to inspect the colony process so we're going to go look at um here it goes it's process 1 2 5 9. so we can s trace essay asterisk is l well it's been a long time uh no i think it's dash p can i attach a process uh check details and try again oh right sudo uh so here we go so you see what it's doing it's it's actually not doing anything it's sitting there waiting uh std sc stl2 alone provides most of the abstractions and cross-platform stuff as of what electronics we can actually probably do this stuff without allegro but vmt maybe maybe that's something you could do in advance too you're another one of our advanced people i would love to alter that thing and not use allegro framework and actually but if we use sl2 we have to write our own collisions and stuff probably um so i i so i would not learn rust at the same time if that's what you're asking no i would not do that i would stick with c first and then i'd do the other one c plus plus is a totally totally different language absolutely different language it's not even close to c it is yeah thanks for the phone obviously this process is pretty boring it's not doing anything interesting but you'll you'll you'll get the point we'll do we'll do system calls later my point i'm trying to make is learning c will have value beyond making code and c if you try to decide to just if you're trying to make a decision about whether you want to see it on and your decision is based entirely on am i going to make games in this or am i going to make anything in this then you're doing it wrong because there's so many other things you're going to use that relate to c when you're looking through uh you know if you're a hacker you're going to look through crash dumps if you're if you're if you're looking you know if you're looking at trying to debug a system or see what these applications do you're going to be using s traces and the the language of that is c so understanding it is is it's one of the reasons you should learn go to do cloud native kubernetes stuff because all of that those source codes are written and go so you can understand what the things are doing even if the documentation sucks so it's worth learning even if it's in a fun way uh so man ciscals uh yeah yeah there we go and the system calls fundamental interface between application and linux kernel uh and there's something new called ebnf for doing i mean all this stuff is gonna become less abstract to you and you're gonna get an understanding of a lot more plus you're gonna be able to actually write your own linux extensions you can make your own linux driver and see think about that for a second you could design your own device order it from china get it in a package from dhl and write your own device drivers for that thing and see and an assembly that's amazing power that's the kind of power that i really want it's like one of the powers you know it's like i was going to quote mr robot but i'm not going to would you recommend pearl python for system administration uh bash don't wait rest for now focus on seasoning and work at ben eaters uh nice uh it's gonna be lit i don't know about that the the rust fireless and we're gonna we're gonna see it we'll see how well it turns out i'm look i'm not i'm i'm just wait and see how many more puns can i make how many uh that you know what that needs to be a t-shirt that needs to be a t-shirt rust blah blah blah blah blah blah blah blah blah blah blah blah i'm going to wait and see because c sorry there's like literally trillions of lines of c code running the world right now so anyway understanding c is essential using docker uh you're going to make your own distro you should you should do linux from scratch do it i'm not even kidding you should make your own district it's actually really fun i want to try it myself again there's just not enough time right um all right but this is really fun i'm actually really enjoying this more than advent did i say that i didn't mean to say that it came out anyway this is randy cheers i think i'm going to make brandy a required part of this class for me anyway very happy christmas all right season language for small fast programs uh cs designed to create small fast programs it's loaded you cannot get smaller than c besides assembly that's it there's c in assembly you physically cannot make a program smaller in any way except for c and assembly scene language designed to create small fast programs level it's lower level than most other languages that means it creates code that's a lot closer to what the machine really understands uh the way c works uh merry christmas y'all feel you filthy animal uh computers uh computers really only understand one language machine code uh which we should learn we should learn machine code at one point too a binary stream of ones and zeros you can write your c code into machine code with the aid of a compiler most of you know this already so there's our code hey should we do it let's do it all right you're supposed to have docker already so i have docker already and by my alias so i'm going to show you my alias it's called run see that okay i'm actually going to make a workspace container for this uh really quickly my workspace containers are already built on ubuntu so i i might need to use a coding container you know what i'm going to do the docker commands out longhand because uh reasons i need to learn my docker commands again longhand so let's do that let's do docker yeah i'm going to have to make a pri we're gonna have to make a script to set up our container to use dc hey vmt which gcc did i use which gcc should we use you guys know more than us kubernetes it will not invol [ __ ] that frank bite your tongue bite your trunk 10x programmer whose name is frank we're going to go for another half an hour because this is our first one it's like it's like when they have like a like a pilot you know move show i didn't foresee it just and if you have to see any see oh come on jalopy we have to set up our environment there are trolls in our midst good friends of mine but bite your thumb i need a question i have a question which gc do we use gcc 11.1 or c like 12 shrug latest versus gcc i don't know what that is all right what is the latest lastest version of gcc uh gcc 11.2 so there you're wrong all right so we're going to go we're going to go look at the docker and find it now gc879 um i want to find conan conan where are you oh okay where are you from head for c hello where you been all the extra stuff has nothing to say [ __ ] you have to have a compiler the book says go get a compiler dude if you're not writing c inside of a container do it your own way that's fine that's what we're doing and thank you for joining us late uh so here we go gcc 10 it looks pretty new let's just send another one we have to find a good one we have to find a good version you see that's going to we obviously pretty much any of these will work but you know i want to get ooh alex there's an arm an arm one so we have to get a good one i want to get a container and i am not installing gcc and i'm not telling them how to install jcc we're just going to grab a container uh take a lot of lots of time in yeah i know you're going to chime in a lot because you think you can code c without a container and a lot of people who think that but i think the modern method is to use containers for development so you see laying eleven i don't know if i want to do that no i mean i don't know what there's no gcc 49 that's gonna be 4.9 it's gonna be 4.9 gcc gcc gcc gcc uh seven seven eight eight nine nine ten gcc on ubuntu that's probably fine oh gcc 11 on ubuntu let's do that gcc i think we're going to go gcc 11 on ubuntu 16 with no jenkins this one looks like the one updated nine nine days ago that's pretty fresh uh too many k jenkins this has jenkins on it we're not going to be using jenkins got 2.4k downloads that's a really popular one uh gc all the way here we go this is it so i i am going to try this you can't make me not so it's now been saved here there you go there's a command if you have docker installed this is what we're going to do our development you can do it your own way if you know how to do it a different way this is how i'm doing it i'm going to pull conan i o uh write one note open kubernetes oh my god do you see these nuts nuts is a christmas topic oh what fun container hey hey easy one liner without darker on linux app getting sell build essential not doing it not doing it that's not modern development if you if you want to be an old-school old fart and like install your dependencies on a local linux machine and then pray to god you don't [ __ ] something up or need something else go for it i don't want to do that i want to use modern development practices which are using a container for your development so but you can do that if you want that's your prerogative doesn't say how to get it it just says get it i'm telling you how i'm getting it uh dunking on those spoons so there's lots of ways i'm not going to tell you what to do the book says get gcc figure it out i'm going to use containers because that's the modern way so i now have a docker container and i'm going to put a little script together to start up my docker container and to mount uh a persistent volume uh so that i all my code gets saved someplace now i actually don't need to do that too much because i mean i accept workspace containers in another way um but we're going to go ahead and do that uh i am oliver trying to be cool and hip and stay employed if you know how to develop the development container today get good luck getting a job that's all i have to say there's probably somebody out there who'll hire you but yeah all right so we've got our repo uh we just need a a script to do this and probably we should probably build a docker file and build our own container image not gonna do that yet because i'm already getting [ __ ] about not coding c so we're gonna we're gonna go ahead and start this image and add a persistent volume and i need to remember my docker commands this is one of the reasons i want to do this so we're going to do uh let's go ahead and write a shell script for this again if you don't know shell sucks to be you we covered it elsewhere um and i'm trying to decide whether i wanted to run or not yeah what's that run schmucks run ah that's just mod plus x uh run uh i'm gonna use bash just by default you could use posix if you want uh and then we can just rename it to how to use docker and it won't be false advertising it's not false advertising it's the book says get gcc i don't know do you have gcc installed um all right docker uh run yeah docker run dash i t um conan one two six point four all right so there we are we have a container all right now the reason i'm telling you we need to make a persistent and i'm just going to show you why so we actually have it here we have a gcc now good right and now we can actually write code so let's write that hello world program since everyone's giving me [ __ ] all right let's write this let's write hello world put s which you probably would never use right uh how's it going seven so we're gonna go here i'm gonna say so i'm using vi if you're on ucvi you install emacs install whatever you want if you're gonna use vs code do it some other way i don't know how to even use containers with vs code i've never done it so if you want to do it fine this is i'm not doing it that way uh so it's not vmt at least put a sarcastic emote on that people are gonna they're gonna there's beginners here oh my god oh my god not your working directory there you go i don't know how to do with vs code mine's all you should probably do a stream on how to do with that not using nvim use whatever the [ __ ] you want guess what's on here vi it's actually not on here what is there only vim on here you know what that's interesting hmm looks like i'm gonna have to look at the game i have to make my first docker file you're gonna give me [ __ ] about this so you have to install them because honestly you normally don't do this you mount your directory into it which nano nope it's i like that they did that they didn't take sides they didn't take sides you didn't mount thank you mindset which said nope no you gotta do your own i i'm doing a docker file right away i'm doing a docker file you sue me i don't give a [ __ ] uh front boom uh run studio i didn't say it was a one-liner studio apt install yeah we're back to the docker file if you want to do without a docker file fine just don't give me [ __ ] about it because i am going to have something that works sudo apt actually app get i i don't remember my doctor files honestly cd workspace i have to go look at my docker files so that i can go faster uh yes we need all this stuff yes pvp if you're lost i'm sorry get yourself a docker uh what are we gonna call this let me call this uh what do we call this we call this lab um no we call it what are we calling it head first see i believe in setting up a proper environment before you start [ __ ] around if you don't believe in that fine do whatever the [ __ ] you want don't give me [ __ ] um i'm just teasing i know i know you're teasing it's just annoying what do we call this thing anyway i don't i don't remember what i called my repo first first two parts okay uh do your front end not interactive yes minimize if you don't know docker files this is not the place to learn it i'm just saying work upgrade install i'm to go get app utilities build essential don't need that software properties we might need some of these later um build essentials already going to be there i swear to god software properties common should be there i'll add him back if i need him https transport we're not going to be doing any anything with webs not going to do that search is not going to need it med pages why not uh say certificates no we're not we're not will you give me a second here we're gonna use curl i can use curl we're not gonna use any of this i'm gonna use the pet of core ppa stuff get rid of this get updated here um what what is the cli get a package which one what is in that vpa core core get oh that's the core get ppa if we want to put get on here actually we need that if we're gonna forget we need that forget actually yeah yeah we need to we need uh so vim i don't want i don't i guess t-monks i i don't i don't need two monks too much any dialogue any pearl python i'm going to well i mean there's two ways to do this one of the ways we could use it to do the compound compilation the other one is to do it uh gdb yeah i don't know how much of this i'm going to actually need in this container but i'm going to go ahead and put it in here anyway so hi hi what's up because i don't know if you want people knowing this information oh okay i have to i have to i have to stop talking for a second give me a second all right she's back as my wife um i don't know how much of this we need um i tend to not want it unless we need it so i'm going to delete all of it we're going to need git and all that stuff but i'm going to go ahead and we're going to build it all up uh i don't want to build my own container out of this just for this project are you still talking to me okay um so uh we can just install we don't have to sell anything we just install we just saw um if we could just install them what's that app get install i don't even know if i need app utils on db i don't really need it let's just do them uh get rid of all this workspace container i don't need don't need this don't need any of that don't need any other points um where you can keep the same entry point yeah all right that's it we don't need anything fancy there um then we're gonna install docker so you can develop and see exactly i think i think you should do that look if you want to install arch from scratch and spend two weeks reading the wiki and re-image your system find i don't uh or gen 2 so it's supposed okay should we do it should we do it the easy way i already have how many of you have first of all people don't even have linux installed we're assuming they have linux what are we assuming they have how do they get linux in the first place are they running a container where they have right hey we can do this with just ucc if you want it's all flat you guys are such dicks i but you're not wrong okay so fine it's keeping themselves entertained i okay i have a legitimate question i have a legitimate question for you smart asses what do we tell a 12 year old beginner who has never used ucc and doesn't have linux installed we do i guess we assume they have linux already right we assume they have linux do we tell them to use mingw or all that stuff that's in the book i don't think they should use this stuff in the book you know you think it's the best way okay because i don't uh i'll tell you i'll tell you what you don't tell them they install docker to write a c program i've crashed my comment i don't know what we're assuming we're assuming look we're assuming they have a linux command line that is assuming a lot right and we already covered this and other stuff we're supposed to have already covered uh bash projects and shell night native this this is supposed to cover getting a bash shell they're supposed to already know that and and when i do this when i do this wsl is the thing but wsl sucks wsl suck f um for a lot of this stuff uh so yeah i guess we assume that you have bad shell and who cares right it doesn't have to be docker uh the compile c um still don't know bash i've been asking you about bash in the past year now what about about how to learn bash we just need a shell honestly we don't even need to use a lot of bash shell stuff all right uh it's doodoo yes it's horrible i hate it so search tlcl should have the links command line i see yeah do you know no it's not it's not as bad as that but i think i think having an actual linux you know container that you control is is more valuable more valuable so this so i'm gonna i mean all this the smart allocations aside everyone i i am doing this based on the fact that i'm assuming they learn bash posix shell native and learn learning linux to learn how to go in python development the same way that i did and currently that requires nothing more than decorate a docker desktop or or a docker desktop of some kind if you want to do a vm or you want to do whatever you assuming you have it okay so so let's do that um and and and the whole docker file thing is just to keep them from you know having to to do their thing i don't even see there's another reason i need to do this my docker commands are totally rusty now i haven't made a new docker file a long time uh yes you can but i don't know why you would docker is a vm yeah docker desktop is a vm it absolutely is i know it's just a lot lighter weight vm um then vmware so so yeah i mean we could run keyboard there's anything i don't i don't want to go down that rough that path oh what if i add layer of what the [ __ ] am i doing yeah um you can read the darker dark i mean okay so let's assume you have linux command line period right uh we can use the darker stuff later but let's say you got yourself on a link command line that's it and all work on the other stuff already let's actually write our program because i want to go and i want to end by 9 30 because this people are going to get pissed so we're assuming you have a came out i don't give a [ __ ] how you get to the linux command line i don't give a [ __ ] how you get gcc installed the book says get gc installed gcc install and it gives you some ideas about how to do it that are ancient if if you follow the methods that they tell you with mingw and all that stuff just know that you're following something that we used to do you know in the the 1990s wants its way of doing linux back and nobody does that anymore and so that's actually one bad thing about the book is how dated is on that particular point and i'm trying to update your skills so that you're using containers or a vm uh uh instead but uh you should have already done that uh in other learning someplace else so i'm going to skip that i'm going to assume you have gcc uh does docker work here there's a docker os and you can install docker libraries i don't know uh it's pretty the book itself is pretty ancient yeah but it's not like i don't think it's really ancient um i don't know i don't know it doesn't have a copyright stuff in the beginning of this one i can't see it anyway if it does um so so let's do this we're going to write this program um we're going to write that program you ready all right so we're going to write the program i'm using vi use whatever the [ __ ] you want all right so vi uh i don't know we're gonna say hello dot c and god i don't remember i'm doing shebang like can you believe that uh include was it stud i o dot h let's see how much i can remember oh i can't remember no it got it's been so long it's been so long put us seriously it has been so long i'm not going to remember anything i didn't remember my pearl the other day i'm so embarrassed hello world um and you have to use uh double quotes because single quotes mean something else printf hello world yeah don't get me started on that yeah i see all the time numbers put us in my life yeah i know that's the thing it's like why would you use it um and it has a return code too right also that goes down here i'm gonna force myself to do that let me see if that'll compile all right so gcc dash hello dash o hello now i could have done yay my program works put s apparently has a line return in it i didn't know that i don't use it either very much i see i don't know is put us safe this is the problem i don't know if it's if it's because it's not bounded buddhas apparently has a has a thing at the end as a new line all right so now there's another way to do this we haven't got on to yet but you can do this you can do make hello and it will make it make has already got an internal rule to do this kind of [ __ ] so you can do make low and it'll just make it uses cc which is alias to gcc in this case and you get your hello there so this is a legit time to use make if you want to now they're teaching you gcc because they want you to do this but those rules are all set up in another language called make which is specifically designed for c originally to build all the stuff that goes into a single program which is usually lots of individually compiled libraries that get linked together into a big thing or not sometimes they're distributed separate from the other piece that depends on them being here it's called dynamic linking and all the original c code in the world was written that way because because we had to watch out for memory and all kinds of other problems this size and everything and so you know it would never have a static binary that had everything included in it redundantly and kind of wastefully right lego and rust and all those languages modern languages stuff all that [ __ ] in one binary so that it can run anywhere it doesn't have to have all those dependents compiled libraries on the system so i kind of jumped ahead there but that's that's what's going on with the c stuff uh since i don't know sandwiches apparently see um just the preface not linux using modern there are many programmers who add a new line after statement uh what's the dot h it's a header file uh-huh i just call it linux style because the linux source code uses that style don't know what it's actually called what's a put s a put s is a is a function so they're going to get to that so let's go how far are we so we have the source code the way c works computers really only understand one language machine code here is the the c code and then here is the compiler and here's the binary code and if you want to see the binary code you can actually look at it you can do vi hello and you can look at the binary code or if you want to actually see it in binary code what is it hex hex dump guys what is it what's the what's the cool one these days is it is it text up there you go there's your binary code it's not binary it's it's hexadecimal but it's pretty damn close um this is the actual ones and zeros of the thing represented in hexadecimal um which you should know by now if you've gotten this far along so i can't wait till we search for functions using man pages yeah man put s there you go so everything in c is documented in linux by default that's why i wanted to install the man pages in my docker container because people have been coding in c since the dawn of time literally i mean c was invented to create the unix operating system that's why it was made um so here we go i mean fun fact the first unix operating system was entirely written in assembly the very first one and then they wrote c richie and the gang wrote c to make uh the next version of unix you can go watch all about that at bell labs it's amazing it's absolutely amazing um on orange installment pages yes you might have to install it if you're getting you got to get them in pages because redundant zeros yeah can't wait till we start yes so this tells you how you know how to use it uh you're going to be doing this this is much faster man pages are much faster than going out to the internet um you can go out there if you want but you know i don't remember put s oh here we go it's actually a man page on that right and the man pages on the c stuff are pretty damn uh exhaustive you know they they give you a lot of code a lot of information about them is the biggest coin i don't know what that is i don't know what that is smart alex look at all those empty you're right look at all that empty space in there you know that it's like totally empty i wonder if this because it's 64-bit i bet it is i bet all that empty extra spaces because it's 64-bit if you know the syntax yes that takes no input or produces a copy of its own source code so oh that's equine did not know that was the name of it today i learned i'm putting that my information sorry equine is a computer is a program [Music] that that processes a copy of its own source code as its only output that um process its i don't know own source today i learned a coin i have to do this this is part of this is the w part rdbx so when i learn random things i write them down uh it takes no input and produces um a copy of its own source as the only output today did i get that right coin and this only have a nice oh and we have a reference link thank you everybody thank you for that i encourage you to take notes about random things i use the zettocast and approach but you can use whatever you want um [Music] and now i have that in my notes all right so clear people think it takes me too long to do [ __ ] but i'm learning along the way so so there uh i don't need to run right now i'm gonna do that later so you know i don't even know if we're gonna need a lot of the dockerfile stuff for now i'm gonna keep it here but so we wrote our first c program you might need to do dot slash hello of course um let's go back to the code we are over by two minutes so let's finish this particular chapter and go on do you know the 128 language client it outputs the first source code after going 320 other languages did not know that super interesting super interesting uh i'm going to add that to my related section thank you for all these references and go back and look at um shut up jalopy oh my god smart alex smart alex that's what you get with c programmers is by the way who is the one warning us about the c the c the c community they said be very careful before you ask any questions in the sikh community because they're a bunch of [ __ ] somebody literally was it mine's eye i think it was my time mine's like oh it's vmt i mean it's like be careful so so you might you might think that all these trolls appear in sea land right now in our little community here are hard to take but this is no no this is this is this is this is the prep for you before you go ask a question in comp playing c in on a news group someplace or an irc equivalent because you get [ __ ] roasted because they they are not nice people seacoders are not nice people they're not they're not they're they're really talented and they're intelligent usually and they they're horrible people they are why do you think i picked for a head for c because it's like so nice and happy yeah compared to elixir was actually pretty friendly exactly elixir or high school high school's got a great community rust actually has a pretty friendly community unless you go against their dogma all right here we go would that include lines well yeah i would one of them is brain [ __ ] seriously okay we're not learning breakfast today nope uh csu we're speed space we're doing that there are three c standards at the time of this writing that you may stumble across and cc is from the late 1980s doom was written in ncc uh and it was the oldest code a lot of things were fixed in c99 it's funny they skipped c89 completely uh you're an mrc script and generally a brain [ __ ] oh my god uh i used to make c cringe i think it is as even an automatic test uh dumb people equals twitter and so i've been remembering way too much fun reading the chat i got to stop doing that because there's a lot of great stuff in there uh and some cool new language features are added in the current standard c11 released in 2011. the difference between the different versions aren't huge and we'll point them out along the way so i think we're going to be using c11 um even though c99 is perfectly fine i i quoted the original k r style anybody else who doesn't is a plebe who should not exist there should not have been born in linus torvald's words um uh lord debate how's it going which is interesting challenge generate the minimal bf program to generate some text rich your name sharpen your pencil oh god to guess what each of these code fragments does deciding i'm actually going to do this i'm gonna do this i'm gonna put this in my readme because i it said to do the exercises i'm gonna do them i'm gonna do them get started with you uh this is chapter one right chapter uh one notes all right so what do you think the first one does uh i'm writing a comma mark markdown by the way oh god no i've had this book for a long time i bought it and everything it's called uh it's called head for c and we're gonna work through it for fun and again this is supposed to be fun for y'all to do so that's why i want to go through it um uh in end card equals int card count what do you think this does what do you think this does in card count equals 11. well i happen to know what it does it assigns it assigns uh the number 11 to the variable uh card count now i happen to know already so it's kind of cheating uh if card count but maybe some of you are coming across this and you want to follow along if card count is greater than 10 actually we need to write some other stuff we're gonna like chapter zero i need to write a chapter zero stuff chapter uh zero uh get uh linux let's see get on a linux uh bash command line uh uh i chose to uh just use my uh popos system uh desktop uh which already has gcc installed uh but i also [Music] started um making a docker container to to keep with modern development practices all right i'm just putting again this is a w in rwx i'm writing notes here and so other people can follow along etc uh what version of gcc i have what do i have i have 10.10.3 that's not bad uh 10.3 all right okay so let's answer the rest these questions will be done uh if card if card count is greater than 10 what's the link to a screenshot of what raise your hand if your count on your fingers is binary lull um install docker it's all darker you know what i'm [ __ ] tired of you all right if if card if card count is greater than 10 then what then print it put s the deck is hot increase the bet all right uh checks uh the value the value of card count uh to see i mean this is lame then whatever greater than 10. why do i have the impression that i should be writing this code right now i'm going to write it i'm going to write this code uh i wrote all this code out in a file and ran it first then answered the questions you can decide how you want to go through it i'm i'm trying to do this fast because this is like a little bit remedial it's kind of a lot of bit remedial 11's louder than 10 did all right so what are we going to do here is we're going to do wait what is what is going to name that other program what are we going to name it card count assume the name shorter than 20 characters boyfriend's name these are like multiple programs oh let's say let's do the bet let's do a bet yeah bet.c this is good uh include stud studio dot do you still need the dot h you do right i mean i know that's changed over time yeah but so okay i'm gonna do wait um what was it card count uh in card count count equals 11 semicolon if card count i mean this is good for me it does not thanks to vmt if qrcad is greater than 10 and then they don't have brackets which i find very annoying also a single tab indent which is also a problem right why do i have singletab indent in my c is it a tab what's the k r version tabs or spaces what's it it didn't it didn't explain it it's just use it studio gives you print and put s and stuff like that that's why they haven't explained anything yet i'm just coding it because i'm because reasons um i'm too lazy to type all that so because i know exactly what it does so let's do that make bet uh oh error will robinson i just got done watching the series i'm so sorry uh why is that a problem why is that a problem good morning is this speaking of your names well yeah hi hi that dude that dude that dude that dude um this is my job so we're just having fun what i is this the reason this is going to be so embarrassing because my seat is [ __ ] in the toilet like wait wrong thing make bet is there no it's wait a second did i oh [Laughter] i'm glad i can provide entertainment for y'all i'm i'm glad i can entertain you with my complete idiocy i mean i'm gonna be the [ __ ] of you know that's why i didn't get indentation right either it's like what the [ __ ] are you trying to do this isn't c not python to all those who just learned something from my idiocy and they're laughing at me i'm here for you python make bet it works now the deck is hot increase the bed oh that's very nice thank you all right so i'm going to forget [ __ ] and because i i haven't written this forever it's it's it's kind of humbling for me and i god knows i need humble humility so so let's do this let's do this next one i like it because like three little programs you know we can like do them like tiny little programs let's do this one we're going to call this one in c equals 10 yc equals greater than 10. i must not write coding class so we're going to do our loop we don't know what this stuff is doing yet we're going to learn it later but we're going to do it so i'm going to read this as a challenge i want to make a loop that loops 10 times and says i must not write code in class and it does c equals c minus 1 which i know we can shortcut that [ __ ] all right we're gonna do another one uh uh bad boy that's c again repetition right include include stud i o dot h to get all the functions we need for printing uh and then we need to int main because i forgot because it told me and then we now have indented right now i'm going to say so nc do i have to do i have to declare declare it i do right i have to give an initial value you can't just say hey i'm going to use it because this is in python right this equals then why they put oh they're doing it they're decrementing i see get it well see well c is greater than zero it can be uninitialized i was going to say yeah i might go like writing a book but you're going to do it eventually i'll get there it's been it's been a long time uh while season zero uh put as um uh i must write more c in class there so there so and i know it says c equals c minus one but i'm almost positive is there a linter here no linter right [ __ ] i need to activate a linter in vi unless that code minus all right make bad boy damn it oh [ __ ] semicolons i need to get a lantern in my vi shut up is she the ceiling tight as a good winter i have no linter i have no linter there is only zuul there is only zuul there is no data on this whole where's my zulu uh lint rolling the code and now you want to let it back up again this is a great movie that was a really good one was it on yesterday all right so make bad boy make my make this bad boy what the [ __ ] no completion for make holy [ __ ] make holy [ __ ] make all right bad boy 10 times nice who are you gonna call b boy i am i don't know what that means but okay is that one of the people that went to prison for like pissing on our nation's capital um so assume a shorter name than 20 characters i'm actually having fun writing c code as a breakdancer i did not know that i assume name shorter than 20 characters dear john your history what the [ __ ] sort of passive aggressive all right i'm gonna do it again this is fun because it's it's just you know i you know what if this is your first red time writing c that's good practice so let's do another one let's say adios how about that i'm making a program called audios audio i keep thinking i have to do that because i'm going to schmod it but i don't need to adios.c adios i almost type of surveillance every time because i'm so used to it stud io h this repetition is good for me and main uh then what what are we doing assume name shorter than 20 characters all right we're going to write a comment oh my god um you can't do that is that allowed assume name shorter than 20 characters um it spits in exit code put s uh just think invoid main we're we're being i don't think that is we're doing comments this is all covered in the official docs we're just kind of just having fun with these examples these examples are not meant to be written adios testing so apparently you can use these kind of comments now thank god uh scanf is only dedicated microsoft oh look at those bits thank you for that uh what shall we do next my main so we got a program there going on put s uh defecation i don't know i don't know about that one so so what are we gonna do here we got another thing um we're gonna we're gonna they're gonna tell us what all this stuff means later so don't panic if you don't know what it is right i happen to know what it is good reminder for me i love that you can use uh that kind of comment now not the other kind so we just proved it because that compiled that compiled so a character character is gonna we're gonna make a character array this is a string otherwise known as a string called x so shar uh x is 10 characters long uh put us uh uh enter ex-wife's name i don't know i don't know don't forget to send it going uh then what scanf ooh scanf this is the one that's gonna no i refuse to use scanf i will not use skin if uh wait a second i could be wrong is scanf bounded by how big the thing is you're scanning are we supposed to do uh scan what is it the alternative that's safer that has a has a buffer f s no i scan f like i don't think scanf is safe not drop table i don't think scanf is safe i think scanf is safe because the boundary is defined i i i have to do some research right here i i don't want to teach anybody bad c practices where they do memory before a lot of these like sprint efforts of anything they have sprint nf and they they have a boundary on them and they are considered the safe versions and i don't know if that has changed in the last 15 years it's actually longer than that god 20 years [ __ ] when was the last time i coded c code it was before i started skill stack i mean i did a little at skill set but it was just silly fun stuff so like significant c code i was still at ibm so that had to have been 2010 or before and the fork bomb project i did was i'm gonna say 2 000 and i was still happily married so it wasn't 2000 2007. no no no no no i had been remarried it was 2014. it was 2014. okay that's good i had to figure that out 2014. i had been remarried i did that in the new house that's right that's 2014. i was actually still running skill stack and working at ibm at the same time so that was 2013 2013 remember all right i'm just trying to that was like 10 years ago half almost 10 years ago scanf uh thinking of buffer will save your 360 by buffer thank you danny uh scanf is unsafe and not deprecated by microsoft uh it just marked as unsafe yeah we can still use it this is one of the reasons i'm afraid of this uh it was just just the unsafe standard yeah and and that's why that's why look to to all you pedantic see people out there i'm gonna call on you for something while we're doing this i want you to tell me when the book has something that is unsafe okay i'm going to actually search for all the functions as we use them and i want to make sure but this is where the problem with c uh all the bugs that are in c and all this uh i look it's going to be like every [ __ ] line i know everything in c is unsafe i know but there are safe versions of this you can bind that you can bound this i know you can do it i know there's safe ways to do it and i want to do the safe way to which functions are safe yeah it actually would be it's c yes um hey seashell on the seashore thank you let's cover that um i read somewhere that scanf i can input a maximum thinking character is that right is it bounded uh red summer impounded it is bounded it's nothing characters uh why do you not test it out sorry for the language but uh let's say rtfm i haven't heard anything like that plus it wouldn't make no sense yeah it's not bounded i i thought it was bounded by the size of the of the thing you're reading in however f w and k we can impose a limit on the length see this is what i was going to say if you set your character array then yeah yeah or you could do like a length thing you could have the length of the thing the above format guarantees that whatever whatever be the length of user input the data presence input buffer yeah scanf will only read 14 characters uh and hence even if even even in case the longer input is used we can prevent the buffer overflow i don't like i don't look i don't like that the first thing they teach you is how to create a buffer overflow do you see what i'm saying this has always been my annoyance with how c is taught and it's also the major problem i have with k and rc which does the same thing knrc teaches you very unsafe code right out of the get go and i'm like i i want to stop that i want to stop that and put s is fine put s is limited because you've got the the stuff right but scanf is not uh they pay no attention to security at all that's what i'm trying to tell you they don't care about security this is the problem the problem this is why people ban the standard c library functions from the code yeah it's garbage it absolutely is it's totally garbage and i don't want to learn that and so if if we can go through this book if it takes us an extra month i don't give a [ __ ] i want to find the safe alternatives to this so i can put annotations in there and so we can actually rewrite a head for c book that's using safe code do you know what i mean because because that that is the problem the problem is not that that it's an unsafe language it is but you know and the rust people are beating the sea community up over the head over this thing and i don't want it learning why it is wrong is actually good thing i agree i agree but see right now there's no conversation about the right way it's just the wrong way and they don't tell you it's the wrong way even they don't even say it uh you just read and i know we're going to use read here write your own functions yes uh even that's what happens if i put more more in the array and my professor would always dodge a question not it's like they have some ethics agreement not to tell you exactly exactly exactly the way to do this would be like 20 lines uh with all error checks all right i'm going to just say something uh the following is not safe but but fix later how about this this i but for now we keep it simple but we say fix me fix that we're gonna we're gonna follow this but i'm gonna say it's a fix me fixme and to do are both supported as as things so i i mean i refuse to write unsafe code without a warning i just i just can't do it i just can't stomach it and and that's that's why i'm pausing so in case you're wondering let's see that okay we're gonna go all the way two hours tonight we're already two hours in we're almost are we done with chapter one already take us forever to do i can't take this forever i don't care we're learning it we're learning we're going to see the right way so okay oh look they did it oh it's not unsafe it's not unsafe they bounded it i didn't read ahead yeah i didn't read a head they bounded it oh my god it warms my heart authors of head for c it warms my heart that you did scan off right i did i did not read ahead enough and i apologize for blaming you i apologize for braving you they use scanf properly in a safe way this is totally safe so scan f and then they bounded it they bounded it and they said no i'm just going to keep on reading we're going to say i only want to read when they say 9 characters oh x is 20 so they're reading exactly 19 why because the last not one the last uh character is a null byte and you got to make room for that so i'll do s here uh i'm going to do x and we'll put x and that'll read it into x and that will not overflow if if if i didn't do that i would have a memory buffer overflow and we could hack all kinds of [ __ ] in here uh i remember that from college mindset said you should mine's eye is awesome a much better programmer than me for this stuff we talking about main is the magic function name that gets entry point in the code yes null is always zero it's strings in strings and pointers yes absolutely this is true all right so we're going to do the scan and and then we're going to print it uh dear so-and-so your history now this is this is a print f instead of a print nf but it we don't it doesn't matter because you know we we've already bounded x to 20 into 19. so this is still safe there is an alternative to this called print nf which will which you can give a number which says don't print any more than that amount if it's succeeded but if you have bounded all your character arrays and read them properly you should be fine so maybe do some types of uh yeah yeah i've seen mindset a couple times i think uh well to see the warnings i like that idea should we do that missing return value now on your program yes i know um but we are just trying to copy the other one let's do that i like that idea frank thank you for the reminder i forgot about wall um can we can we set wall as a default environment variable what is for make what's the default environment variables that get added in so if i want to just use meg without making a make fall you know what i'm saying well extra air just set c flags yeah i was going to say because that's a i'm trying to keep it simple here you know so let's actually put that in our notes let's set c flags i don't have c flags probably set and i need to do that um [Music] uh i'm going to say set c let's do that so set um i set the c flags so that make works uh by default with without a make file uh at the moment so going to do this we're going to do uh export visits um c flags equals dash wall dash w extra um dash w air and i forgot those thank you for reminding me i knew about wall but i don't remember the other ones so much i'm going to put these in my bash bachelor see uh i went ahead and added uh these to bash rc um all right bash rc export lc colleague c we'll put it there exec bash dash l uh make adios there we go nice thank you everybody also bring you from compiling your code if you have uncorrect or uncorrected warnings i love it um thank you so much for that illinois warnings is very helpful later because in c some pointer operations which usually crash at one time nice nice nice uh disabled warnings i don't want to fix yes yes it's just very good now that compiled that compiled even though i don't have a return um [Music] oh and now it's gonna it's not gonna blow up ex-wife that's not my ex-wife what the [ __ ] i don't have a return code so why didn't it why didn't it blow up it didn't blow up i thought we were going to blow up on nordic unicorns printf um adios um s uh nice knowing you and we'll put x here i probably shouldn't put my x's name here enter x's name i won't put my ex-wife up with something else i'll put somebody else ah there's your return go oh semicolon semicolon i [ __ ] hate the semicolon adios uh oh adios uh h adios h nice know you shut up average slightly less average all right so uh a zero for female i want to make a dungeon dragon's character generator and see and we can use the f around for that all right so yeah all right so what do we got here we got uh what i want to know is why i don't have my return codes here how come i'm not failing people is this is it acceptable that i have a return code return zero is it fine you know what i mean it's obviously working right uh it gave me a zero four for not conforming my spec missing return code and ub for the caller c now includes it when did that start interesting okay i mean that's is that a c-11 thing interesting all right we're we're like way over we went two hours over um sharpen your pencil [ __ ] oh wow here's all the answers look at that i think we're almost done with the exercises main function up close god damn there's like a lot here there's a lot here uh we're gonna have to end though but i had fun i had fun i had fun again we're gonna do this tomorrow again so the same time same bad channel all that um and we'll just keep typing this stuff in and practicing compiling and stuff like that i see 99 edit it needs to be playing the system all the time in your career right i mean you could just change exchange jobs he's leaving people started i i believe you can change jobs yes yes but we're i'm going to go ahead and and and uh and close down the stream now because i i want to and does anybody have see related questions before we go uh my spec missing return code is ub for the call okay thanks bmt you all are fantastic thank you for being here and keeping me straight and helping me remember what to do i'm gonna go ahead and commit all this work for tonight um i'm gonna put it to do in here though uh to do [Music] and i'm gonna open an issue on this uh add a docker file for building uh eventually i mean i don't need it because i have it and i mean i have a system that does it let's run script that uh mounts x 11 sockets i don't i don't want to forget that work but i'm going to go ahead and skip it for now uh i'm going to add everything here i should probably add a get do you think we should commit the binaries with it probably not right it didn't disappoint taventanes have you been have you been enjoying it because i haven't actually worked through it but so far i've been really enjoying uh so do you guys think we should put the binaries and get we should probably we should probably put the binaries in get ignore and if we're going to include binaries making a proper release what do you think i kind of want to go through those things because uh make a proper release for the binaries i kind of want to use that as an opportunity to learn about how to make a release um i haven't done a lot of release create release creation in github and that's actually something i've been wanting to do so i think that's a good idea yeah i i'm going to go ahead and make a git ignore for mine um get ignore and in here because when you get it in there you can't get it out right so adios what do we got we got hello it's going to be a mess and i'll start making directories and [ __ ] but for right now i don't need it hello hello bet adios bad boy uh bad audios bad boy are not committed yeah usually they're not and that's i kind of want to get get in on a good practice as we get going just use actions we actually could there's yeah we could use like jekyll to build it all for us and that kind of stuff yeah so so let's do that let's go ahead and so that now i can go ahead and commit uh i'm gonna add actually i'm gonna add dash a that's commit add and i'm just gonna commit that um uh add work from chapter uh one on first day unfinished uh and i'm just gonna do get push uh so here you go uh head first if you want a copy i don't know why you would but if you want it there it is so we can go click on that and we can go see the code i made for today and you know i got my notes in here kind of helping me go through it um yeah that's what she said and you'll notice it didn't put any it didn't put any uh binaries in there because of the git ignore even though i didn't oh i did good so so i give you a star did you give me the star he came playing lame ass head for c projects a star nice all right so bad boy is my bad boy it's like i mean you know it's it's just for learning so i mean i think i've had a blast tonight doing this this has been really fun uh you're working on a pr already oh god oh you all are crazy you are crazy i am so happy you're here though thank you for going through this with me i'm actually really enjoying this and i've been wanting to vet this book like in detail for a long time i've read through the book uh but i haven't ever done any of the code or anything in it and i i checked it out to see if it had some things in it that that i really wanted when i found out for example that they used gcc and they recommended the proper style guidelines and some things like that that i agreed with and and the fact that they didn't give the answers and the whole approach i just really have been hopeful that this book was going to be a good one and god knows if it's not i'll call it out i'm not the kind of guy to you know to rose petal this thing i you know if it's not uh oh [ __ ] no comments you're gonna make a pr no comments um so that's all i have for tonight i'm actually going to uh uh to stop this stream so that we have a a a separate stream i i may actually come back and play another game uh tomorrow i'm supposed to work but i feel like the holiday has already started for me even though i have like a week left um [Music] i don't know so i may come back tonight i don't know if i'm gonna be back right away um [Music] because i mean technically i should be going to bed here pretty soon and but but it's been fun hopefully you can work through it the works of the book i don't know how long it's going to take but we'll keep working on look forward see you tomorrow same same time what do we decide if it's going to be the time we're going to do we're going do we're gonna do eight o'clock we're gonna do ama at eight we're gonna do it we're gonna do it at eight right we're gonna do it at eight o'clock i think we should do eight eight to nine maybe eight to ten i mean two hours is a lot of time though what do you think are you going to skip yoga tomorrow i don't want to skip yoga we should take a rest i am going to take rest on sunday but i my side is is healing it's not completely healed i don't know i don't know tomorrow we're supposed to be doing co-learning all day for kubernetes i need to do this if i don't do this i'm going to fall behind am i going to be able to make my certificates for kubernetes i've got to do the code learning tomorrow so so that's what we're going to be doing i'm going to go to bed i'm going to come back to the culinary um however i i did take a pretty big nap tonight so hugo rottweiler oh it's like you guys and go welcome you go out wow what did we do today what did we do today um you know what there's not going to be any time for ama at night i'm sorry i mean somebody was saying when we're gonna have other ama and i'm like i don't i don't know uh i do it i'm gonna kill this because we're done we're off topic now we're going to skip it on c i'm going to start streaming right away we're going to do some more planning and just screwing around and i'll change my status to just chatting okay i'll be right back i
Video description
Getting started with Head First C -- Watch live at https://www.twitch.tv/rwxrob