 I don't see you. I'm here. I'm on the car. I don't see you. I'm in your apartment. No, I made it. That should be my new thing. If I so if I'm running late, I'll just lie and say I'm already there. I'll try that next time. I'll just be like, I'm already at the party. I didn't see you. I'm there. Check the bathroom. Check the bathroom. Like you're lost. You don't know where you are. You know you're at the party, but you don't know exactly where. Look for me. I'm lost. Woo. Okay. I think we're good. I think everything's streaming and all that. So I'll start the recording. So we put the chat over here. All right. People are smart. They won't be in that chat. You never know. People seem to like the chat. We're not smart. Okay. The smart people will not be in that chat. They will be in some other chat. If they really need to be in a chat. They should be in a different one. All right. One full of intelligence and not us. It's Monday, June 11th, 2018. I'm rim. I'm Scott. And this is Geek Nights tonight. Containers like Docker or some shit. I came to say to Scott, I'm leaving a little bit to do something productive. Why? Why not? Just go do that right now. You're getting the status update. It's all you need. Like how much time do you waste telling me what you're up to? You could have been doing the thing that you're going to do. Already. You could have already made some progress. Beep, beep, beep, beep, beep. All right. I got my opening bit. Sometimes I think that of myself. I'm due for a haircut, actually. All right. You can see your scalp there. Yeah. Oh, what do you want? An old man. You're just going to have long hair with a big hole? Or are you going to just cover it up with the front hairs? If it ever got too big, I would just cut it. Join the bald brotherhood. It's very convenient. It sounds like a supervillain group. It's convenient and refreshing. All right. Turn that off. Inexpensive. So if you follow me on Twitter, you might have noticed that I was talking about axe murder a lot recently. Why? I ended up randomly partly because I'm into horror and stuff. Please do not give him any axes. Do I own an axe? I don't think I own an axe. But anyway, I noticed something while I was learning more about axe murder and what I noticed was that axe murder is a thing. I don't really hope that all these stories about government spying on Google searches is true. So I guess the anti-axe murder people. Here's the thing I realized, that axe murder is its own category of murder separate from just murder. No one sounds like, oh, he's a knife murderer. People say he's a murderer or they say he's a serial killer or they say that person is an axe murderer. And I wondered why is axe murder its own category? Because it was a thing. Yeah. Axe murder was an axe murder from like the late like 1700s early 1800s until about 1960 was its own kind of murder in the U.S. Common enough to have its own colloquial term. There's a whole Wikipedia page about it. Yeah. Like axe murder was a thing. I know. Do you know why? Because I really... Because there were people who were fucking axe murderers. But why are there no longer axe murderers? Because not a lot of people have axes these days. Back in the day, you'd be chopping wood. It's not that people don't have axes. I mean they do, but not like in the olden days. It's actually that people don't have an excuse to carry axes with them all the time. So to the extent of like there's this one case that I was reading about this pretty, I mean it's funny as axe murder can be. It's long enough ago to where I feel like I can talk about this. But it sort of really drives home the point that axe murder was such a thing. So this family was axe murdered. The weird thing about the 1800s and the early 1900s is that when there was an axe murder, there would always be multiple likely axe murder suspects. So in this case, this family got axe murdered. The people who walk around with axes all the time. So I'm going to list for you very briefly some of the suspects in this case. Let's see if you can guess which one of these people was the axe murder. All of the above. So not only one axe murder in this case. The first suspect was a dude who repeatedly threatened the family with murder. He was definitely not the axe murderer, but he threatened the family that was axe murdered with murder multiple times. Right before the murder happened. But he had a stone cold alibi. There was another person who confessed to the axe murder, knew a lot of details about the axe murder, and was weirdly obsessed with axe murder. He was a reverend who wandered around studying axe murder. Despite confessing to the axe murder, he definitely didn't do it and was just crazy and apparently confessed to a lot of axe murders. But there was another dude. You're really making this quiz easy by telling me the right answer before I get to the bottom. It's like multiple choice, but they already told you which choices are true. Yeah, because all those are like the low hanging fruit. Here's a dude who showed up in town the morning after the axe murders and was dressed in a suit, but his pants were all muddy and wet and ruined. And he shows up, he's a hobo, he has an axe, and he asks for a job. And he gets a job with some company that's doing stuff. And his coworkers start complaining to the foreman that he sleeps with his axe, that he mutters about chopping people's heads off constantly, and when the police go to talk to him about potentially being the axe murdering suspect, the police, the sheriff like walks up behind him and notices that he is just standing alone in the woods holding his axe, muttering about chopping people's heads off, and then suddenly flips out and starts swinging the axe at random objects. That guy definitely was not the axe murderer either. He's just a hobo who sleeps with his axe and probably axe murdered other people. But he definitely did not axe murder these people. Well that was obvious because when he came into town all muddy, he wasn't all bloody and his axe wasn't bloody, and he doesn't seem like someone who could clean things. Yeah, so there's like two other suspects in this case, one of whom was eventually arrested and convicted of axe murder of a bunch of other people, but even that one probably didn't do this murder. So yeah, axe murder is a thing, and they bring this back to technology and Monday Geek Nights. The moral of the story is axe murder was a thing because a huge percentage of murders in that time period were committed via axe because axes were the most accessible implement of easy murder. Also, props to all the creepy people who came out of the woodwork in my Twitter to explain to me how hard it is to kill someone with a knife compared to an axe. Really glad that so many people know so much about knife murder. Yeah, if you stab someone a bunch of times, at least in modern times especially, they got a good chance of surviving. Yeah, that's why when you stab them real good. If you go at someone with something big, like an axe or a steady, then their chances of survival go way down. That's why when you watch a prison movie, someone runs up behind someone and stabs them like 50 times, like pip pip pip pip pip pip, that's why. Executioners who have to kill people with the low effort because they got to go home too, they don't stab someone with a knife, right? They got to axe on a big long wooden thing or some other implement. The only reason axe murder cease to be a thing in America is because now everybody has guns and all the murders that would have been axes are guns now. I feel like we should start calling gun murder gun murder and treat it like this, like its own category that can be dealt with because it's a technology problem. Too many people have access to guns and an excuse to carry them around and have them in their homes. Not having axes in the day and back in the day. So just people used to keep axes in their houses because everybody needed a goddamn axe. You don't walk around with it when you're not going to chop wood. Because people were chopping wood all the time. I don't carry my hammer around but I'm not going to hammer some nails. Someone walking down the street with an axe back then was not that uncommon. Yeah, but you're not unless you're going to axe something right now you shouldn't be carrying an axe. Yeah, but if you're in someone's house and decided to kill him there's probably a bunch of axes all over that house. In the very least there's a bunch in the shed, maybe downstairs in the axe room. Don't go in a spooky shed with crazy hobo. The hobo, so the scarier thing, this is not relevant to technology at all. The scariest thing I learned is that there's a pretty solid theory that a huge number of the axe murders in this era were all perpetrated by one axe murdering hobo riding trains around murdering families. The muddy one. Yeah, not that guy, a different axe hobo. The lesson there is that we joke from the Simpsons about the stabbing hobos. They were stabbing hobos. They're almost, no, there were not stabbing hobos. There are almost no stabbing hobos but there was at least one prolific axe in hobo. Close enough. So you got any news that isn't axe murder? There's a lot of tech news and we didn't use it because it was mostly last week when we had a Monday episode and then we forgot a bunch of it. But some of it was so big we didn't forget it. So there's the... Well, the biggest one, let's start with the github thing. Microsoft bought github, which is really interesting. Yeah, it's weird because the technology world I'm seeing the exact opposite take in about equal numbers. I see a lot of the ultra OSS purists freaking out about how Microsoft... Well, because the olden days was Microsoft versus Linux. Embrace and extend. Now there's Linux for Windows system, whatever that I use at work. The Windows subsystem for Linux. The big difference that happened is that Linux... People know who wrote git originally. Linus Torvald. You know what I... The big thing that changed though, not to get into the whole debate around this, if it's a good thing, if it's a bad thing, is Microsoft evil, is whatever, is that Linux is in no way a competitor to Windows. They solve different problems at this point. There is no future for consumer Linux on the desktop. Except in... Android is Linux. Yup. Android on the desktop. Because for most people... There's not a lot of future for the desktop. That's the point. Android now just exists on the phones basically. But anyway... And the phones are the primary PCs for a lot of people. The main reason this happened, people don't seem to know. They're just like thinking about the sort of like, you know, Microsoft versus Linux thing, right? First of all, is anything bad going to happen for actual users? Probably not. What has Microsoft bought and ruined? Yeah. They don't have a history of buying and ruining really that I can think of. But the main reason this happened is because GitHub was not making money. GitHub was very important and couldn't die because it was very important and still is. Because a lot of shit's hosted there. And a lot of companies depend on it. Yup. And... It is shocking how many people are incapable of like, big companies will use GitHub because if they can't deal with managing version control in-house. But GitHub also direly needed a new CEO. Yeah, that too. This just sort of solved all of GitHub's problems. And Microsoft probably made the best deal of the other people who could have bought them and saved them. So that's what they just said. Okay, you made the best deal, we'll go with you. I'm pretty confident GitHub is going to just continue to function as it did. And if anything, I think it'll just get better. And if it somehow turns evil, well, I mean, GitHub isn't Git. You can just host your own Git. You can just GitLab, which is perfectly great. Yup. Or many other alternatives if you just want to, if you need to host Git on a server. It's crazy to me to realize that how much my career has changed over the years that I realize I don't actually know what all my different engineering teams use for their version control or source control. In the year 2018, you should pretty much be using Git or not being, you know, allowed to use something else. What about some version? No. Mercurial? No. Let's go. No. So in some other news, Apple, Apple stuff happened. Yeah. This is the Apple Worldwide Developer Conference, which is when they announce historically all of their software things. So mostly, you know, iOS updates, iWatch updates, OSX updates. Most of the stuff was really the lame stuff that no one gives a shit about. Like we got new animojis and AR shit, guys. Yeah. I saw very little social media buzz compared to what I usually see. Yeah. I mean, you know, it's developer stuff, right? So the big news is to come out of this. Our number one, this is going to basically be a way to make like a universal app, like the same app will go in the iOS app store and the OSX app store. And it's the same app. You write the app once in Swift and it, you know, the app looks good on an iPhone, an iPad, and then a Mac. All the same code, right? Yeah. Which is, sure, why wouldn't you do that? And then the other one, the bigger news, at least for nerds, which is great for Monday, actual tech news, they have decided to deprecate OpenGL on OSX and their, you know, iOS and another platform. Yeah. Which is a big deal because, well, they never gave a shit about games really, but iOS, I guess, they gave a shit about games. Yeah. Well, it's interesting though, because in terms of Apple, like there's a level of game that is sort of targeted at that platform now, and all other PC gaming will be windows forever. Right. So you got to understand what, like if you don't understand what OpenGL is, right? So you have a computer and you want to write some app that does 3D shit and you want that 3D shit to be done by LedGPU, right? Yeah. So you, you know, import the OpenGL libraries and there's an API for talking to that GPU and making 3D shit happen and it's standard. So if you write at your code to speak to OpenGL libraries, you can go to some other platform, say I write it for Windows, I can now go to OSX and I don't have to change too much because there's still OpenGL over there and all my code speaks OpenGL. I just have to recompile it and I should, you know, you're not going to be perfectly good to go, but you're going to be pretty close to good to go. And this matters, not for someone who's necessarily making a game, maybe, unless it's a very, very intense game where you're micromanaging your GPU bits, but if you're writing a game engine, that's going to matter a lot, right? Because a game engine is pretty much just speaking OpenGL all the time. So Apple, on their platform, says this thing called Metal, which is a different API for speaking to the GPU and they think it's better and whatnot and such and such, you know, because it's all customized for Apple's stuff. I mean supposedly it's compatible with IntelliMD and NVIDIA GPUs. Yeah, you know, you know, whether... Which is irrelevant because you can't really buy your video card with an Apple. Whether Metal is good or not is besides the point because it's not OpenGL. So if you write your app to speak Metal, your app ain't running on any other platform without a lot of work. It ain't going to run on the Switch or the PS4 or the Windows or pretty much anything else. So on the one hand, this could be a lot of work. You know, even if, you know, you're just using a game engine like say Unity or something like that, Unreal, those people who make those engines now either have to do a shit ton of work to sort this out so that they can build a game on multiple platforms once OpenGL doesn't work on Macs anymore or just not let you, you know, you have to write your app twice or basically just make a huge fucking hassle for all game developers, especially since even if those engines, you know, cover all the platforms and, you know, will let you build against Metal and against OpenGL and deliver both, it's like that's going to be buggy as hell. You're going to have bugs that show up on OS X that don't show up on other platforms, Windows is basically just creating a nightmare for anyone who works with anything 3D or... Well, what I'd actually like to see when I don't have any stats on because I basically just ignore Apple as a PC gaming platform is how many... How many games using Unity actually run on OS X? It's mostly iOS as the real situation. Yeah. Are games market? But I mean, if you want to talk, like Hearthstone is actually written on Unity and it runs in every platform. Yeah. Like iPad, OS X, and Windows. I mean, Unity will support Metal just fine. It'll mostly come down to, I think, games that have high... Well, it's a hassle for them to do it and it's going to be bugs, you know, on one way or the other, right? Because now you've got... you've got these multiple targets that's just one. Yeah, but then again, on PC, you always have multiple targets with all the different hardware profiles. Yeah, most of those things have been washed away thanks to, like, you know... I would argue that most of them have just been washed below where you pay attention to them, but they're still there in the game development studios themselves. Actually, most of those sort of problems these days are from what I can tell. They're handled by the NVIDIA driver itself. This is why every time there's new games that come out, you'll see, like, the NVIDIA and AMD drivers will make patches. Like, when you fix bugs with this game in particular, I think that in... like, I think if you open up the source code at the NVIDIA driver, this problem... I think there's, like, files that are like, if game equals this, change GPU settings to that. And there's, like, a huge mega list of, like, detecting what specific game and software is running and changing things based on... Though I've found most of those are just minor performance improvements. Like, the game doesn't break or anything. Yeah, you know, there's a lot of things going on, but... Yeah, but they're not as big a deal as you're making them out to be. No, but the people develop... When you're developing a big AAA game for the PC, you work with NVIDIA slash AMD to work these things out, you know, and things aren't going to match up nicely. Well, I mean, I think in the end this doesn't matter that much because big studios either decide if they even target Macs or not. And most games... It's not about... You keep thinking about Mac. iOS is running the same fucking thing. Yeah. So iOS has tons of 3D games going on. Yeah, but I feel like those games are targeting a tablet, phone, ecosystem, and it's a very different business model. A lot of people write the game once, and then they build it to run in iOS and Windows and Android and everything. But I guess the studios that... Now that's going to be a way, way more difficult. It's going to be twice as difficult. I don't think it's going to be twice as difficult. It mostly seems like it's really small shops that are complaining about this, and everyone else seems fine with it. Like the articles I'm finding... I haven't seen anyone saying anything positive about it besides Apple. I haven't seen people say much of anything about it, and these articles are all kind of useless when I was reading them today. It's definitely not good for the openness of, you know, if you're on a Mac and suddenly you want to write some code and use your GPU, suddenly you've got to go through this, you know, metal closed API business. Yeah, but metal will be the default standard for iOS. If you're targeting iOS, if you care at all, you'll just support it, and that'll be the end of that. In some other news... Because all the other stuff, I mean, I don't... Is there any other Apple announcement that you care about? Because I don't use any Apple stuff, so I don't, at this point. Most of it is, you know, news that no one cares about. Like, oh, these are the features we're going to add to iOS, and it's stuff like, stuff to help you not be distracted by your phone so much. Like, you can set it to be like, I only want to use Twitter for an hour a day, and then your phone after you use Twitter for an hour, it'll be like, hey, stop using Twitter, you used your hour for a day. Android's had something like that forever. Yeah. Yeah, that's really a feature that they announced. Yup. Because I realized I don't own any Apple devices at this point. Not one. So I look to you because you're the only, you use the Apple, you're in the Apple ecosystem. I only have an iPhone and I watch an iPad. Yeah, only. You don't use Siri. I guess you definitely don't use Siri. No, I disabled that shit. Yeah. I disabled all. Disabled as hell. I do use OK Google. Yeah, they added Siri shortcuts. You can program your own Siri shortcuts so I can say like, Siri, ByteRib, and have that program to do a specific thing. Yeah. Well, you got to get the Arduino to hook up to some sort of teeth and some way to get them over to me. That's right. I mean, I would use something like that, but I found increasingly, because I set up OK Google. I've had the ability to do stuff like that for a long time. Listen, I'm fine. You know, the only problem with it is I do not want to talk out loud. It's too much effort to open my mouth. I thought I tried to come up with ways where I would use it at home. If I had a car, I might turn it on in the car. I use OK Google when I'm driving quite a bit. When are you driving? That's it. I don't drive that often, but when I'm driving, like I was in Virginia a little while ago and I rented a car and I drove a lot. And you know what? I used it to interact with my phone and respond to text messages while I was driving. But other than when I'm driving, I don't ever want to talk out loud any device. I can talk to the Apple Watch to respond to like Google Hangout while I'm biking, but I don't. Well, I would, I thought I'd use it like while I'm cooking maybe, but I never need to because at most I have a screen with a recipe up and I never need to interact with any other device while I'm cooking. And if I want to change like what music's playing, I just touch my watch. There's a very brief moment where my hands are covered in like chicken grease or I don't want to touch my watch. And as soon as I've washed my hands, I can touch my watch again. Mostly I just don't want those devices listening to me all the time. I mean, turning off Siri won't make them not listen if they want to. So one other news that's just really funny because it's one of those, the news popped up about it a few times and every time it pops up, all I think is wow, that still exists. But as of July 17th, so about a month from now, Yahoo Messenger will actually be dead. Apparently they already shut off chat, but the service is still up until July 17th for people to download their chat histories. I'm amazed that anyone was still using Yahoo Messenger. I could never think of any use case for it. The husk of Yahoo is slowly being spread out among companies because as you all know, Flickr was bought. So Flickr probably has a real home now. I'm going to continue to use Flickr, I think. Okay, I'll keep my Flickr alive, but I'm not using it. Well, you know what I use it for? I don't use it as my photo organizer or anything, but I use it as my primary mechanism to publish in bulk photos I take that other people might want to see. It's my online gallery because it is still the best price per function feature. It's the best service of that kind in the world in terms of how much I pay for it versus how much I get out of it. The Lightroom stuff's okay, but it's sort of hard to share with my family and friends. They seem more used to Flickr and I just don't want to change. All right, let's see. Yeah, Unity. All Unity games supposedly just work on iOS. But aren't they still using OpenGL, though? I mean, Unity Sports Metal, so... Does it? Yeah. I don't know. When did they add that? I mean, all the development I care about was web, so it doesn't matter. I mean, all these... Every platform still... OpenGL still works. It's just been deprecated. They're going to remove it at some point. It's basically like removing a headphone jack, right? It's like, oh, I can still use my headphone jack adapter and stuff, you know, it's like, that's the kind of move it is. It's a headphone jack removing kind of move. I don't think it'll materially impact... It's just a software API level headphone jack removal, right? Like, it's open standard for talking to 3D cards. It's called OpenGL. It's like a headphone jack. It's an open standard. Every machine that has a GPU uses it. We're going to make you use this metal or this lightning cable instead. Yeah, I just don't think it'll actually affect the game industry much. We'll see. You might see some games that are exclusive here and there. Well, I think you're going to continue to see a lot of games that are exclusive to Windows. Well, you might see some, you know, bugs here and there, you know, things like that. Yeah, I think it'll be fine. But anyway, things of the day. So Scott has over the years given me shit when he thinks that my thing of the day is too low hanging fruit. And yet this is the second thing of the day in a row. Scott has brought to the table that is literally just a tweet. I accompanied my previous tweet only thing of the day with another thing. Yeah, I'm just saying, I'm just pointing out that your thing of the day is a link to a tweet. You've set the bar at a particular point. We've done tweet things of the day before. I've done tweet things of the day many times. And now I will no longer feel ashamed doing so. Well, the point is. This one's pretty good, though. I got to say, though, the Internet has actually been producing fewer things of the day than it has in the past. I got plenty. I got a whole queue of weird Internet shit. Anyway, so apparently there's, I guess, I don't know if there's a particular kind of caterpillar or caterpillars in general, but apparently they react to sound, right? It's these small vibrations in the air greatly disturb the caterpillars. And if you yell, they shake a lot. So here's when you get a situation where there's a lot of caterpillars altogether, you can make noise and then they will all disrupt together in some sort of audio visualization kind of thing. Well, it's funny because I was watching a lot of fun. I was watching the Vine compilations and that's a thing. Caterpillar ray. And other people have noticed this over the years. Right, so we have, you know, we got some caterpillar ray. We got some yelling and some caterpillars on the stoop and they go, nah. I mean, I assume it's just a basic self-defense mechanism. I don't know. Maybe it's like because the air moves their little hairy bits that makes them confused and they move, you know. I don't think they're confused. I think they detect it and it's some sort of threat response. Caterpillar expert, call us. Yep. So my thing of the day that is not the caterpillar thing is if you ever look at like old computers, when I say old, I'm talking like you play a cassette tape into it to load a game and then play the game. Which usually show a loading screen, but a lot of the time no other loading keys were provided to reassure the anxious modem. And I remember a lot of things doing this. The same pin of process put a volume set while the game was loading. And they just happen that eventually the game would load. Those computers don't have a lot of hardware in them, so probably memory or registers that are shared between the video and the loading mechanism. So probably like while you're loading, you don't need to show anything on the screen. You need to determine the correct volume for tape output. A volume set too low or too high would crash the loading process later machines as the loading routine. And in the case of this machine, these bands were intentional and hard-coded into the rock. Slow and thick cyan and red bands would indicate searching or the pilot signal for the data. Finner, blue and yellow bands indicate header and data blocks loading into memory. But you can see this at the start of most software work on Android. Even though they were sort of already on the back. We're actually useful. Yeah, I mean, while if you're loading in the same program every time, you should be able to see, if you see something different on the screen, you know that some loading thing happened wrong. Well, it's not just that. It's kind of like old network infrastructure, like old hubs and like old early network devices. There'd be a little LEDs that would light up or divide, they'd light up when there was activity. And they basically just piggybacked over the actual signals going over the wire. But they also ended up indicating the level of activity because the two things were tied. This is a very similar thing. The appearance and width of the bands would give you a good indicator of how well you were getting the data, whether or not it was actually loading, et cetera. And because people were used to them, you eventually get to this point to where later computers would actually implement the bands to obtain a fancy... And the bands actually encode information and an expert user could watch these bands and understand how well their loader was functioning. And it got to the point to where these bands were literally 100% virtualized by applications. And this is a like five minute video that actually goes into pretty good detail explaining the history of these loading bands. And it's actually pretty fascinating, especially you'll probably enjoy this if you don't know anything about that era of computing. There's a lot of tangents and side bits here. You'll learn a lot about what computers were like back in the day. There's a reason why the Nintendo Entertainment System, or even the Atari 2600, was a far superior gaming machine to even the most advanced PCs of the day. Well, because the PCs had to run a much wider range of software, and a whole keyboard going on and all kinds of peripherals that the NES didn't have to deal with. The NES is very limited in some ways in order to become more advanced in other ways. Yeah, the gaming on PCs back in the day was basically garba. All right, let's get into the meta. YouTube body was playing in the stream. So actually, if someone has a question in the stream, let's see. Turn that off. Did you break it again? No, no, no. So, we actually have a whole bus and a weird pipeline set up to send data around between OBS and Audition and the Marantz here and this compressor. And let's see. It's not working because you fucked it up. No, I don't think it seems to be working fine. I don't know why you keep touching it. I actually haven't touched anything since when your microphone was broken. There's not an amount of the webcam on a more permanent thing. Meta moments. In the meta moment, the Book Club book is still Emily Wilson's translation over the Odyssey. You should soon and do the show on it, I assume. Making progress. It's not a long ride the subway. It's actually today, but it's not a long read. If you read this translation at least. Otherwise, our next big convention is probably going to be summer, which is hard to read. PAX West. And then after that, it's into PAX Unplugged and the anime NYC probably. There's a good chance we'll be there. We'll see them Thanksgiving then PAX Unplugged three weeks in a row. And then right after that, the anime NYC's first year was last year and the only reason we didn't go is because it was during PAX Unplugged. And then right after that, I think we got MAG Fest and then PAX South and then PAX East and the cycle repeats. A lot of PAX is coming up. Before any conventions, it's going to be summer. Enjoy the summer. Read the Odyssey on the beach. And then it's going to be primarily focused on us being outside not making content. So whenever it rains, you'll see like Geeknize presents your 10 episodes coming. All right. Main bit. Let me pull up by I guess Docker. So yeah, containers. I think we've talked off and on about things like Docker and various containers. It's weird because like this is on the one hand it's almost sort of like a new hotness but on the other hand, it's actually been around for some years now. Well, the core concept has been around in varying forms. The actual thing has been around for years now. But I mean, there's a lot of different container formats and container platforms and I guess Docker is still the most well-known king one that is the one. And there's a lot of reasons for that. It's pretty well supported. It's a pretty mature container platform at this point. So basically, it is the deal. It actually took me quite a while to figure out how these things actually fucking work because they don't, all the documentation is like how to use them. And the examples of even how to use them don't actually cover any real-world use case. They're a hello world that get you nowhere. Or they're, someone made an application. And none of them actually tell you what's actually happening. They're just like type this, then type this. Congratulations. Yep. Now, that is both good and bad because on one hand, I do want like the hello world to exist for everything because I found back in the day when I was trying to write like a lot of soap code for Python and stuff back when I actually wrote code what I'd find is that there'd always be like a hello world tutorial for some library and invariably, they didn't actually even work. Like you'd copy paste an example and it just wouldn't work and you couldn't ask anyone about it. So I'm glad that that level exists here like the babies first like make it just work. But at the same time, I do find in my professional experience that people who are using things like Docker literally have no idea how they work. No. So here's the thing, right? You got first you got to think about what problem are we trying to solve? And there's a few problems that these things the new containers Docker at all solve that were solved partially or in different ways by older technologies, right? And a lot of people confuse the containers for those older technologies because from a user experience, a user interface perspective they seem very similar even though they're doing something completely different. So the main problem we're trying to solve is that you have one computer with one CPU even if it's multi-core doesn't matter. I would argue there's other problems you might be trying to solve but I'll get back to that. One set of RAM, one hard drive, one network connection but you want to run multiple or develop really multiple applications that really don't go well together, right? They can't be like you only got one network card but you want to run like two things and all that. Now before the Linux Santa's come in, yes if you make a fully formed like Linux application that puts all its stuff and all its dependencies and all the right directories in the Linux file system they shouldn't ever like interact or interfere with each other. You can make you know one computer do all these things at once the problem is now you're trying to deploy this application or deliver it or have somebody else run it, you know you've got someone a new developer comes in back in the day or two every system has to be perfectly identical because everything is so tied to the system right? One thing people did back in the days we had things like trutes and BSD jails which is just better trutes but they're BSD only where you would log into a Unix machine and as far you knew you were like a root and you would see this whole root file system you had permissions on the whole of a fucking thing but really you were trapped in this little area of a bigger Unix system, you just couldn't bust out and go up there, right? There was actually, like if you were on the real system, you would see all these folders, like slash something, slash rim, and in that slash rim would be a slash etsy, slash dev, slash USR, a full system in that directory. But when rim logs in, he's trapped in that little world. Yeah. So, you know, that's one way to do it. Another thing people would use a lot is just virtual machine. Just have a whole virtual machine. The thing is, that actually works great. You're completely container inside this whole VM system. But that kills you in terms of performance, first of all. Yeah. And second of all, it's doing a lot of things you don't need to do, right? The point of a VM is like, OK, I need to pretend that I have, you know, like 10 network cards and I've only got, you know, one in the computer. I need 10. I'm just going to use software to pretend this 10 video card. Or just I want a bunch of applications running and I want them to act like they're the only thing running on top of this OS. So nothing interferes. Simulating hardware with software is not an efficient way to do that, necessarily, even though VMs have gotten real good, especially the CPUs. And we've talked about that before, like para-virtualization versus full virtualization and all that nonsense. And VMs also, if you're a developer, VMs make working hard, because now it's like, even though you're on your computer, you've got to like go into this other computer on your computer to access stuff and shared folders. Containers thing. How did they fucking work? So here's the deal. In Linux, they've added these two APIs. They added them years ago. But there's other things they've done. But the major things that they've done is they've added a feature called C-groups and a feature called namespaces. And what this does on a Linux system is you create a C-group and you create some processes that are in the C-group. And what you can do is you can specify any, it's called control group. That's what the C is for. Any processes in this control group can only access this much RAM, this much CPU, this much network, this much whatever. And you can limit the resources available to certain processes so that they can't take over your whole system. And that's sort of like what a virtual machine does, right? Is where if you're using a VM, but you're really only, you're not interested in simulating hardware. You're just interested in keeping some processes from using your whole system. Then C-groups pretty much cover that feature, right? It just uses a Linux permissions thing to limit those processes from using, because otherwise 32 gigs of RAM, they've only got eight gigs. Because otherwise, 10 VMs, that's 10 operating systems to keep up to date. And now you don't need to run another copy of the Linux kernel inside of VM and boot it and set that all up. You just need to say, hey, these processes get these eight gigs of RAM the end of story, right? So that's what the C-groups does. The namespaces sort of covers the other part where it says, okay, these group of processes here, any processes in this namespace can only see, they can only see each other. They can only see these other processes. They can only see these network there and you're limiting their vision. That's the truth in the BSD Jails did, right? So you combine these two things together and you actually have seen some tutorials online, people showing you, they were hard to find where you can basically do exactly what Docker does just by using just the Unix, just your shell and just like catting certain, and echoing certain things into various files in proc and dev to mostly proc, to basically create C-groups, create namespaces and put processes in them. And then to prove that those were actually doing exactly the same thing that Docker is doing, they then used Docker commands to talk to the processes that were created in those C-groups. And it's the exact same things. Docker is really just a rapper, a convenience rapper, around these C-group and namespace features. Now the value of that- To isolate processes on your OS, but they're basically those processes are running natively just like any other process is running. Now, the sort of the value of making that easier shouldn't really be understated because in my experience, especially like, you know, in the modern world, like it's been a long time since the last time I was writing code or anything. It's actually pretty hard to hire very skilled developers who are also very fluent in UNIX Linux. Yes, so that's been my problem at work forever is like, I'm the king of UNIX, basically, just because I happened to knew what Linux was when I was in high school, I used it. Like even in RIT, it was often my primary OS when I wasn't gaming so much. Geek Nights was produced entirely in Linux for a long time. Right, you know, not many people were Linux nerds. So because I have those UNIX skills a lot of people don't have at work. It's for everyone else as a Mac and they don't know how to Linux except that me. So when it comes to things like DevOps and Sysadmin, even though I'm programming is my job, I have all these other skills. Speaking of which, if anyone out there is a senior skilled CC++ developer who also knows other languages and is a pretty much Linux expert like Scott, I am me, you know me. I'm really looking to hire like six of you. You have enough money? Yeah, I just can't find people. You need like a million dollars, anyway. I just can't find people. Anyway, so yeah, so that's what's going on. The other thing Docker does that beyond just managing your C group and your namespace features of the kernel is they have this sort of repository package system, right, of containers. So you can basically make a Docker container, which is really just a list of instructions on how to make a system. So it's sort of like, you know, okay, do this command and this command and this command and I've got your container. And then you can build a container from a container. So what you eventually, what you do in real life is you're like your first line of your container file is like Ubuntu version, whatever. And then your next line is apt install this and then your next line is edit this config file. And now that's how to build your container, right? So then you take that container and you share it. So now other people can then go and just download that file or you deliver that file with your code or they use Docker install to get it from the main Docker repository. And now if you can just download this container and boom, there it is, it's running. So you can solve the problem, not just of separating and making your apps, you know, not touch each other on the same system, but you can solve the problem of, okay, I've got all these developers all using different computers, who knows what, but anyone who wants to work on my application and develop this software, you can get cloned and download the software, the code, and then you can type Docker up, Docker and compose up. And now look at that, you've got the environment running, you don't have to do any environment setup. Yep, and then you don't have to know anything about environment setup or anything about Unix. In the previous era, like before there were like easy ways to do this, environment setup was a huge part of the rollout process. If anything I've ever been involved in. Yeah, I mean, you'd show up at a new job as a developer and it would take you a day or change to set things up. It took me three or four days to, well, because I was doing IT, I wasn't coding, but even then, I needed, everyone had to have like a local VM that basically mirrored what the production systems are like, so you had an environment like test and stage. There are tools like that is Vagrant, which is a tool that helps you do that with virtual box more easily. But you know, this- But even then, it was a pain in the ass. Yeah, so, but people were amazed at my work when I had it running in like a day. Like I know what the hell I'm doing. That's why you hired me, right? So the thing is, as cool as that all sounds on paper, the reality is that Docker has actually got a lot of crappy problems. It's not great. So first of all, right, using these Linux kernel APIs, guess what, Windows and OXS don't have those APIs. Yeah, but who cares? If you run and run Docker on Windows or OS X, what's actually basically happening is you're running a virtual machine with a Linux kernel in it that you then talk to. But honestly, who cares? What's your server gonna be but a Linux server? Well, because you're talking about local development, right? Yeah. So the next problem that makes Docker kind of crappy is like this volumes thing, right? Which I still don't fully understand. But basically, you know, you still want to have some sort of, it has to do with storage, right? So you have some storage, you want to have it shared between containers. Maybe that's where your source code is. Maybe that's where your binaries are. Or maybe you're using these containers on a production environment because you spin what, you spin them up. You've got to be your database in a volume somewhere so that all these different database servers can all access something like that, right? And basically the way the volumes are implemented, as far as I can tell, I don't know the details, but the result as a user of them is that it's complete garbage. It kills like an OS X or performance just goes to shit on Linux, you have all these kinds of issues. Like files getting overwritten or permissions problems and all kinds of night. Like you go into the container and in the container you're root for everything. And then so that container writes to a volume and then you leave the container and now the file is root even though in the other container it wasn't root and you can't translate the user permissions over to the inside of the container. You got issues like you do Docker up and you'd have a dependency. You say, ah, don't start this container until that other container is started. So that other container starts but it hasn't actually started the application in the container yet but the other container has no way of knowing. So now it fails to start up because the database hasn't actually started and you're supposed to, the solution for this the official solution is to write a wrapper script for everything, which is complete horseshit duct tape garbage, right? It's not elegant or good at all. So, you know, it's like as nice as this is like, ah, you've made a wrapper for these APIs that are otherwise difficult to use. It's still really crappy. And not well done and not nice. So what I would recommend to people is if you want to solve the problems of I'm developing a software and I need other people to also develop the software who have different computers and I want them to be able to get up to speed quickly and not have to learn Unix then I think Docker and other containers are a good solution for that because it makes it easy. If you want to run your stuff in production I do not recommend the Docker. Yeah, well, well. So it depends on what you're putting in production because an area that I actually have a lot of wood to cut right now is a bunch of microservices and Docker is actually pretty good for productionizing microservices in certain contexts. If you've got something real simple, right? Like if you want to, like a real simple you want to make an API that does really local stuff and provides like a REST interface for a limited set of interactions on one type of thing. If you've got something so simple it just runs, it's one process, it runs on its own, right? It doesn't need a whole lot of dependencies and it's not complicated. You can probably just make it in a container and get that container to run on some sort of serverless platform and it'll be just fine. Because a big part of like modern delivery of software especially web services or web-facing tools or like big things in companies is that there's a lot of physical infrastructure and a lot of machines and a lot of VMs and all this nonsense and environments get out of control or you've got to stage things from dev to QA to UAT to pre-production to production to scaled production. And if you can break things down into these very simple microservices and dockerize or use some sort of container some way to make sure the environment with the local environment of each one of these services is identical in all these environments regardless of the hardware or even the OS you might be on top of there's a huge operational win there. If you can set it up the thing is in reality what I've seen is that most people who try to use these things like docker pool and Kubernetes and all these platforms for docker in production where you basically, okay my application has these processes, there's this process that three processes, I just have a whole I set up a whole farm of just machines and then I spin up any number of containers for those processes and if they fail I spin up new ones and such and such and it's all magical. Basically almost anyone I've seen like try to set that up has been a disaster and they have not, the benefits have not been reaped. I have reaped those benefits and I have that shit working but unfortunately I'm at a level of the way I interact with my engineering teams that I don't see the details of how they make this happen. The point is if you have the skills to sort of make that happen well you could have just set up servers, right? Docker in that case is really only saving you the trouble of having to know things about Linux. Like I said, I'd put it this. It's not really saving you any other trouble. I'd put it this way, use containers if they solve a problem you have that isn't just I don't know how to set up a single Linux server. If you're running one Linux server for production and one for UAT and one for dev you probably don't need Docker if you probably keep those in sync. Right, because like the namespaces issue is about separating the resources on the machine, right? But in production the only thing running on the machine is your application. What else is running on there? It's not a local development machine so you don't need the namespaces. And the C-groups. Unless your production's so big that you've got like 20 different services you're providing. Okay, so the C-groups are to manage the resources, right? Ah, don't let this process use more than 25% of the CPU, stuff like that. But if you have a big server farm you can just use, you're probably using some sort of para-virtualization and even though it's one hardware machine like one giant, one thing on a rack it's actually running multiple VMs in it. So you split things up that way. You don't need to another layer of splitting up. You've already got the para-virtualization layer. Know what you need your layer for. There's like, there's two. You can use things like Docker to make consistent development environments and there's a whole set of challenges and values and pros and cons there. And then using this for production services is a different problem and it's a very different space to decide if it's actually worth it or not. And also, and like I said, there's a lot of hassles. You're basically trading one hassle for another, right? It's like you can avoid some Munich stuff and some setup and some labor but that stuff is almost always just gonna work. Whereas if you go to Docker you can avoid doing some of that work. Instead you gotta deal with these hassles of the shit not working. Well more importantly, my real worry is that the orchestration of, you know. A lot of people at that stage in like a production environment might use something like Docker because it's easy but not fully understand the ramifications of the way they've set it up. I don't think I think security holes. Most people, I have seen using it don't have even the ones who are pretty good at configuring it and making Docker files don't actually understand how it works with the C groups and the namespaces and all that stuff. They just sort of, you know, they don't understand. People don't understand, there's just being a container and a VM. But if you're using that just to make development environments at least that's relatively safe. Like the damage you could do is pretty minimal. That's what I think it's good for. Yeah, but don't just take Dockers and deploy them into production if no one on your team can go deep into what Docker's actually doing with the US. You need at least one person who understands what it's doing on the low level. Now the one benefit of using Docker in production is that you have a situation where people are developing locally, they're using the Docker to make it easy but in production, the environment might be different than local. If you use Docker, the one major thing you can do is that to make sure the production environment is the same as the local environment. And you can do this with or without using Docker in production, right? You can simply make sure that the Docker file creates an environment that's identical to production one because it's just Linux. Yep, you could version your Dockers. You have Dockers that reflect various planned stages of production. So it's like, okay, in production we're using this Linux distribution. So your Docker container makes that Linux distribution, right? And now you made sure it's identical so people are developing in an environment that's identical to production one. And if you do end up using Docker in production, well, then you're definitely using the same exact environment because you're using the same Docker file. And this makes it really easy if you have a... We had lots of problems at work in the day where everyone's developing on Macs and then problems appear when stuff goes to production because guess what, they were developing on OS X and the server is not OS X. Or you got a complex system with a lot of dependencies and multiple engineering teams. At that point, you might be in situations where you could use things like Docker. So people who are writing code that will go to production later might be using a Docker that has the updated set of dependencies that's going to be in production at one point. And it makes it a lot easier to coordinate when code its production, all its dependencies are in production at that time without having to maintain a million VMs. Well, another thing you can do, for example, is let's say you're writing a Python app. It's just a Python script, right? And you make a container for your Python script. And in your container file, you're pretty much... There's Python containers available to download. So you just make a Docker file and the first line is gonna be like... It's gonna be two lines. The first line is gonna be, you start with the container Python colon version number and the second line is gonna be execute my script, Python space my script, right? So you wanna test this script, the different versions of Python, just edit the Docker file, run it, edit the Docker file, run it. And now you're testing all these different versions of Python without having to install a hundred different versions of Python on your OS. Actually, that's a good point. That's one use case I've seen. You can just keep downloading all these different containers or building all these different containers with all these different versions of things and run your same code and test it in all these different versions to see, and if you're the kind of, if you're making software that needs to be deployed in situations where different versions of things. Oh, I wanna test my web app on Apache 2 and Apache 2.1 or... We're not even that. A new version of Ubuntu came out. I wanna test my app on both versions. A big problem is actually maintaining and running unit tests against code. That actually gets problematic because you might have very complex unit tests that change the state of an environment. And I've seen some recent modern QA processes spin up a million different dockers, each of which is a self-contained environment to test one particular thing. Most of the, if you look around, if you wanna try out containers for testing, right? There's many equivalent, I'm not endorsing this one. It's just one I know of. But it's CircleCI and they have a free tier, right? So what you do... I don't know about them. You get, it's continuous integration, right? This is like a super popular thing. GitLab has it built in. But you basically, you go to GitHub, you make your, get your thing, you go to CircleCI, you get the free tier, right? There's a free tier, I think it's like one unit or whatever, and you basically hook it up to your GitHub. You put a .CircleCI file with instructions on how to run your tests and stuff. And then what happens is basically anytime you merge into your thing, it's gonna take your dot, it's gonna go to CircleCI. CircleCI is gonna use Docker to create a container that runs your app according to your instructions, right? And they can just do this because they can, they can run everyone in the whole world. They can run all everyone's apps, no matter what you're developing because they're just making containers and turning them on, running tests in the container. That is way easier than like Jenkins running a bunch of unit tests that gets your environment. That's basically what Jenkins does too. It's basically, this is a host of Jenkins, right? But it's not just that. You can use Jenkins to do the same thing. Suddenly you got a testing server. It needs to test all these different applications. It can test anything as long as it runs in a container because all it does is turn on container, execute command in container, close container. But that's very good for- Take out the information from the tester board. Complex unit tests that change the state of the environment or especially negative unit tests that test against a broken on purpose environment. So you can basically have your tests run in containers and then you can have these servers that can run any test on anything as long as it's in a container. So you know what I'd really say? Like a lot of people listen to Geek Nights are younger and they're still in college or they're early in their career. You want to have a guaranteed job? Be good at both Linux and Docker. But I mean, you know- If you can be good at both of them, you can solve the kinds of problems that a lot of mid-tier companies have. Yeah, I mean, the problem is- Even if you don't write code. Is not that Linux skills are not valuable is that a lot of people don't value them, right? Their companies will just get by without learning Linux. So instead of having someone learn how to build a container testing platform and they'll just pay someone else, they'll pay the CircleCI or the Jenkins or what you know, they'll just pay. That then the containers are allowing people to sort of offload knowledge to these centralized companies, right? Like there is a time and a place to do that. And the Azure's and the Google's with all their, you know, their cloud hosting, basically cloud providers have all the people who have real knowledge about things. And then everyone else just pays them and does things the easy baby way and doesn't have anyone working for them that actually knows anything. But there's not necessarily anything wrong with that. And that comes down to, you know, the stuff that I deal with on the business level. What is the thing you're doing and how does that make money? And whenever possible, it's not always the best idea, but sometimes a good idea to find the things that don't actually matter to the way you're making money. Right. And pay someone else to handle it. The problem is those things don't matter until they matter and then you hire people. Yeah. It's like, oh, I did everything with these containers. Everything's beautiful. And then you go live and then your application gets more complex and then, oh my God, this doesn't work anymore. Well, that's the thing. What's the scale of what you're doing and set your resources appropriately. The Geeknives Forum is just a docker we download and run. Well, yeah. I mean, cause that's a good example, right? So because back in the day when you would want to run a web app it'd be written in PHP and PHP was done in such a way that you set up your web server like Apache and you put files in a folder which anyone can do even on managed hosting. And then it runs. You don't have to do anything. You just got to type in the MySQL username and password and you're done, right? Now, if you want to run a Python web application that's not written in PHP, you can't just, I don't know why they didn't make it this way. They could have. Where they could have made it where you just put Python files in a folder and they run it, but they don't, it doesn't work that way. You have to run a Python server interpreter and then Apache or Nginx proxies to that. That's how it works which means if you want to, if you write a web application in Python which is very easy to do, getting into production compared to PHP is for someone who doesn't know Unix is way hard. You can't just put the files you wrote in a folder. You have to set up a server, install libraries, do all this stuff, configure Apache, right? So the containers, they make that problem go away. The forum software we use is written in Ruby. It needs all that same stuff. So instead, they want installation for people to run the forum to be easy. People who don't have the knowledge, they want them to be able to run this forum software with having to learn anything or do a complicated setup. So the instructions are pretty much download the code, type in these couple of commands and make sure you have Docker installed and the forum will start. And you don't have to do anything. Yeah, but again, look at our use case, look at our performance needs. There's a look at our operational needs. Neither one of us wants to futz around with anything for like Geek Nights hosting. And then, you know, for example, they have features built on top of that. Like when there's an update to the forum, you push a button and the container turns off. It doesn't get pulled, the container turns on again, it rebuilds itself, and so on, right? All right, I think I'm hungry, so we can just stop there, I think. I am also hungry. Also, if someone just came in expecting a debate on Rubbermaid. That was the joke I made before the show. You're too slow, also. Should we? That could be our next Thursday show. I don't have much to say other than buy the glass snap lock at the end. Yeah, the MoralA's glass is superior, plastic inferior. All right, I think we're done because I'm crazy hungry. All right, let's see how that pipeline worked.