Okay, that's good. So I guess I'll get started now because it's already 10 a.m. So thank you very much for showing up for my talk. I'll be talking about Hudson, which is the continuous integration engine I implemented in Java. So the idea of continuous integration just to recap is to, well, for having a program that looks for changes in your project constantly, and whenever it detects one, it starts to build a project and it produces the result, like the distribution, the file or the table and that sort of things. And then it publishes the result for other people to consume. And by doing so, it keeps track of how your project is used in other places. This is often useful when you have a graph of projects that are dependent on each other. And then because it's a server, so it exposes all those information to people, it brings the transparency to the projects. It's an open source project hosted on Java. We have many Java-based open source projects available. So this is a URL. And the code is implemented in Java, as the hosting site suggests. And one of the key points of Hudson is its extensive architecture. And so that enables the community to develop a lot of plugins that extend the capability of Hudson to various different areas. And that's been one of the big factor in success of Hudson. The project has been very active. According to all of the statistics sites for open source projects, it's supposed to have like a 116-person year of work of the code. And then the project itself is three years old if I look back to CVS committee history. I've been pulling directly 185 releases to date, and I'll talk more about this later. And I currently have maybe a bit more than 2,000 committers working on various different areas. Many work on plugins of their own. It's hosted in the same repository, some work on the core code. So it's a very active project, all in all. So again, to come back to what Hudson does, the idea of it is pretty simple that it first, you tell Hudson to listen to your source code management system changes by some means. One way to do that is to hook up to the notification emails because in that way you could avoid the cost like polling, which would be expensive. But you could also tell it to do the polling if that's the only way to configure. And by getting the notification from SCM it can trigger a build. Depending on how long your build takes, it basically takes the same amount of time. But at the end of the day you can capture the log of the build, the resulting files, the test reports, the code coverage reports, and that sort of things. And you can make it all available on Hudson's site. And by using those artifacts you could have other programs or other people downloading those artifacts or maybe browse the Javadoc or see the generated documentation and so on. Which is often handy when you're talking with someone else on the phone about some part of the system. It's much convenient to be able to see the same thing and then discuss about that. The other obviously more useful feature is to look at the test results or test failures when that happens. And then once you do those things you can then trigger notifications. So often when test failure happens it's useful to tell some human beings that there are regressions. So you can do that by using some means like instant messaging or the emails. So the reason why something like this is useful is because what I observed in my team during my day job, and I suspect that the many of those issues applies to you as well. Say you have a team of developers and one person makes a change in the code base in the morning and that actually contains some regression which happens occasionally. And then what happens is because often without the continuous integration you set up some kind of nightly bills and then the other teams like the testing team work off against these nightly bills. So in this setup, the earliest moment when the testing team, the SQE team can find an issue is to pick up the nightly bill of the Monday night. And that means the earliest moment the developer recognizes about this regression is going to be Tuesday morning. So we already wasted like 24 hours since the regression came into the code base until it was discovered. And then if it takes more cycles to fix it, for example, maybe the first attempt to fix this might fail actually. And then you're adding one more day to this life, I mean this round trip time. So all in all it does that a lot of time before the program gets recognized till the program gets fixed. And that's not good. By having something like Hudson which is constantly so the building and testing and making the results available almost as soon as someone makes a change you can see that change is causing a regression. And in that way you could fix adding that matter of hours not matter of days. And that improves the quality of the software. Another thing is the notification of the test result. The classic way of setting up this kind of continuous test execution is to have some kind of cron job that essentially just send out the test result regardless of the other failure in a no failure. So what that happens is maybe the first week the people are enthusiastic that now the final tests are running automatically and maybe they look at the test reports more carefully but the problem is when you bombard people with those emails they start to lose attention and then people won't stop looking at those emails. So quickly no one will look at those emails anymore so when the regression happens no one gets noticed and then it won't get discovered until it's too late. So having a server that sort of keeps track of what the history not just one time execution like cron it can do more sophisticated analysis about the test reports. So it could actually tell that there are five failures but these three of them are new, two have been failing for a long time. And so it could do things like calling attention to those three new bugs because all of our new regression is going to fail. So that's the kind of thing that Hudson does to improve your life. So the main theme of this or the main idea behind something like Hudson I hope by now is somewhat obvious. The first important part is to bring automation. There are lots of things that we developers do which can be automated and if you manage that computers do those works and we the people could get to work on more interesting things. So if you have enough time to waste on these mundane things so Hudson help you automate various things. The other thing is to reduce the time around time. I showed you an example where it takes days to get fixed to the regression and that's not good. Part of the reason that's not good is because it forces people to do context switching. If you can work on the same thing in short amount of time and get it done with people who are doing it in parallel and you have to come back every once in a day that's not very good. So by reducing time around time it managed to make people more productive. And having a server is also helpful in terms of bringing transparency to the project. This is sort of a bigger issue in a bigger team environment where you split the project into smaller pieces and then often what happens is you have to ask someone working in the project to learn anything like how to run a test or where to check out the source code or which branch they are working on. So when you don't have the information or when you have to ask someone else to get the information it makes you hard to participate in someone else's project which brings me to the last point which is to remove the people from the loop. When you're tying some people to the project and when it's not easy for them to move on to different parts of the project it creates problems. So the classic example might be like someone goes on to a vacation or someone goes on to a conference and give a talk about something like me and then people back in the office they need to do something let's say tag the workspace or post a new release or things like that and they can't do it because they don't know what to do and they can't do it because they don't know what to do and so on which is silly. And having a server again where you could see all those information available and then it helps you eliminate the people from the loop and then that allows people to smoothly move between components which is helpful. So all in all by doing these things Hudson tries to save people's time by using more machine time to use a lot more computers to throw at the program and then get to concentrate on things that matter like design and actually writing a code. And by pushing the jobs to the servers it manages to keep your workstation available. So often what happens is people run their tests on their own laptop and while the tests are running the laptops are not responsive enough so they can't do it. So by pushing those works to the server you can keep your workstation laptops available for interactive use like your IDE or editors. And so that also helps your productivity. So with that I wanted to show you a quick demo of how these things work. So I have a terminal that then I could launch Hudson like this, the Java that has some work. For those of you who are not very familiar with Java this is how you typically run the Java application but it's kind of unusual for web app to launch like this way. So it's this. So it's now running. And I... Yeah, so this is the main screen and you can see a few projects. This is my debug installation so you see some random projects in there. So the blue means things are the red if there is any red here that means something went wrong. The build failed for example. So this build failed for example. On the left hand side you can see the number of computers that are connected to this Hudson installation. The build and tests are often CPU and IO intensive so when you start to run lots of tests on the system you often need multiple computers like the cluster of the build machines that you can use to do a meaningful work. So this is the project I created for this demo. If I go to the configuration this is the kind of thing you need to tell Hudson to do the work. You need to tell Hudson where to check out the source code and once it's checked out I'm telling it to invoke. So this is an Ant-based project so I'm telling it to use this target. You can do other things like executing shell and so on but in this configuration it is useful. This tool specific configuration is useful to reduce the amount of typing that you have to do. They also provide better error checking. At the end of the build I'm telling it to our private unit test reports. One of the things I pay attention to is when they make mistakes and when they make mistakes they want to get back on track very quickly. So let's say if I make a typo like this it might be hard to see down below. It actually tries to guess what you meant by it. It didn't find test project X but it did find this much maybe that's what I meant and so on. So those are useful to get back on track. I learned a new way to improve the form validation. Once I configure the project then I could run I could schedule a build and because nothing else is building right now I could start building it right away. This one is a test project so it already finished building. It first checked out the project and then it ran the build and it recorded the result. I only had two tests so that is not very interesting. It runs too quickly. It's showing zero seconds. So this is actually a bit interesting. You can see the total number of tests so there are two tests and then there are zero failures but if you add a new test you'll see like the class one here if you see new regression you see like the class one here they are showing that the failure count is up. I found multiple tests. I can now see the graph of the test results in a more interesting project you see the test failure goes up and down and so on. You can see other things you can look at the files in the workspace and maybe look at all the source files and then I could go to the directory and so on. Looking at the file this is often useful when you're talking to other people and so on. So that's the kind of thing and since the time is short I have to cut the demo here and then back to this nice. So that's sort of some of the basics I have to get you some feeling of how it does it so the idea is you could create multiple projects in the Hudson and then you can have it individually configured and run it and so on. On top of those basic things what the Hudson provides for example is the permalinks to download the latest artifact. So this is often useful because not every automated systems like a test run or your QA cycles are hooked up to Hudson obviously so it's very important to be able to talk to Hudson from the other systems and one way to make that convenient is to have a URL that always resolves to the latest let's say the bundle so that the test cycle might be hooked with the Chrome and you can pick that up by doing W get on that permalink URL. It has RSS fees to look at the build results if coming back to the HTML user interface is not your way. It could also do email on the instant messenger notification with various protocols that people developed like IRC, Java and so on. And then the other thing that came in relatively recently is this ability to create a configuration matrix. This is particularly useful on testing where you'd have to say that I need to test this software on three different OSCs with two different databases and so on like in my day job one of the things I work on is JAX WSRI which is the web service toolkit for Java and that needs to be tested in three different OSCs that we support and then two different JDK versions that they behave differently. So the way it works is you tell the Hudson that this is the source location and this is the shell script to execute the test and so on but run this on all these configurations and it creates all the matrix and run the results. So in this report on the light what it's showing is it passed all the tests passed everywhere except in this particular configuration so there might be something interesting in here that's causing it. So I think it's important to see that having a large number of things to look at because it aggregates the results. The other thing that I spend a lot of effort in is the dependency tracking because well in a larger environment in larger team environment a big project is often decomposed into smaller pieces and then the lower level components sort of feed into the higher level components so what happens is the bug created into the library, lower level libraries, they only get discovered much later in the process. So when that happens it's often important to know which build of this library was used to produce this bug. Maybe some other related change has happened in the library since then which might have fixed the program and so on. So accurately knowing which build which contains all these changes is very useful. So Hudson does that by keeping track of MD5 checksum of the files as they come in and out of the Hudson systems. So by doing that it could always tell you, for example the test runs for the 5 in a tested the build of the 192 and so on. So that helps to simplify the bug tracking process. There are lots of plugins for integrating Hudson with other tools. The find bugs is a tool that's commonly in the Java world for integrating for doing static code analysis. So there's a plugin for that. A similar plugin is available for the copy paste detector in the PMD and so on. Because it talks to the source code management systems it knows who is making changes at what time and what changes are in it. So you can see that in this project that I took the poll senders has been single-handedly making most of the changes and occasionally you see more public eating and so on. That's often useful to see when was the last change and what has been changing to get an idea of what's going on. As I showed you earlier you can see the files in the workspace and download the files individually or you could also look at the checksum of the files. The manager always likes to see the charts so even personally I'm not sure how useful it is, it can do things like tracking how much time it's taking to build your project. So there are some random bits that I don't know what's going on in those places but generally speaking you can see that the project is building between 2 to 3 minutes depending on where it runs. So the outfit down here means the machine, the build machine that this build took place. The other thing that I did was the open search integration so if you come to the Hudson website the browser will tell you that you could register Hudson of the search engine and so what happens is you could then register you could then type in your project name or like the build number and come to the page directly or the other feature we got is build promotion support. This is another plugin and what it can do is well when you have a user integration system that producing lots and lots of builds it often overwhelms the downstream especially if they are not automated. So it's often convenient to be able to say just pick up let's say about one in five builds that are good some build that are actually good and test it as opposed to some random latest build which might contain some regressions. So the notion of promotion is the idea that once you do certain things, often testing and qualify that this build is good then you put some little marking like in this case a star and put some star and indicate that this build passed all these tests so it must be good. So Hudson could do these things automatically for you so in this screenshot what happened is I have like a four different test jobs that are hooked up to this build so every time a project builds these four test cycles gets triggered and if they all pass this build it's promoted and so this build was promoted 45 minutes after the build has happened so this is good to know how long you are taking to qualify a build because it helps to reduce the time the run cycles there and then the promotion has happened in 12 days before so once you promote a build you can also tell Hudson to do other things like you know send that we'll do some run some shell script like copy files or whatever and then a lot more supporting a distributed build so that you could upload your work to lots of machine in the cluster in my production system I have something like two dozen slaves hooked up to my Hudson system so that's often how many you need especially when you start to run a lot of tests. Source code management support is perhaps the area where the community support is the most helpful and I think the current list of support includes things like supporting material or the clear case for pros there are some work going on with Git and AcuraEv and so and tool integration as I mentioned with the fine varsity or the code coverage tools like ML and Covertura and then we have some IDE plugins with these three major IDEs and Hudson despite the fact that it started with the Java in mind it went beyond Java because people find use for it beyond Java and so for example for Ruby there are some people wrote this bridge or the connector I suppose it processes the test results and then another person will also write this spagging which lets you run the Ruby script as the build so if you're using those you could do that. The Python has a similar support in that space the .NET support is really more advanced because there are more people working on it and it has support for those tools that I personally don't use I can't comment on too much about that but those are useful if you're doing .NET development and beyond that because it can use at the sort of lowest level you can use Hudson as a way of like the glorified cron that can invoke any shell script so in that way you could integrate with any language so I didn't want to make this talk about the shell stock of Hudson so I wanted to spend a bit of time about how I implemented Hudson because there are some interesting design choices that I realize that are not very popular so one other thing is it produces a lot of data but so where does it persist those data and I actually don't use relational database for this because it turns out that one of the issues there is it complicates installation significantly when you try to support and I don't want to install all the major databases on my laptop to sort of debug all the issues that people are having with different database and because Hudson is the only essentially it's the only thing that's producing data and so there are not too much issue about the transaction and so on that the database is held and when the plugins come and go and they evolve independently from the core it's kind of hard to manage the extensively scheme evolution of the database and instead I chose to process everything in XML and much like the way the Java serialization work so the benefit of that is I managed to eliminate essentially almost all the glue codes it's sort of like it works like taking a snapshot of object and putting that in XML which is handy but because it's so transparent it's sort of easier for people especially the plugin level across to shoot yourself in the field because you sometimes don't realize there's a lot of duplication of making a slight changes which sort of affects the persistence structure so there are both side but I was generally speaking I'm happy with that and the other thing I do is the modeling of this so it's common to model the server in a stateless fashion because when you need to scale that's how you get the horizontal scalability but Hudson does it a bit differently so in memory of the model the natural representation of how the build server like Hudson behaves in memory as a tree of cast hierarchy so for example at the top level we have this Hudson object that roughly corresponds to the top of the page which is essentially a collection of projects and then each product has its configuration in it and they have a list of builds in it and so on so there's a little couple of lazy loading here and there essentially everything in the memory all the time but it turns out that the modern there are like 20 of memory in the modern computers so even if you accumulate like the tens of thousands of builds in your Hudson this turns out not to be a real program so what the point of doing this is so that once we have a tree I could actually mark that directly to the URL hierarchy so there's an underlying library that I wrote called stapler it sort of takes these three of objects and then map that automatically to URL but this helps to create a rather restful URL here you don't see like a long query parameter that's indicating what the thing is and it also internally it helps to route the HTTP request to the right object where the data is and let's say in application like PHP or a power the way people tend to write their application is well whenever a page is requested you look up all the query parameters and figure out which part of the data you're working on and then you make some changes and then you render the result which is a big unfortunate way of doing it so in this way because every object the incoming HTTP request gets invoked as an instance method on a particular object so I could always have all the data right available to me within the reach of a single object so this evaluation happens like a kind of a past expression language so when someone reports a URL like Hudson, Joe, Jack, speed or the 11 test report and what happens is it tries to look at the by using reflection it looks at the method and fields of the objects so example here it recognizes that the Hudson object has a get job method that takes a string so it tries to attempt these matches there and it returns another object so now it continues to evaluate the rest of the portion with this object so now I find we get build which takes an integer so that sounds like a match so I take that and then finally there's a get test report method that takes me to there so in this way just by having a single object model in memory I could sort of automatically generate the URL binding which is natural for people so when you see URLs like this it's sort of quite intuitive what it means so it helps people when they are passing around those references to other people or trying to guess so if you see this URL it's obvious if you wanted to see the test report for build 12 you kind of know what you need to do as opposed to having a long period URL and then the cluster eventually starts by either like the views which essentially render HTML and Hudson is using another Apache library called jelly and I don't know how many of us you know jelly but nowadays it's not a very popular choice but for a historical reason it could also use any other template language but Hudson has already accumulated too many views already so it's not practical to switch for us but if anyway you're thinking about using stapler for other things you can use other things like the velocity as a template language that's fine and you can either render HTML or you can do the the sublet like operations by defining a method called do something and then that also binds to URL so this is useful for making some actions before like rendering views but the difference between the sublet and this is that it's in both the right instance you already all the data that you have to work on is already available in your object as opposed to you grabbing things from elsewhere so the same applies to view what view often has to take a lot of data from the model object so just having them work like instance method where you can grab all the data from this object is very useful distributed computing is another area that we have to be out of your own idea that the build for the build server to scale you have to use a lot of machines so I needed a way to make this work nicely and I realized that the people are lazy at least I am so I didn't want to come up with a scheme where I asked people to deploy all the jars of the project in all the build machines in the consistent fashion because keeping them in sync would be very hard and even worse when people forget to keep them in sync they tend to get weird errors like this strange class compatibility related issues and so on so instead I opted for the scheme that works like RMI where the slaves download all the classes on demand so the slaves don't have to have anything they just get everything from the master including the program to execute so the way it works is on the master side the execution works in Java it's not very pretty to write a crawler so the syntax is a little more bulky but the example here is on the slave you want to execute this crawler that prints out the howler and then come back to the master and print out the another thing so when you execute this the whole crawler is here and sent to the slave the slave has a very thing computing server-like infrastructure that's capable of executing so it sends to you so once it's transferred it realizes that the class files that are necessary to deserialize these closures are not available in the slave so it makes an on-demand call to the master asking I need these class files so send them to me which sends back and then once that happens now it's capable of deserializing the closure so finally execute this closure on the slave side when it happens on the way back it sort of sends back the correct results serializes that and then send it back to the master and then the execution resumes on the master side so for people writing plugins which is the majority of Hudson developers this sort of makes it convenient to sort of come up with a convenient way of doing the distribution so this is not like the RPC style specific demoting where you have to identify functions that are front that are demotable and then you have to deploy it elsewhere and then there are other way other schools of sorts if I may for doing the demoting where you do define those contracts specifically so that you could board on the server and the client independently but this is very different from those ideas and in this scheme the demoting unit is rather anonymous you could create any closure and send it back to the slave and all the parameters are passed rather implicitly in the environment of the closure gets a lot more captured and then code gets delivered during the run time so no upfront deployment necessary that's part of the reason I opted for this is for the extensibility I guess that is well I'm sorry so the point of doing all these work of my own besides it's fun to do is for enabling extensibilities so the stapler allows plugins to seamlessly integrate into the URL hierarchy of Hudson which is much harder if you have a static sort of JSP like model and this deployment free distribution is also convenient for plugins because now people don't have to manage so many different things and the lack of database helps people like you know they're using XMA helps people come up with different ways of storing data without messing with the database schema which is often painful and so most of these objects that I showed you earlier like the jobs and SCMs and how to build a project and what's the trigger and so on they're quite extensible and the plugable so that's how people who clean to the Hudson and then they started writing their own SCM support or start writing their own instant messenger support and all the built in features like CVS and Subversion and all that they use the same mechanism so in that way I make sure that the extension points are used properly designed in a usable form and so that's a little insight into how I do Hudson and then the other thing is the last part of the talk is about what kind of things I emphasize in Hudson so it might be interesting to some folks so again one other thing I really tried to promote is to simplify installations because one way to put that is people lazy but another way to put that is people just don't have enough time to waste on crappy software like if it doesn't work in the first hour maybe they just might move on and never come back again so it's very important that the first expression of things are easy and nice and so in Hudson I tried really hard to simplify the installation so one of the end result is to be able to just download this file which is already a compressed form of the archive and then you can just run it right away and this is actually very uncommon for any other server application which at least require you to unzip the application and then maybe install a separate application container and maybe configure the database and then you can finally get going which is a lot of work and that's also a lot of steps where you can shoot yourself in the foot and make a mistake so this quite drastically simplifies that but the actually then it turns out that I can even simplify this that is I don't even have to ask you to download anything anymore thanks to the technology called Java Web Store so actually nowadays all you need to do to try Hudson is to come to your website and click a Java WebStat link and then what happens is if your browser is properly configured with Java which it's supposed to be and then it starts downloading this Hudson right there and then it executes things and then all your data is stored locally so even if you shut this down and come back to this later you still have all the data left intact so you really don't get the installation really never gets any easier than this or the other thing is the simplifying configuration people make silly mistakes like the typos and not knowing the right CVS root string and I don't want people to become diligently searching emails for the correct CVS root string or the right directory so one thing I put a lot of effort in Hudson is to help people to understand that Hudson correct people mistakes sort of automatically and so as I showed you earlier in the demo there is extensive on the fly form field validation it's not just about telling you that there is an error but it actually also tries to guess what the problem was and try to suggest to you what was the change so for example if you make a typo in the project name and so on or there are typical deployment errors in Hudson that you deploy to the sublet container that doesn't support the burden necessary for Hudson so it has an explicit check for those things and it gives you a nice a graceful error message as opposed to like the blow up and just choke so those are helpful in sort of helping smooth out the experience of people with Hudson but this is one area that still needs a lot of room still needs a lot of improvements every time I see my junior engineer using something at Hudson I learn I get to see how they are making mistakes and that feeds into my cycle so one of the thing I'd like to ask you is when you make some mistake don't blame yourself but blame your tools for not reporting the errors and tell us what we could do better the another thing is to use a barrier of entry to the project so I've been doing various free and open source steps of further development of different sizes and I realize that the typical project runs in a fairy to the strings and passion for example they emphasize on meritocracy meaning for you to become a committer you have to prove yourself for a substantial amount of time before you get to have any say on any sort of development then you have to prove yourself to be a committer or more and that's good for big projects where you have to chase away the potential contributors and filter them but for most of the projects that are small Hudson is no longer exactly a small project but for many of the projects the trade-off is wrong in my opinion so in Hudson I'm trying something else so instead of asking people to prove themselves before letting them commit taxes I almost give away commit taxes right away like if anyone asks it or even if anyone submits just a single patch but what happens is instead of instead of that I try to sort of split the code into plugins so that's where the architecture helps and then sort of emphasize the ownership of the plugin to individual people and that creates this sort of that sort of works very nicely with people's independent mentality that they get to own their part of the code and they can do anything with it and they don't have to talk to me about making any decisions there but I still sort of have this because they feel this entitlement to their parts they respect the other people's entitlement to the other part of the code so they don't just still talk to those people before making any changes to the other part of the code so I still get the same effect of avoiding random people committing randomly but without having the formalism of long commit taxes and then another benefit is when some people move on which do happen and then the ownership is gone but because people have a commit access they are technically capable so it makes it rather easier for having other people fill in the role of the people who left so it's a different trade-off of running an open source project but I find this working rather nicely for a small project there the main issue is soliciting more contributions and not about sort of screening people away so it's something that I thought I should mention the other thing is since I emphasize on people making plugins I spent a lot of effort creating an environment for plugin development so that is that is sort of emphasizing in terms of the Maven plugin and it does everything from initial skeleton plugin generation so that you can start with some simple the skeleton build script and all that from well to like the handle or the complicated compile time processing that this framework requires it also comes with debug support so just with a single command you can launch Hudson with your plugin and then have set up the dynamic reloading of things so that you can see your changes as you make them reloading or restarting your applications there are also release supports so when it gets time to release your plugin it posts the announcements automatically it uploads the private into the centrality post tree and so on the documentation is available and the website thanks to the help of the community and so all the effort actually sort of become fruitful so today I think I have something like 40 plugins available of different quality but they are good so I guess the takeaway is if you want to have something happen if you want to see something happen you need to make it easy enough so that people can do it just having stuff doable is not giving enough it really needs to be easy so that's one of the lessons that I learned another bit of experiment that I'm doing with Hudson is this frequent release cycles it's probably started with my frustration of my days over you get to release only like every once in six months maybe so in Hudson the current release model is every time I make maybe 4 to 6 RFEs or 5 to 6 I post a new release so that typically I must every once a day or every once a week on average so that adds up only to like 185 releases for the past three years and in a way it's a bit crazy but if I start thinking about the fact that the tests are all passing and I'm using it by myself and it seems to be working then if I make those fixes that people want to fix it obviously because it's causing issue for them so then I started thinking why shouldn't I just zip them so that they could pick up those bug fixes and then it creates a great turnaround time for bug fixes especially and the new features and people apparently love this so for example when you report a bug and get a fixing let's say three days it really sort of give you an incentive to report more issues so nowadays I get more more issues, more RFEs and bug reports and I can handle which is becoming an issue so the obvious downside of this is that people are not going to be upgrading every releases obviously so when there are so many releases people always attract like which version they should upgrade to so one of the things maybe I should have done is instead of trying to use this 1.x scheme so today the version is 1.185 I could have used like the 2.x scheme where you'd signify this amount of changes by using the second and third digit but that might be something else that might do later so in wrapping this up I encourage you to try Hudson Net if you haven't done so already it's very easy to get started and install and configure in the Sanctis Order WebUI in the form of validation it's primarily developed for Java but it's also great for non-Java so one of the things that I'm feeling is we tend to create this small silo for different languages in the open source community but it doesn't have to be that way so I wanted Hudson to be more language neutral in some way so I hope even if you're not using Java you might still I'd still encourage you to try Hudson and then the help is always appreciated there's lots of ideas about what you can do with Hudson but there are not enough people and conveniently, Sun is currently running this award program I think within the 6 months it's from now or so their contribution could actually be in a real money like I think it's up to tens of thousands of dollars actually unfortunately I'm not eligible but I'm sure you are there's a great chance of winning some real award if you contribute something or write talks or anything and then there's finally the website and the email address if you need to talk to me and with that I guess I'm done so yes I'll take any questions most wanted feature personally that's going to be a better maybe support because in my days more and more projects are moving to Maven and I needed more of it but yeah, yes so that's it I guess is there some way of auto updating if you're releasing every one to seven days or do you just have to keep scanning the website if there's a new release I'm sorry, I said okay, I didn't get the question so is there a way of doing an auto update for having Hudson check if a new version is out with bug fixes or yeah, it's one of the things I wanted to implement there's like a whole new idea if your Hudson installation is connected to the server and you get the update notifications for the Hudson or the plug-ins or just with the bottom mouse click it updates itself automatically for example that would be very handy and I can do other things like asking you to help me with the statistics and I'm always curious about which part of Hudson is used more and less because that helps me prioritize my work so there's a whole bunch of things I could do if I connect people's Hudson with the server but that's one of those many ideas that I have which I don't have time so if anyone is interested in contributing that's actually a great area could you give me three reasons why I should use a turn instead of say cruise control so your question is why should you use something like this instead of cruise control the question is there's loads of tools doing automation builds out there currently I'm using cruise control why should I switch to Hudson what would I get from the switch so the one of the benefits is it's much easier to configure because everything is on the web UI and any mistake you make is going to be corrected right there as opposed to using cruise control the other thing is it's a single server it's the most large number of projects so in my day job I have something like 400 jobs that different people hooked up the single system but only I need to babysit the whole Hudson installation whereas in cruise control if I understand correctly you have to have a single one server for one project and each project is on its own to set things up and in Hudson being aware of many projects it also allocates resources if this node is already building then it tries to move another build to someone else and so on so there's a lot of things you can do if the server is aware of multiple projects at the same time the dependency tracking is another one of those examples so I guess that's another reason I think the maybe the third reason is Hudson the web UI is a central part of it and then in any team environment I think having a server where you can come and see those things is essential whereas in cruise control it's more meant to be demoed and I feel that the UI is an afterthought so right so those are I guess the major reason but the cruise control is a good software I mean it's being used by many people but I don't want to discredit the people working on it but if you ask me why you should switch I guess those are the main reasons Hello I appreciate very much your philosophy of trying to destroy these walls between the different communities centered on different programming languages but I have one concern with this approach to distributing computing how suppose I have as a task to do some C compilation in my build form how will I go about packaging a C compilation task and sending it over so it's all nice to have this approach where we don't have to configure up front the build machines in the form but the question is how can you back and send over a C compilation task how do you say if I understand you correctly your question your question is how do you have tools necessary to perform your building all the slaves yes so yeah it doesn't sort of this is not like a cluster maintenance software so there's a different part of it a part of the maintaining Hudson cluster is definitely about maintaining a cluster you have to keep them up and running you have to keep those clocks in sync with the right set of tools available and so on so those works still needs to be done and there's not much I can do in Hudson to automate so for example in my data I have a small cell script a power script actually to deliver all the tools like JDKs and ant and C compilers to all the slaves in the right architecture because I have slaves with different architectures so those are done outside Hudson so if that's a question unfortunately it's still after you to do the other things okay thank you I have another question I would like to understand supposing that I have some policy like I want to make I don't know warning 274 fatal I want this warning to turn some task to red in my reports where do I configure that exactly so you have policy about to run no I have a policy that says some warnings are fatal I want to chase them out from the code where do I configure that where do I put the code that post process and detects this warning and then turns the result to a failure some of the plugins do that for example the violations plugin help you set up those arbitrary criteria you could say like well if you have 500 find bug issues consider the build to be failed because that's just too many and so on so the short answer is it depends on plugins so it's not like well yeah I guess the nature with it is essentially tools and domain dependence so that's how it works okay we got time for one more question if anyone has one one of the things I mean it's lovely as you said to be able multiple projects of one build machine but one of the things we've discovered is that you have to be fairly disciplined about resource usage say if you have a port that your tests use you have to make sure that none of your projects conflict because if you happen to be running two builds or you might have a port open so is there any Hudson as of now and it's unreasonable to expect it to do automatic dependency checking at that level yeah in fact there are some ports for example the TCP port example you mentioned is quite handy because we had the same issue some of the web app test requires for 8080 or some same tp some java mail testing requires for 25 so there's a plugin in Hudson that sort of allocates those things you could declare that this still requires these port numbers don't run this with other things that require the same port number the other thing Hudson could do is you can give me some like 5 3 tcp ports and then Hudson make sure that it doesn't allocate the same port to different jobs running at the same time so that's another way to do that and then there's another plugin for like controlling the other exclusiveness so it's called Lattice and Lux plugin that Stefan Connolly did and I haven't used it myself but as I understand it also does something similar so if you need to use the same database make sure that they don't collide with each other and so on so there are various ways to do it okay that wraps it up thank you very much thank you very much


The 101st is arguably the most well-known unit in military history. This patch especially, one of the most famous unit insignias in military history. Of course, because of our World War II history and Band of Brothers, both the book and the mini-series. But even in Vietnam and War on Terror and Desert Storm, we have a lot of exploits. In 1974, we became an Air Assault Division. That's when we changed from Air Mobile to 101st Airborne Division, Air Assault. So the 101st is the only Air Assault Division in the U.S. Army and actually in the whole wide world. So every soldier that comes to Fort Campbell and even soldiers that are off post will come to the Saab Laski Air Assault School to get Air Assault training. Air Assault School is known as the 10 toughest days in the Army. It may not be physically the toughest 10 days, but it is arguably probably one of the mentally hard courses that the school has to offer. So to graduate Air Assault School, you have to complete all three phases. We start out with an obstacle course, two-mile run. There's a gear layout that all soldiers will have to accomplish to move on into the next three phases. The very ending event is a 12-mile foot march that soldiers have to complete with three hours or less, wearing about 45 pounds worth of gear. I think there is a sense of pride among soldiers, especially when you go back to your unit and you have those fresh wings pinned on your chest. You're looked at from your other soldiers a lot differently. There's more responsibility. They know that you have gone through the same course that they have, endured all the same endeavors that they have, so there's a bond that you have between anybody who is Air Assault qualified. Even not necessarily just in a division, but even army-wide, there's that sense of pride knowing that a brother in arms, sister in arms, that we're both Air Assault qualified. Air Assault!


Here's our first spot that we're stopping at looks very good bunch of current coming through guys You guys can tell right there.  It's gonna be good today I'm trapped right here. I'm trying to push you off don't I can only do so much This current's impossible to beat bro. Hey be careful man.  Why is your boat not running? Is that fish a real broken half it's broken half ain't it dude. I haven't even freaking used it yet. Oh My gosh it broke on the freak. Oh my gosh. Oh No and my crankbait stuck Bro my There's a rod tip Nice, bro. Just freaking nice now.  All right boys That's what we came here for today. You know, I hooked that second one I think we're figuring something out now in this trap. I had that first one a second ago What like what five minutes ago? Mm-hmm, and uh, you know I'm the trap this one trap man.  Please get that net He is big. Please get that net.  I'm like, this is a monster 25 pound 30 pound card big One be one fishing challenge loser has to get the logo tattooed on the shoulder. Let's get it But no one just came home challenge me to a one be one fishing tournament loser has to get his logo tattooed on it I want my job is to move around as like as fast as I can get as many fish as I can and smoke his butt He does not know what he's getting into. I gotta keep it a little quiet right now I don't want a six-inch swim bait. It's gonna be the juice see how many fish we can catch But no games today boys. Whoever loses Has to get a tattoo a real tattoo nothing and it's on my logo. Let's get started We're going undercover in the woods right now see if we can catch one. Oh My gosh, they're everywhere. Look at this. Look at this guys. There is fish everywhere.  Oh my god. Oh my god. Oh my god. Let's go I hope you heard me, you know what that means well Steve's getting a tattoo right there caught him the best way I could freaking catch him don't zone About a five-pounder Yeah Actually doing it Two days later Oh snap. Oh snap now. He did a good job on it. Yeah, the color looks so much better now Jesus the guy named Dave did it for me. He's awesome. He did a good job. Thank you so much Walmart's largest rod ever thing is huge.  This is a 10 inch worm and compared to the freaking rod. It's not even a question Yeah, but you hear what I'm talking about. It's like it's going pop pop pop All up in the matted vegetation. What about the top water worm? Oh Dude, this rod is so big. I just knocked myself in the hole. Oh He's a big one I got him. I got him. I got him You He's big too, man. Oh My gosh Oh Can we confirm that?  That was wild.  Adam. What do you think about that? I think that that's crazy Folks here we go. Let's catch us a good one. No, we didn't it's still on Dude hammered that thing. He ain't even big. Oh My gosh, did you you have been the most aggressive? fighter all all day Congratulations, you're the smallest. I got a hook in me. I Got a hook in me. I got two hooks in me. Yep Yep pass the bar Okay on one of them. It looks like it's past the barb other one. It doesn't this is the first time I've ever got a hook in me That one's fine See that one's in there good.  I don't know what I'm gonna do.  It's my first time I got hooked some warm got hook last episode No, no, no your dogs now. I was uh, I was seeing if you're home Yeah, can you come outside real quick? I got I got something I need your help with real quick Call my neighbor. I'm gonna see if he has any cutters where I can at least get this hook off my hand And then we figure out how to get it out. That's a lesson learned.  I can't really tell he's at least four hold up He just went like way shallow on the bank. Let me realize past them. Oh my god. No way. No way. He just ate it There's no way. There's no way. Yeah, he is. He's about three and a half Eat that big swim bait You guys haven't followed me on the IG be sure to do so you can go see the cool pictures and this this and that Barely look good old bass first one on the swim bit. Heck. Yeah. All right guys. We're out of new place right now Pick up this chatter bait try to give it a try Super clear water in here a lot of grass. Oh Man, there's some decent fish in here you guys should see how crystal clear this water is It's almost unbelievable how clear Dude, that was close dude Jesus man Is there anyone else out here? Dude, I was close. That wasn't I was frickin Jesus.  Hey What the man? Dude, what the what the Jesus Christ? Did you see how close that bullet just got? You see that? Can I believe that I drove all the way to Atlanta to visit my good buddy Noah and he is gonna stick me With that right there. I mean wow it looks pretty saucy though But I've never seen a person catch a fish on it is this thing gonna catch fish that would be my only reservation I know you guys are probably curious as to how I'm working this thing. I mean It's like I would say it's a whopper plopper style bait So the natural reaction would be just to maybe like wind it on in just a slow retrieve I did that for a long time with no success, but then I started like Popping it just popping enough to where the little legs will go Just for a second and pausing it and that's actually gotten me a couple bites. So It's kind of odd. It's an odd way to fish a lure like this I think you're just supposed to retrieve it, but wasn't the retrieve wasn't doing it for me So I'm gonna pop this thing until until we figure something else out. You know, what's weird is I haven't like seen Any like cruising around really? I mean a couple when we first walked up, but I haven't seen any Yeah, oh, oh I'm letting him. I'm letting me to Go on. Oh, that feels good, too. Yeah, it feels pretty good. You might be in the grass.  We'd be lucky if he is two and a half I don't know if he's that much, but are you kidding me? Like I said, is it gonna be legendary? And it was baby. Let's lay him flat Get him in the water right here There he goes look at that beast Look at that fish right there. It's big bass big bass He's literally sweat. Where was he at? Oh my god. Oh my god.  Oh my god. Oh my god. He freaking ate it. He freaking ate it and I lost him somehow I had him pinned. That was like a freaking four-pounder and look at the knot in my line Let's look at what just happened I'm standing here.  He's spooked. I went pop He puts his little nose up to it. I go popping because I haven't for a minute Yeah


we are here for another video for my creative year. Now I'll be really honest and tell you that I had no idea up until a little while ago what I was going to do with this month's challenges for my creative year. Absolutely no idea. While I'm talking I'm going to get out a couple of things. Let me try to use up some stuff. Anyway um the theme for the month is fun and by the time you see this the challenge word, the challenge will already be out too and our challenge is... I forgot it already. Hold on. Forward. So I went forward. I found those really interesting but again like I said I had no idea where I was going to go with them. At the same time right now my landing pad area where stuff sort of gets dumped until I can put it away has just gotten out of control again as it does and I have a sort of limited space where these things go on purpose because if I have a bigger space it just gets to be ridiculous and I can't function that way and I need to clean it and put sort and put things away but I need to work on this prompt and I thought okay wait a minute hold the phone. I find it fun to just randomly sort and put things away by pasting things into my journal. I think that's fun and you know I wipe off brushes in here when I'm working on other pieces I will randomly collage a piece of like this here paper into the journal because it's got to be gotten off the desk and for whatever reason I've decided I don't want to put it down in the bin so I don't and I think that what we're going to do is I'm going to show you my process for that and I'm going to collage some of the papers into my book. I'm going to have some fun with it. I'm going to turn up the music. I've got some gel mediums and some matte medium. I need to use up these gel mediums so we're going to use them first and also the gel mediums by the way these if you don't know already gel mediums work better for heavier thicker papers and the matte mediums better for thinner papers in general. You can stick down thicker papers with the matte medium. I like Liquitex fluid medium but it's pretty thin and it takes a lot of it. It's tough to stick down. It's easier if you use one of these gel mediums. This is Indigo Blue Super Thick Slap It On and this is a golden sample size of their regular semi-gloss gel medium which is a paint additive to thicken paint but it works great as a glue. I have another one over here. It's their Soft Gel Gloss so anyway these are old. I need to use them up. So we're going to do that. I'm going to have a lot of fun while I'm doing it. No rhyme or reason making art and having fun with your art is not always about making a completed piece. Sometimes it's just about having fun and enjoying the process and this month I am not going to show you how to do a journal page or a piece of art. I'm just going to show you my process for having fun well and cleaning up this at the meantime and no that's not all of it. I also have these over here. Cleaning up this and having fun with the bits and pieces that I find in there at the same time. I'm not looking to finish journal pages and make a completed piece. I'm just looking to have fun to slap some papers onto one of these backgrounds and have some fun while I'm doing it and sometimes that's all it's about. You can go back to it later and turn that into a completed piece but for right now I just want you to have fun with your art. I want you to slap some paint or some paper onto a page. Don't worry about what the final result is because we're not looking for that. I'll be right back with my speed forward of my process and then lately I always have let's see oops wrong way let's see zoom out I guess I'll back up. Lately I always have a big jumbo piece of art paper here on my easel and it is covered with originally ink and sprays that I was trying to use up before I moved so I did this in California last year. I have a number of these sheets and then what I do is I take one of them and I put it on the easel and it just lives there and when I'm painting I wipe my brushes off on it. If I'm mark making I come over here with a pen. I put collage papers on it like I did now. I had this watercolor eye that was from a YouTube video from last month. I cut it out and glued it on the page and at some point it'll become something. I don't know what yet so I want you to go out this month and I want you to just have fun with the process fun making marks it's not about completing anything or making a perfect work of art it's just about enjoying the journey and I want you to remember that and I want you to focus on that part of it this month. I love to say that ugly art is better than no art so I want you to intentionally go out make some ugly art make some backgrounds collage stuff down don't think about it put put painting brush marks on it if you're painting just scribble on a piece of paper if that's what you're doing that's what this is by the way this is just I was testing paint pens and I want you to just have fun with the process this month if you're not part of my creative year and you'd like to be the link for the Facebook group is in the description below all the ways to support my channel and the free content here on YouTube and also on Facebook are in my link tree which is also in the description below along with all of my social media links are over in link tree my Etsy store my Amazon store the tip jar patreon all of that so go have a look and and peruse around and surf around and have some fun and enjoy your process that's it for today don't forget the most important thing besides like share and subscribe and that is to go out and have a great day and do something nice for yourself because you deserve it I'll see you later bye guys


Hello everyone Paul from Paul goes welcome to this video. We're going to be taking another look at eight rack in modern So that's the deck I've rejoined at a really awkward time, which is that the modern league that I would normally join is going to end in Like a few days from now and there's a chance. I won't get to finish all five games in that time So I'm just going to be playing a couple of these One-shot sort of cues pretty good looking hand Our deck on turn one and grand. What have you got? Oh? Blackburn, okay Hmm Smallpox does work here. We've got a dismember up our sleeve as well So yeah, I think I'm gonna be a bit cheeky here and Take the extra point of damage Hey everyone We're back the last guy timed out he just disappeared on me the blackburn fella Ooh Yes indeed Okay, we have enough lands to support smallpox like if he goes turn one Inquisition He mulliganed I guess I'll keep going second here, so I'm on the draw Trying to think what this deck is with sea chrome coaster. I don't know if it's normal sort of just guy control Because obviously it's not doing anything yet. He is tapping out. Okay. Okay, that's good not spreading seas No, I actually wouldn't matter if was bring these are ad nauseam as if it is ad nauseam We are sweet. We are golden and as you can see I've made a massive mistake playing me default turn one I was supposed to play the swamp turn one Never mind never mind doesn't matter Do we smallpox here? I don't even think we do. I think we just crime I Just feel so mean and I'm surprised he discarded that actually because that would have been really handy for him What is going on here? Do people just not want to play me same thing? Sideboard wise we obviously are expecting lay line in all of its glory To be coming in so now I'm pretty convinced I do want to Does it even run removal I don't get cracking here And this really will pin him. I mean they're going truth Echoing truth Why do they play that main deck? I didn't know they played that main deck Okay, so the rack will work all the way down to zero uh and beyond zero I then need to get to a point where my creatures have infect And Uh, I then need to finish him off with infect creatures I don't know what happens here. Does mutavolt get infect? As long as all damage is as as though. Okay, right. So mutavolt will will have infect when it becomes a creature Both horrendous cards neither of which I want to cast Return Oh, he's got latest bloom coming. Okay, that's interesting So I think our logic was good here um Oh, that worked. Okay. That was the right order. So we raven and bash here Oh So lotus bloom is real Does he have two of them? Although that's what he doesn't have So Get in You get some poison counters I suppose could he draw solemnity and then it becomes a A milling race or something. Okay So do they run solemnity in the main deck? What'd you get? How nausea might do? Oh, he's found it. I can't believe it I can't believe it Oh, that stinks. That stinks so bad one off the top Yep, okay Oh, maybe I'm wasting time. Oh, there we go. Okay Begin sideboarding so Yeah, it's pretty much just this And then that Obviously thoughts is huge here And the last thing is this like that's it just doesn't it just writes itself doesn't it? I mean this Does this change against ad nauseam? I don't know Yeah It's deceptive ravens crime and a bunch of lands because at first glance it looks like you've got a one drop and a three drop You've actually got You've got one two and three Whoa, what? What on earth? What is going on? He must have just oh, sorry. He must have just drawn it. Did he draw? He must have drawn it for the turn. Okay I thought the world had gone mad there for a moment. Um, I'm going to back myself. I'm going to say I can get rid of that lay line Before uh, it matters or I can see what's going on here loses the spirit guide Okay, it's a decent draw Down to two cards Uh, is it lily or is it Double ravens crime pitch these two play mutavolt Can I give this both ways? He really could uh, he suspended another one Okay, that's why he discarded the right Any choice? He had two copies of the same card. All right So we have a very slow clock um But he can never have more than one card in his hand now Um, he can top deck Uh for xinun life That's something he can do We will be looking to ultimate as soon as it's safe It's not a bad draw for him Bottom bottom Okay, that's all the white man.  I could be ruthless here and Divide his mana sources up. But even if I did that He actually has eight nine ten eleven mana He's got this thing coming in next turn. I actually feel like it's With lilyana sitting there. I think he needs to draw A certain sequence of cards so he could draw leiland of sanctity for example now Go on to draw for xinun life and eventually You know find his way to um Now what are the piles? Oh my goodness If they if they choose really quickly, you know, you've messed up as a win condition. What was it swamp? Okay, he does get one more turn To find an unlife Swan song that's interesting But if he does that it gives me a two two bird to bash him with I don't think swansong is a good card for him He's going first Okay, all right Actually the wrench is pretty bad here Top, okay Yeah, okay. All right Um, okay Yeah Well, we'll just have to see if we can If we can find it now Opening seven had leiland so the chances of that if he had four Is like 36% something like that Could be all over Okay Well, I am being punished for my cockiness earlier about how great we are against Combo and and ad nauseam in general Do I mean lily smallpox really does help a lot here in these in this sort of situation? But uh We just don't have Those cards in our opening hand Unlife is is a disaster for us Who finds that? And he's still just waiting. Okay. Well lily's a start No, no vendillian click. Okay I f6 Bloody thing. Okay, never mind Silly mistake. Sorry for that I'm not sure how much it's gonna matter actually. Yeah, I'm just toast here until I find smallpox Yeah, okay, maybe he's going off here. So should we have mulliganed Knowing full well that there were four lay lines on the other side That will become the um The question So he'll win whenever he's able to win. I think all right. Come on. Put me out of my misery, man Yeah, yeah.  So should I be for an instant card or a card with flash reveal it and put it in your head? May have been right, but I don't think it was if it was right. I don't think we were badly wrong Um, I mean he's not in great shape at starting the three cards in his hand though either so Uh, he mulliganed.  Yep. Yep. Yep. Okay. All right. I don't need to see Well, actually I do because I'm gonna It's getting hard in here. Sorry. I'll keep the singing to a minimum from now on. I promise Uh, is lava spike the one it doesn't make you sack of land doesn't no no. Okay. Yeah, so lava spike goes Bolt to me. So this is a 50 50 against burn. It really is like You know, we have A chance. Okay, there's the other one Uh, how do I make him pitch that card? Do I want to I don't know what that card is so thoughts ease is really risky Here you can it's probably it's almost certainly a two drop. It could be lightning bolt Well, I'll be conservative. I'll be conservative here Uh, there's no point thinking that wrench mine's ever gonna make him just card two. It's just never gonna happen Yeah, he's discarding the card. Okay, that's cool And it was a land. All right So we dropped a 14 here Yeah Field is interesting. Um I think bob is gonna just be too good here. If he if he attracts a lightning bolt, that's totally fine He's good. He's he's decent in this matchup There's actually the weird thing with burn is they don't actually run a lot of lightning bolt Cards that actually do the same thing as lightning bolt does um You know boris charm skull crack they all target me so Yeah, boris charm lightning helix me. Okay Hey Yeah, that's all right. That's a bit of a concern Okay Be punished here, but we're not we're not punished at all Let's go get in and I think we want to destroy the sacred foundry here Uh, yep, not thoughts easing. So Ah Okay played too quickly there. Sorry everyone I clicked on the space where the the mutavolt what I thought was gonna land In order to cast the rack so Uh, that really stinks. That's good news So get away with one here So bob happens Hurts me a bit, but that's okay Yep, I don't think I want to do that I think that really would have helped to kill that sacred foundry would have been really good there Field of ruin welcome to the team. I'm really liking the fact that this is in my deck now Imagine doing that to tron At the right time Really cool Okay, so he does nothing I'm taking that foundry if you tap if you tap it. I'm taking it Oh Well, so if I do it now he responds and that's magnificent for us if he responds so Because these triggers go off with him on one instead of two cards Yep, he's responding So he needs a miracle Off the top. Well two bolts would do it. I think that card's a land I really do You know revelry or helix or whatever It's got to be exactly two lightning bolts. I don't think he has any other Sorry, it wasn't too. Yeah, okay. It was Yeah, oh, I'm dead. I'm alive I didn't even see that Oh, I didn't even see that with bob. Oh, that's tremendous Um, oh that was shocking to win despite your own idiocy that that's uh in the simpsons somewhere, I think Ah, oh my goodness I don't keep this. I think I can afford to take this gamble That's okay. Well, if it is a swamp, I'll be very happy Yep, perfect All right, so I could inquisition here um I'm not gonna just push him now. I could just push him now Don't know. I don't know. I don't know Hydralon is bad. Good. Good. Good. Good. Good. Ah, that's sweet That is sweet double inquisition Better than wrench mind Better than wrench mind. Yeah, okay He's down to four cards. I have an affliction in hand You show me your hand, baby. Oh, yeah Yep, so generally speaking when you're inquisitioning burn Take the cheaper card like these two things do practically the same thing The three life isn't as important as the efficiency he gets out of lightning bolt So that is the one we take And then same again Inquisition is just a joy No, well, this one will be lightning helix. Okay, that's fine I was going to say he'd cast the bolt in response there, but um, yeah No, that's fine Very happy with that I think that's his hand there Yes, that happens 2115 Arid Mesa No creatures Good. Good. Good. Good. Okay. Oh, that's Larva Spike. Okay. Well, he's got game here He does have game He does have game And plus her Hang on nine once you're under 10. You're probably dead.  I'm definitely playing land. Um Let's think about this if I play bob and he draws a Boris charm Or any lightning bolt effect. I'm really putting myself in massive trouble I shortened the clock though Down to two turns instead of what it is now.  So we are yeah passing the turn Okay. Well burn, man. It's a gamble. It really is a gamble. You've got Oh, yeah. No, no, so it's the same maths. Yeah, I've forgotten about the three damage from shrieking I actually think if I played this deck in paper, I would be horrendous at it I would be missing triggers left right center. Yes Well, how does that change things? It it it brings the clock forward by one Um To find one off the top so that really doesn't matter now Yeah, it all comes down to the top of his deck what that is What you got goblin guide come on Oh, did I call it down to one life? Man burn. It's always like It's always juicy Always a juicy matchup. It really really is. Um, so I did I make any mistakes? Uh, at the end of game one like when I totally forgot that bob was a relevant his trigger was relevant I mean I was on six life. I thought one of his lands was one of his hands.  I really I'm not a huge fan. I mean I'm going on the draw here So I'm gonna keep Um, maybe it's actually better than my first reaction. It's a little bit thin, but uh We will keep Double bob is not really what I want in in in eight rack he's more with bob you I really the reason he's in this build of eight rack for me is He's a finisher, you know, he's not actually what I want to do on turn two. He's kind of what I want to do on turn five Yeah, so not very scary. Uh, it's definitely search here Uh, I think that's what we're gonna do Small upside of playing a single black male just gives you that little bit of variety I didn't invent this. Uh, yeah, I I I came across this online someone's, uh, list Uh, who'd gone five and oh with eight rack It's become a pretty popular thing to put one black male in and it just gives you the opportunity sometimes to do this Which is just mean There's chance of breaking on land here Um, we'll be very very happy he's drawn Yeah, I'm just gonna go for it.   Yep All right. Well, he found one. That's fair enough Discard effect. Nice. Nice. Nice. That was okay. It worked out. All right. I mean bob did his secondary role of Soaking up a removal spell and acting as a a one for one Not really what he's in the deck to do but um, I think this kills him unless he can draw a card Is that once your opponent starts hoarding? Cards to protect themselves against the rack and tricking fiction You are in very good shape unless they have You know frexian arena or you know some other kind of gross thing or they've got maybe Bob of their own that you can't interact with it's going to draw them two cards per turn that it does work But generally once they're in that situation they're they're in very very big trouble Um, I'm going to assume that we are looking at go mag angler and tassaga. I don't See how else that deck can win He's not doing death shadow that much is clear Um, I gotta drop a card here with a minute to go What have I done I've taken out a wrench in an inquisition So I'm taking out discard effects and I think that feels okay. It's a longer game Black male still good I think maybe bob actually is not as great here Yeah makes way for lay lines seems okay. We'll do it this way I'm going to be on the draw as well. So He's going first. Yeah. All right, so we have a lay line um We don't have a lot of other stuff going on. Um, there's no need to give him free access to Black mana just yet um Because dredge doesn't show up often enough See that's just fantastic. Look at that thought scour go ahead and enter the exile zone So lay line is is far from a guarantee of success against this guy He can just easily play an honest six lands and cast tassaga that that'll obviously happen from time to time Don't mind getting counter squalled here It's a backup. I mean he can't Okay, sure.  Yeah, and now with the new rules the rat can't hurt him and We we are in big trouble Uh, maybe I should take that chance So that's why I'll do it this way you get rid of the beta And then I'm allowed to Resolve a lily What would those snappies have got they would have got back more thought scours Counter squall Has it four turns? Yeah Can he counter squall? He can Very well played That is beautiful Very well played. That's just gorgeous Excellent move beyond really really well done So he knew that the smallpox would resolve and crush my hand my land base That that was that was really really good So a weaker player or a less experienced player would have countered the spell This guy knew exactly what he was doing Oh, I suppose he could be with chase. He was always going to have them Yeah, good game. I mean sucks to lose but um Really really good game against this guy and game three is going to be interesting because I I'm torn on layline I really am torn um, I'll play this And pass the turn You know apart from dredge and hollow one like hollow one is yeah, sure obviously bring it in There's enough there that we hate um Well, this might tell us if we can just concede or not. He's going to build his way up to ultimate There's no graveyard for coal again. It can kill a rack So these aren't even playable um Try and remember what those cards were Um, my argument for going first is definitely a lot weaker though. I think here I just can't see how I can possibly win from here. I've got to take something Crick's control I don't rate our chances of winning very highly against ancestral vision and search france counter and he's got One copy. I'd just one copy maybe in of search I think that's all they normally run. They normally run one if they're running any at all minus 12 is coming This becomes my library He's still got plenty of time 12 minutes. It's not worth playing to time here. Um Oh So we'll go first Likes what he saw So we can protect bob. Oh my god well All right, so I have no discard pressure um I lose the game if I play If I take the bolt if I take the vision and play bob and turn two he gets bolted Um The guy then untapped plays a second land passes maybe does nothing But I have literally nothing. This was maybe a bad keep by me I think uh because I've pinned all my hopes on bob and I feel compelled to take the bolt So if he doesn't draw an answer to bob, I get two turns of him It's hard, but it's possible This is where we really need him to do his thing Yeah, okay No problem Well, we're forcing him to throw away the um The best Yes, that's probably the junk right. He didn't he didn't brainstorm for that. So I'm very interested to see now What do we get by doing this? Oh crap, I better keep this one really I wonder if he's gonna be watching sweden versus switzerland What you got Draw four cards make it five with jace. Does that sound make my job a complete nightmare? Yeah So so hard. Yeah Maybe I should just become more of a pessimist How do I win from here? I should just concede actually that's just uh horrendous Yeah Because I can actually Oh, no, I am dead because he has another bolt in hand I can't see how I can possibly win from here And you don't want to hear me You know being like all depressed and stuff for another 20 minutes while I slowly die Oh, I think we'll keep oh Jesus. Oh Hello, right Um, okay So the mirror You never expect to see the mirror match, man Um, the mirror match all comes down to who gets the most racks Uh, so if I play Uh, he's gonna win this game. I think ravens crime is fantastic Um Yeah, no, I don't think I can win this game Um, these mirrors actually usually aren't very Interesting. I've played a handful of them, but um, yeah He takes my one so he has one and I have none I mean, he's worried about his land base. I guess he's thin on lands But, uh, if Yikes, no, he didn't find it So smallpox is gonna be good here Although it's just it's just it's just symmetry. I mean Yeah crunch time Um, he's dealing five to me a turn. I'm dealing six to him I'm winning the race. I think it's probably fair to say. Oh my goodness Uh tough spot. Yeah. Yeah, if he'd hoarded there though I go to six. He takes one. He could have hoarded. I actually think that was a bad concede Bob is awesome Um layline against his raven is not worth The paper it's printed on All of our discard spells are bad Um fatal push on his Mutavolt Could be a thing Certainly better than dismember as a starting point You're like flying the ointment. They don't have anything that costs more than three So I'll run three fatal pushes if I have all three of them in my opening and I'll Scream and ball, but uh, okay. I have a bob I have a bob, but I don't have anything else. He's kept seven We don't I'm gonna keep I don't it's with borderline I'm on the draw here. So Okay, that's a good start. Okay Yeah, nice one. So I can protect bob now From smallpox or the like Uh, okay, I'll be in very very big trouble if he plays that smallpox I can't take that risk. I have to I have to take the smallpox Um, yeah, it's just no black mana Oh Wow You don't see him very often Um target opponent's cards a card and then if I have none in hand he flips Uh, yeah, okay.   The cool thing about this guy is that he's repeatable. Very very cool Um, am I ever gonna wrench mind? Uh, maybe that was wrong two lilies. I'm probably gonna have to discard another card before the game's over anyway I've been losing track. I think I don't know what any of these are now, but this is just Oh brutal when he earns it back for you. It's just like boom This doesn't take a genius Confident sweet as a plum So smallpox would be quite bad here for us smallpox is a good answer if you can find it or draw it or lily He's got something Just raven Yep, sure This guy's repeatable effect. He's actually pretty cool If he has then he flips by the way, I key came very close to flipping there What happens when he flips at the beginning that player loses one life for each card for you. Oh, he becomes a walking rack. Okay, that's right So the mutavolt cannot activate Um So I think it's lilyana minus one here Yes, the mutavolt can't activate. I'm wrong. It can activate itself. It just can't block um Yeah, I just don't see why Oh, well, no, I will play this one actually So, yeah, it's been it's been emotional Um, we aren't out of the woods yet by the way, uh, what could he do? He could top deck smallpox would be great lily His own lily would be good um His own lily would be quite good make me sack the bob would be on even terms then To get rid of that bob would be a thing. Okay so Just gonna hope to ride the card advantage to victory here Um, but if he draws, I mean he can knock me to maybe I can't afford to do that if he attacks with both mutavolts I probably can't afford to do that Down oh Okay, can do yep respect respect respect Okay, well Wait, wait, wait He didn't attack Oh my goodness Um, so his afflictions aren't working. I think again, it's not right to attack here. Is it? Or he needs to go all in if he plays a fourth land swings with everything I Probably block with everything. Yes yield. I yield So depending on how far down I drop I might be in a situation where I really have to win Or I'm Motivated to try and win this turn, but swing with both. I can only animate one take two damage the rack does the rest Oh, is that an instant heroes don't fall? I thought it was a sorcery Um, okay.  Okay. Well Good games. I wonder if he's trying to say good game to me. I'll just check Crog Anyway, thanks again, and uh, I hope you enjoy playing eight rack and I'll see you soon. Cheers