 OK, I don't want that. Sweet. Hi, everyone. Oh, so who's timing me? OK, Sherman's. Oh, you've created new already. Thanks. OK, better living through CI. So most people who use CI think of it as, hey, I do some stuff, and then every time I do a Git commit, my tests run, or some other version control system. I was like, that's cool, but that's not really very interesting. Like, well, you know, who cares about CI? But think about it for a second. You're basically getting a server to do something that you wanted to do every time a certain thing happens. And in this case, a certain thing is a Git commit. And it seems like you can't get away from that, but I'll get into that a bit later. But the idea is that every time you do a Git commit, you can get a server to run any script that you want, within reason. Like, you can download pretty much anything you want to download, install anything you want to install, run anything you want to run. And that's really, really awesome, right? So the simplest way that, so one thing that a lot of people have started doing is that they, well, yeah, I guess the first thing you do is that, hey, this is like, oh, you can't really see that. That looks really small. Can I? Yes. OK, but it doesn't really matter. The point is, hey, I have this script. And when I run it, things happen on a computer that, oh, this is free, by the way. That's really awesome. Did I mention that Travis is free? So I can basically get a free computer to run whatever I wanted to run. That's great. Like, who needs servers when you have this? So anyway, so it runs my tests, and that's sweet. But one other thing that you can do with it is that you can get it to run your, to build a website. So instead of having, like, a CMS or some other, like, dynamic system, what you can do is you can have GitHub pages, and you can literally create a script that takes some stuff and builds it, builds it for you every time you make a commit. So every time I make a commit, my website is updated like that. It's really cool. And it's like having, it's like having, like, a Drupal website or something like that. Except it's much more, it's, every version of what I'm doing is saved and everything is, like, happens every time I do a Git commit, instead of, like, and I don't have to mess with any servers. So again, like I said, you can have it run any script that you want. So this is the thing that actually pushes things to GitHub. So that's not all. There's this thing called Vandok, which literally converts between lots of different document formats. You have your, you have Markdown, there's a special kind of Markdown in supports. It can create latex. It can convert between, like, you can create a document, like, you know, like a Word document if you want. But what I would like to do is I'd like to use it to be, I'd say, hey, if I can install Vandok and all that stuff, then I can use it to create a resume, which is really, like, the ultimate aim of everything that I do is to polish my resume to a fine shine. So if I can get this, anyway, it doesn't matter. It doesn't seem to be working. So this is the, yeah, again, this is the script that actually makes that happen. But so far, everything that I've told you happens every time I do a Git commit. And you know, that's frustrating. What if I want something to happen, like, every day, or, like, every hour? And all of this I've mentioned is to do with Travis, but there's lots of other CI systems out there. There's CircleCI. There's this thing called Jenkins, which you have to install and put on a server yourself, which is why I haven't mentioned it too much. Jenkins can do cron things. And if you're not familiar with it, cron is something that allows you to run a command at a certain interval. So it's like, OK, great. I can do all this stuff. But do I have to, like, set up another server and have that, you know, do Git commits to my repository? And then as, you know, this would be really, really frustrating, except Travis supports cron. So you can not only do something on a Git commit, but you can do something. I think the free version doesn't allow you to do anything with more granularity than one day. But that's OK. There's lots of other CI systems you can use, lots of other cool things you can do. And so all this stuff has to do with documents. You might think, OK, great. It's good for creating documents. But no. I was talking to someone a few months ago who was saying that they use Jenkins for the ETL system. So literally, they process all this data and transform it and put it into a database using Jenkins. And at work, we use Jenkins to provide a GUI for everyone to deploy servers. You can literally deploy servers using Jenkins. And that's what we use it for. So so far, I've talked about building software, updating my blog, updating my resume, and doing crown things, ETLing, and more. So the sky is the limit. Literally, CI is a way for you to get a computer that you don't care about to do whatever you want. And that's awesome. And that's all I have for you. Questions from the audience? Yes, and questions from the audience. Is using it this way in any way against the terms of service stuff? Oh, all the things that I described to doing with Travis are definitely not against the terms of service. Yeah, they do have terms of service. Thank you for pointing that out. I'm not mining Bitcoin on them. Although, funny fact, now that you mentioned it, since I've just been reminded, there's actually some software that you have to stop it and then start it again so I can answer questions. So there was malware that infected people's repositories that literally mined Bitcoin using the Travis CI service. So it's another thing you can do. It's against the terms of service, and I definitely wouldn't recommend it, but you can do it. So that's another thing you can do. Terms of service, no. And again, if you can get your own server and put Jenkins on it, you can essentially do whatever you want. Who's stopping you? Any more questions? So in the GitHub pages update example, how does it get the credentials to all of these things? That's a good question. So you don't want to put your credentials out there for everyone. So I actually have a GitHub token. And I can put that on my Travis thing separately. So I actually have to go in the GUI and add a GitHub token. Yeah, although there's a separate thing that I think over here, there's a section. I think it might be another one of my Travis's. There's a section that allows you to encrypt some data and put that in. So that's a Travis-specific thing. But the point is that it's possible for you. That's another benefit of it. So at any point, I can see what I've done to build my website just by looking at the source code. So that's a really big innovation that I think, in my opinion, Travis had over Jenkins or something else. Because in Jenkins, the way you configure a job, at least historically, is you go into the GUI, you click around a lot, you enter some stuff, you save it, you try it, it doesn't work, you edit some more. Whereas in Travis, you do a Git commit with your test instructions. It doesn't work. You fix it. You just keep doing that like 50 times. But at the end, you get something that's working. More questions? What's the time limit of a job in Travis? That's a good question. So this wasn't intended to be a Travis tutorial. But since you asked, I think it's about 50 minutes. In fact, maybe more. It depends. If you're trying out one of their containerized bills now, and they give you a lot of time. But if you use one of the newer ones, then they're limited to like, I think I ran into that a few times, it gets really frustrating to the point where I'm just like, you know what, maybe I should just switch to Jenkins. 50. Yeah, 50 is quite substantial. You can do a lot in 50 minutes. And if you can't, then it's probably problems with caching, or building infrastructure that you can solve in other ways. Yeah. More questions? So what format do you create your blog post in? Oh, so I used to use this blog generator called Pelican, which was written in Python. But I've recently converted to Hackel, which is another static blog generator written in Haskell. So that's actually, if I go to my most recent version of my stuff, I actually didn't want to mention this, because I didn't want this to become a Nix thing as well. So Nix is a package manager that does very aggressive build caching. So most of the time it takes for me to run my Travis jobs used to be in installing and compiling the version of Haskell that I use, the Haskell that I use, and the packages that I need. But this does it pretty much instantly. So what it does is that the only script that it runs is actually inside my thing itself. And I can run a shebang and do my script. And the last time it did, it happened in less than two minutes. In less than two minutes, it did a build. And I have tons of time. So I will show you. Yes, it ran less than three minutes. But the one before that happened in less than two minutes. So I actually really, really fast. So before, I used to make some changes. And then it would take a really long time to build. It would take 10, 15 minutes. But using Nix, because it does really aggressive, it basically makes it really easy for you to download boundaries unless you make lots of changes. It just happens really quickly. So yeah. So if you push your block now, it will kick up Travis. Yeah, so we don't actually have enough time for me to try that. But I can show you if you want. I don't know. What change would you like me to make? Yeah, sure. I'm happy to demonstrate that later. If anyone is interested. Cool. I guess that's it, actually. I don't feel like people are especially keen in learning more about CI. I feel like I've told everything you need to. And it's fine. Cool. Thanks, everyone. See, five minutes. Like, even less.