Behind the speed-up in our factories, behind the ceaseless drive of around-the-clock labor, is the great military need to keep the men on the fighting front fighting. From the factory to you is no longer just an advertising slogan. It's the key to our determination. It's our country's promise to its soldiers. And while most of our equipment travels first on the high seas, or even by air freight, eventually it must be transported on roads, roads that feed the combat zone, roads that carry the guns and machines from that factory in Detroit to the men who need it when they need it. But remember this, the enemy doesn't care very much for our guns and machines, and he'll stop at nothing to destroy our lines of communication to blow up our roads. That's where you come in. We use road expedients to keep roads open and to get vehicles across country where there are no roads. When we haven't the time, the material, or the equipment to build a permanent road, we use an expedient. This means fitting the material you have to the conditions you face. And no matter what the situation is, you must do something. You may have to improvise a detour around a shell hole or a bomb crater. The next time you may have to construct a stretch of temporary roads through a swamp or through a wood. But whatever your job, knowing how to do it properly, knowing how to do it quickly, may save the lives of the men just up ahead, or even win a battle. Suppose that a new railhead has been set up here, and as yet no road connected to the supply road. Now we don't want supplies piling up at the railhead. We want them at the front, immediately, where they'll do some good. To get them there, we may need some kind of road expedient. In this case, we've run into some soft, muddy ground. Luckily, there's enough lumber nearby to build an elevated plank tread road, and that'll get us past it all right. First of all, large timbers, 12 feet long and 6 by 6 inches, are brought up to the site. Place these timbers crosswise in the roadway, at right angles to the direction of traffic. Space them 3 feet apart, center to center. The NCO uses some sort of marker to see if you get the proper distance. There may be interruptions, but you must keep at the job. So, back to building the road. On top of the cross ties, place the tread. These are 3 by 12 inch planks. Place them lengthwise along the roadway in 2 strips. There are 3 planks to each strip. Stagger the joints. That way, you avoid concentrating all the weak spots in one place. Spike the planks to the cross ties. Use 2 60 penny spikes to fasten each plank. If you have a pneumatic nail driver, it'll save you a lot of time and keep you from getting an engineer's back. Maybe. The curbs can be timbers the same size as the cross ties. In any case, they should be at least 6 inches high. Fasten them to the cross ties with drift pins. Reinforce each curb joint with a fish plate. Figure the distance between the curbs so that the truck with the smallest clearance can drive over the road without trouble. And remember, it might be your mess truck. But building the road isn't your only problem. You have to keep it in good shape all the time. You'll have to tighten the spikes that loosen under traffic. And if necessary, drive more of them to hold the treads in place. Try out the broken planks, get rid of them and put down new ones. There's patchwork to be done, sure. But don't get the idea of plank tread roads just a flimsy makeshift. If the material's around, you can build yourself a good, tough road. When you're in a stand of natural timber, the problem is simple. Chop the trees down, trim their branches, and use them to build the dependable old standby, a corduroy road. It's easy to lay down if the ground is fairly firm. The ground can be muddy, but it has to offer a reasonable amount of support. The logs should have a diameter of about 6 inches. Their length varies according to the width of the road you're building. Whatever the length, place them side by side at right angles to the direction of traffic. Notice that the butt and tips of the logs alternate. If that weren't so, there'd be wide spaces between logs at the tip ends.  Then they won't be so liable to snap under the pounding of heavy trucks. See to it that they bear on the ground over as much of their length as possible. Logs at least 6 inches thick form the curbs on each side. These are held in place by pickets spaced every 10 feet. Drive one picket at the edge of the road. And don't try using a sledgehammer. A mall's the tool for this job. Drive another one between the logs on the inside of the curve. When there's timber at the site, you can build an unsurface corduroy road quickly. But if it's at all possible, take extra time and cover the logs with a top surface. Cover them with gravel if you can get it. If not, earth will do. But in any case, spread a layer of brush as a base to keep whatever material you use from seeping through the gaps between logs. Then dump the gravel or earth on top of the base layer and spread it out evenly. There are good reasons for going to this added trouble. The road can be used without the surfacing, but it's rough on both the trucks and the road itself. And in wet weather, it's as slippery as GI shoes on grass. The earth or gravel gives a smoother riding surface, better traction in wet weather and doesn't call for so much maintenance. Now in softer ground, a corduroy road needs the added support of stringers. These stringers should be at least six inches in diameter. Lay them firmly on the ground lengthwise along the line of the road. Space them about three feet apart, center to center. Place the corduroy on top of them instead of directly on the ground. Then spike the corduroy and the stringers together, each log to each of the stringers. That'll keep them from slipping out of position and tearing the roadway down. While you're doing this, another crew should be laying additional corduroy. The road may be needed sooner than you think. There's no time to swap latrina grams. Next, of course, you lay the curbs and spike them to the corduroy. Retaining pickets alone won't hold them in place in ground as soft as this. But you still use the retaining pickets since spiking by itself isn't strong enough. As before, spread a layer of brush over the log, then cover the brush with earth or gravel. When you're forced to use stringers, you'll find it takes about twice as long to build 100 yards of road. Now, in a swamp or in marshy ground, even stringers aren't enough support for a corduroy road. You'll have to reinforce it still further with a foundation of heavy logs. You lay these heavy logs crosswise in the roadway under the stringers. They give the road added strength, make it strong enough to withstand heavy traffic over wet and sloppy ground. Place the stringers three feet apart as before, criss-crossing the heavy logs. Then spike the two layers of timber together. Now you're ready to lay the corduroy. And from here on, the method is the same as before. Here it is, the flush carpet for our tanks. But you can't just stand around and look at it. Maintenance is a big item. With a corduroy road, it's mostly replacing broken logs, logs that can cause a breakdown if you don't catch them. To get to them, of course, you have to dig away the top surface of gravel and the base layer of brush. You have to get rid of the broken logs and slide new ones into their place. Whenever you use stringers, be sure to keep the spikes driven down. They have a tendency to loosen. Then after the repairs are made, cover the logs again with the surfacing material and the roads as good as it ever was. There's still another expedient for moving troops and equipment over marshy ground. It's nothing more than a variation of the corduroy road. And it consists of prefabricated corduroy mats, which you make up in advance. Use four-inch logs about 10 feet long and weave them together with wire. As with all corduroy, the logs should be butt to tip. Once completed, each mat or section can be rolled up and carried to the truck or trailer which will take it to the road site.  You can carry them without too much trouble and place them in a hurry. Lug them over to where the road is being built. Then unroll them one after another along the side of the proposed roadway. The logs in this type of road tend to loosen under traffic. That's what you can counteract at by wiring each mat to the ones on either side of it. With these mats, you can build an expedient that's just about the same as corduroy. It won't stand up as well, but it'll get us where we want to go. In emergencies, corduroy tread mats may come in handy. The dimensions for these smaller mats run in threes. Three-inch logs approximately three feet long. You weave them together exactly as you do the larger mats. One advantage they have is that the sections are light enough to be handled by a single mat.  Well, a tread mat'll get you out. Spread it in the mud in front of the wheel. Make sure that it's in place firmly enough to give you traction. Start the truck and there you are on your way again. While we're still in the corduroy department, let's look at another expedient made to order for marshy ground. It's the steel landing mat which is normally used for temporary runways. Lay a foundation of brush or saplings first. Then lay the landing mats on top of them. These mats come in sections. Each mat has its own special type of connector, and you can see how easy it is to fasten them together. If the material's on hand, use two layers of landing mat sections. The second layer forms treadways to distribute the load over the bottom one. Here's the completed roadway, made from material designed for an entirely different purpose. The desert, with its sandy waste, gives you special problems all its own. Of course, with a ground surface as hard and firmly packed, there's no trouble. But you can't rely on that. Desert terrain is tricky. Sometimes you'll run up against loose sand that bogs down our trucks, makes their wheels spin helplessly, gets us nowhere at all. Loose sand prevents us from getting water, gas, and ammunition on time. It's your ability to build expedience in this kind of country that'll help us pay off. One possibility is to build a wire mesh road. Plain chicken wire is a simple and effective expedient. Load the material onto trucks and drive as close to the site as possible. Then carry the road to where you're actually going to lay the stretch of road. Unroll the wire in overlapping strips. That takes little enough time, and two men can handle the job. Then wire the overlapping strips together. When that's done, you'll have a road that's wide enough for traffic. If cloth or sandbags are handy, use them to cover the chicken wire. If there's not enough of either, you can use brush, anything to stop the sand from filtering. Remember, these are road expedients, and that means you've got to use whatever's handy and make it fit your needs. Next, lay a second layer of chicken wire on top, and after you wire the top strips together, dig trenches along the sides of the road. Drive pickets in these. Set them at about six foot intervals. Pass in both layers of wire. That's to keep the wire netting taut. Be sure that the connecting wire sloped down into the bottom of the trenches so that there'll be a downward pull on the edges of the wire mesh. And naturally, you'll have to tighten the connecting wire, otherwise it would serve no purpose. Then run other strands at an angle to the wire mesh at points midway between the pickets. This adds to the tension of the netting. Here's a diagram of the roadway. Notice how the wires fastened to the pickets exerted downward pull on the wire netting. Now to hold the roadway in place even more securely, use a diagonal wire system that you string across the top. Fasten the wire to the first picket at one side of the road. Then string it over to the next picket down on the opposite side. Tie it. And then keep on zig-zagging. This diagram of the diagonal wire system should give you a good idea of how it works. After you've finished all the wiring, refill the trenches. You don't need them anymore. And some GI drivers will be sure to find them if you don't cover them up. Of course, you're not finished just because the roadway is. You'll have to keep on the go to maintain it after traffic starts moving. You'll have to repair brakes and the netting for one thing. You'll have to keep the tie wires taught. No sense kidding ourselves, this material needs constant maintenance. Light chicken wire is okay for ordinary sand, but if the terrain is hilly, then you need more substantial stuff. Take this light landing mat, for example. It's called Summerfell Track, and it's simple enough to hold in place. All you have to do is stake the wire at the top of the hill. This road is not only easier to build than the one made of chicken wire, but it will stand up much better. Now another way of getting over steep sandy grays is to use what we call Army Track. Start preparing it back at the base depot. You need 10-foot timbers, 6 inches by 6 inches. Pre-board to fit a one-half inch wire rope. Bore the holes at an angle. That's so the wire rope will lock in the holes and keep the timbers from slipping. At the site, your first step is to place the pre-board timber crosswise to form the roadway. Allow an 18-inch space between each one. Then thread the wire rope through the hole. You'll have to anchor your roadway to keep it from slipping around under traffic. So fasten the wire rope to strong picket hold fast to keep the track in place. Then, last of all, fill the spaces between the timbers with sand.  This is no magic carpet.  You've seen how to build many kinds of road experiences, and just as important, you've seen where and when to build them. We need these roads. The enemy will try to tear them down. You'll have to build them up again. The President has said there are many roads to Tokyo. The chances are the engineers will have to build all of them.


What's going on guys it's your boy DPJ so we've finally seen what the first Destiny event of 2016 will be. Bungie not long ago dropped the first weekly update of 2016 giving us details of the first event of the year. If you guys missed the weekly update and want to read through it all it will be linked in the top of that video description so check it out. So what is the event? Most of us want to do a turn of old raids, we wanted ways to obtain the exotics we knew exist but ain't in the game yet. We want something that gets us all playing a game like we once were. So what do we get?   The best part of all of this is at the start of the weekly update they state the following. This weekly act of sharing two bed for a short winters nap. Since then you've been talking a lot and we've been silent listening while we work behind the scenes. I mean really listening to who. So what is this Valentine's event? Well it's called Crimson Days. A new Crucible 2v2 mould called Crimson Doubles it features a special twist born of new gameplay that only battle tested star crust lovers will appreciate. In this new 2v2 mould you'll be able to earn some sweet new loot. Now I don't know about you guys but this has come as a major disappointment to me. Did I mention it's only lasting a week as well which just isn't good enough. Nor is it what Destiny needs. Destiny needs something that will suck all players back that have moved on due to lack of content and being bored with the game. This in my opinion is not that, not that by a long shot. Destiny needs something PvE related that we can all grind and fall deep into. Now a couple of good things that have come out of this weekly update is that I am banned at and it's return and this time around it will be rift. Something I thought should have happened ages ago. They also talk about lag many people experience in Crucible and how they are working on a fix and that's basically about it. Like I said if you guys want to read through the whole weekly update it is linked in the top of the video description. Also guys tell me your thoughts on this new Valentine's event down below in that comments section. The event itself will be coming in February and it's going to be on the same scale close to Festival of the Lust. But guys hope you enjoyed the video do drop a like I do appreciate the support subscribe for daily Destiny and I'll catch you on that next one. Peace out till next time. Peace!


How much to charge for your digital course? Okay, so you've done a digital course and you're like, I want to make money, but I don't know what to charge. Do I charge a flat amount? Do I charge $1,000? Do I charge $100? Do I charge $19 a month or $497 a month? I don't know. Are you in that position when you've come to the right video? Because in this video, I'm going to show you empirical data proof of what you should be charging for your course so that you get more sales and make more money. And we're starting right now. Hey, I'm JR Fisher. Thank you so much for watching this video. In this video, it's going to make you money if you use it properly because I came across some data and this particular data was done by Lin Markiden. And what he did is he actually looked at 133,000 courses and broke them all down, looked at all the data and figured out the best price to charge for courses. And you can apply this to your course, make more money and get more sales. So I've been selling online since 2009. I've sold millions of dollars of both digital and physical products. I've learned some stuff along the way and this channel is really based on that. It's based on you guys learning what to do and how to do it to make money online. That's it. So this is essentially your channel. This is not my channel because without you, there would be no channel. So I would really appreciate it if you put any comments below, any questions you may have, anything you need help with, I'll be happy to help you. Don't forget to like and subscribe. There's a big subscribe button there. When you hit the subscribe button, it's going to be a bell that's going to pop up like that. You got to ring the bell. You got to turn on all notifications that way you're part of the Fisher family. And I can notify you every time I do a video or every time I go live, which is pretty cool stuff. So make sure you do that. Now this pricing thing is so very important. And some people will say, well, I don't only want to charge $27 for my course because if I only charge $27, let's say it's a monthly fee, $27 monthly fee, I'm not making much money. And I put three months into making my course. But I want you to think about this. If you're charging $27 and 10,000 people buy your course, well, that's a lot of money. That's $270,000 that you're taking in every single month. But if you price your course at $997 and only three people buy it, then you aren't making any money. So it's not really the pricing. It is the actual science and the research behind it. That's what I want to go over in this video. Now the research on these courses starts at $5 per course and goes up to about $1,400. And I want to share with you all the data that he came up with. And you can use this to figure out what to sell your course for. This is actually based on 448 unique products out of 132,000 sales. So let's check it out. Okay, as you can see by this chart right here, the overwhelming majority of the courses fell within the $5 to $50 range. That's where the majority of the courses range are. The course prices began to whittle down as we moved higher up into the high price ranges. So here's the top five most prolific categories. $5 to $50, there was 175 or 39% of the courses. $50 and a penny to 100, there were 84 or almost 19% of the courses. And then we got $100 and a penny to 150, there were 34 or about 7.6 of the courses. And then $150, $200, $30 or 6.7, and then $200 and a penny to 250, there were 22 or 4.91% of the courses. Now, after that was looked at, the extreme outliers were also looked at in that data set. For the purpose of this research, what he did is he figured the extreme outliers are ones that are not really representative of the majority of them. So anything that was more than $99 from nearest data point was assumed to be an extreme outlier. And some of this was removed, one course was $1,500. That was not used because the closest data source to that was $1,395. So that was just kicked out altogether. All right, so let's look at some of the numbers here. We've got the average sales price for courses in the data set was $182.59. Now, that's consistent with the earlier case studies where the average was $199.99, okay? So that's pretty close to that. That hasn't changed much over the years. Now let's check this out. We're gonna check out mode, range, median and mean. The mode is the value that appears most often in a data set. The range is the difference between the lowest value and the highest value. And the median is the middle number in a list of numbers ordered from lowest to highest. And the mean is the total of all the values divided by the number of the value. So now that we've got that technical stuff out of the way, let's get into the numbers. Now, in this case here, our median is $76.50. So does that tell us anything and how far is it from the actual average? To understand, we actually gotta look at a whole lot more statistics within here. So the first thing we wanna look at is the central tendency or the standard deviation of our particular data. This information will give us an idea of how closely distributed our data points are. In other words, what the core sales prices are and how they correlate to another. It's phenomenally high, I will tell you that. It was 239.86 to be exact. Now, as you can see on the screen here now, you've got your bell curve, your standard deviation. And you can see what that is. And this model, 99.7% of the data falls within three standard deviations of the mean, which is the average. Well, 95% falls within two standard deviations. And I promise you, it's not gonna get any more complicated than this, but you have to understand those principles first. Okay, so here is the standard deviation chart here. So this is all very, very fancy. I know all that stuff, data is so fun and different. But although the average may not be a bad idea as a place to start, it fails to convey just how widespread the data is. So even though you say, well, an average core sells for this, that doesn't mean it really is representative of what you should charge for your course. So at an average price of 182.59, that doesn't really give you the statistical knowledge to price your course. You don't wanna say, well, that's the average price for course, that's when we charge for mine. We as course creators have to start thinking about how that price is gonna affect our bottom line. Obviously, when we go up in price, fewer people buy it, and when you go down in price, you tend to have more people buy it. But that's not always true. If you have a course that should be a $500 course and you're charging $7 for it, some people will think it has no value. So it's not always a direct correlation. So here's the product demand matrix right here. And what you wanna do is you wanna position your product idea in the appropriate box and avoid any idea that falls into labor of love. So as we see in the top right here, we've got high end, high price, few customers Rolls Royce, that's what that is. Next one we have is the Gold Goose, high price, many customer, that's like an Apple iPhone, something along those lines. Next one is mass market, low price, many customers, something like McDonald's. And then the labor of love is low price, few customers, unprofitable idea. We try not to be in that particular one, okay? If you start off pricing your course in the 50 to $100 range, your product will fall into the mass market category, okay, if that's where you wanna be. You may or may not wanna be that way with your product. If you wanna aim higher and try to hit that golden goose type thing, you're gonna be falling into the $100 to $150 range. When you put your course at a higher price, let's say $9.97, that's gonna reduce the number of people that's buying it, but it also puts you into another more dangerous area and that is the piracy area. When you start charging a lot for a course, you're gonna find people are gonna try to steal your content. I know I've had this done to me, they've posted it on the web, and you have to go chase all that stuff down. So you wanna keep away from that. Now, if you price it too low to where everybody can buy it and everybody wants to buy it, you may lose money on just customer support alone if you've offered them customer support. So let's take a look at this picture right here. It says sales in this scenario here, 28 customers sound good, but how much of the profits will you lose if you have to provide after purchase support for those customers, okay? So you got 28 customers at $29 per customer, it's $812. You've also got 28 potential support tickets, okay? So what's a solid place to start then? Begin with the following questions. How much did the course cost you to create? And if you say, well, it was just my time, so there's no cost to it, your time has value. Everybody's time has some value. It's from minimum wage on up to whatever, but bottom line, everybody's time has value. You also gotta look at what your budget and overhead is. What do you have to sell to cover those fixed expenses? And we all have them, whether it's just electricity in our laptop or whatever it is, we all have those expenses. So here's the basic formula, net income over total revenue equals profit of margin, okay? So we all have that profit of margin. So here is an example right here, plan and write a novel in 90 days or less. Let's say he sells 12 courses for a revenue of $804. That's 12 times 67 bucks. That's what his sell for. So right there on the screen. The cost to produce the course, including his time and materials was $120. Since he only had to make the course once, we subtract his one time expenditure from his total revenue to get his gross profit. So we've got the $804 minus the 120, which gives you $684 gross profit. Now, if you add in a marketing budget, let's assume he spent 75 bucks to market to those customers. You take that $75 out of his gross profit and that gives him $609 before taxes. Adding taxes into the mix rate at say 10%, which we know that's lower than most states, gives us a net income of $584.10. So his profit margin calculation would look something like this, which is on the screen now. You've got that 804 on the bottom there, 584.10 on the top. So you've got 0.73. So you convert this to a percentage by multiplying 10 and you get a very nice profit of 73%. That's not bad at all. So here's an example of online coaching right here. You've got your price, your high price, okay? You've got your high-end coaching. We know that's the highest price on the top left there. Then you got your unicorn right there. Then you got your mass market. Then you got your passion project, not good. We don't wanna be in that box. And this is the same as the numbers I showed you on the other ones. Here's another chart I want you to check out here. It's based on the analysis of 101 startup host mortems, okay, ones that died, okay? These are the top 20 reasons startups failed. Number one is there's no market need, okay? So whatever you're doing your course on, if there's no need for that course, if that course is how to set up a camera stand for your camera, there's not gonna be a lot of market for that, okay? Or how to turn on a light switch when you enter a room. That is not gonna be a big market situation. The next one here is ran out of cash, okay? This happens a lot. That's 29% of the businesses that went out were because they didn't have enough cash to sustain the business. The next one there is not the right team. Whoever you hire to work with you, work for you, can make or break your business. Super, super important. And that was 23%. And then the last one is competition beat them, 19%. They got outcompeted, okay? So you wanna look at all four of those as you start your business. I would suggest, now I would suggest you checking out your competition. I do this with pretty much any product I'm selling, whether it's a course or it's coaching or whatever. I look at who's out there. I look at what they're doing. I look at what they're charging. And then I see, can I do that better? Can I do that cheaper? Can I give more value? Can I do that? Now, if you're wondering how to find your competition, I would suggest using something like similar web. You can go to similar web, type in a website, you can type in a type of product or whatever, and you can find similar things out there. And it gives you the market intelligence solutions to win your market, they say. Once you've signed up for similar web, this picture here is an example of Old Navy. We stuck an Old Navy here. And you can tell everything they're doing. You can see their monthly visits. You can see their unique visitors, the average visit duration, all those types of things. So this gives you a good insight into this business if that was your competitor. Now this is the demo mode. So this one here is sites similar to Old Navy. And you can look at all the different ones there, but it's only gonna give you five results per website metric. Now the guy who started Video Fruit, this is a little return on investment for dollars spent. And when he built a list of interested people, he actually made $25,000 in profits. When he first started to market it, and if you look at the screen here now, he lost $1380 without a list and made $25,000 with a list. So building that list, that's pretty important. So to wrap all this up, we went over basically marketing your course for a price, but I want you to also look at continuity. I want you to look at charging monthly. So maybe you've got a course that you wanna sell for $997. Could you sell that course for $97 a month or $197 a month? And would you make more money? $197, obviously more people are gonna have the $997. And if you get more sales at $197 and they pay you two or three months, would you make more money? I have courses that are $397 a month, which is more of a membership. I have ones that are $197 a month. I have ones that are $27 a month. And that continuity is great.  Those are really, really nice. And I have that constant income of $27. Now some people will make one or two payments and then they quit and that's okay. But some people will pay for a year, two years, three years, okay? And once you've built that up and it takes more time, but once you've built up those smaller payments, those $27 payments, it's a nice income. And there's a portion of those people that never quit. I don't know why, they just never quit. You can keep it fresh if you add videos. I don't add as much to mine as I should. I need to do that more, get on that a little bit more. But the point is that information's always there. And if it's that lower in price like that and they get some value out of it, they're gonna say, well, I didn't look at it last month, but maybe I will next month, it's only 27 bucks.  And this can go for coaching, this can go for courses, this can go for tutorials, whatever you want. That monthly income is really, really nice. I highly suggest continuity. I really do. So I hope that gives you a better insight on how to price your course. You looked at some of the statistics, you saw some of the numbers, you know what averages are, you know what people are charging. But to that, don't forget, you've gotta add, who are your competitors? What are they charging? What are they giving? And I highly suggest finding two or three competitors that are really good and buying their course, buying what they do so you can see what they provide. If they're successful, that research is invaluable. I know I've done that with a lot of providers. I've bought a lot of courses and training so I could see what somebody was doing so I could do something similar.  So don't be afraid to invest a little bit of money to get that information. Cause you're gonna do one of two things.  You get all their emails, you get all their sales pages, you get all their methods, all their guarantees, everything. It's like opening up their business to you and showing you what they do. So I highly suggest you do that. Don't copy anything, but it will give you a guide. It will give you a way to go about it and you can see what they're doing. I hope you enjoyed this video. I hope you got some value out of it. If you do and you like it, give me a thumbs up or thumbs down, tell me what you want. If you've got other questions, put those in the comments section below. If you've had some successes in this area, share that below. That will help a lot of people. Don't forget, I've got a $97 course that is below in the description. All you're gonna do is click and learn, cost you nothing. No credit card required. Check that out. Don't forget to subscribe if you haven't done so already. And when you do that, there's a bell.  Thank you so much for listening and I'll see you in the next one. Hey, thanks for watching my video. Don't forget to subscribe to my channel and click that little bell right here so you can be notified every time I do a new video. Also, click on one of those videos there. Keep watching on my channel.


Am I mic'd? Cool. Hi, everybody. All right, I'm going to go off the title slide for a second and switch back to my, see, I was going to put this slide up as my blank slide, but I thought you might want the title information to start with. All right. Hi, everybody. Is it having a good day so far here? All right, that's good. That's encouraging. So I want to start when I start and then when I get a new feature request, I want to talk a little bit about this application that I was building recently. And just to give the details of it really quickly, it's an inventory management system. It's a very simple one. And the feature that I was asked to create was an administrative feature where an administrator could verify the inventory of a set of items at a number of different locations in their larger site and check and see whether how, sorry, check the values against the observed values, update the values, and update the inventory they were tracking. A really relatively straightforward Rails feature. But because I think about testing as part of how I think about designing this feature, I start to think about how I'm going to test it. And there are a couple of options. I could do your sort of classic RSpec TDD, outside-in TDD, starting with an end-to-end capybara test, supporting that with various business logic tests, focusing on smaller and smaller pieces of the code and eventually writing unit tests. How many people, does that describe the kind of testing practice that you might do or are familiar with? All right, some, like about maybe a half or so. I could do what is the Rails core suggested testing practice, which is to basically write the code and then write a bunch of integration and system tests at the end of it to support it. How many people does that support? Does that sort of describe what you do? A few lonely people. Just because I'm curious from the last couple talks, how many people here regularly run their entire test suite on their local machine before they check it in? That's maybe a third, I think. How many people's test suite, the entire test suite, only runs on a continuous integration server and never runs anywhere on everyone's local machine? That is approximately 2 thirds or so of the room. That is mildly terrifying to me. Okay, we're gonna come back to that, I suspect. How many people here are in situations where they don't test? They feel like they don't test or they don't test enough. One or two, three, four, seven, 12, whatever. I know numbers. So I could not test, that's actually an option. And all of these choices come down to a decision that I'm making, that the process that I'm choosing, the way that I'm testing, that it will be worth it. Which begs the question, really. What does it mean for testing to be worth it? What does worth mean in this situation? Honestly, what does it mean in this situation? What is any of this? Why do we do any of this? And more to the point, not even just what does it mean? What does it mean to be worth it? How can I tell? So this talk is called High Cost Tests and High Value Tests. My name is Noel Rappin. You can find me on Twitter at Noel Rapp, N-O-E-L-R-A-P. Feel free to at me during this. I won't see it during this, but I'm happy to answer questions. My DMs are also open if you have a question that you don't wanna put in the public timeline. If you wanna say fantastic things about this talk during the talk on Twitter, you should consider yourself encouraged to do so. I work for a company in Chicago called TableXLi. I also have a podcast called Tech Done Right, and we'll talk more about that at the end. But let's get on with the main course here. The question here is, how can you measure the cost and the value, not just of testing, but of any software practice? And I mean, the honest answer is that we really don't know. Like these things are complicated. There are a lot of factors. There's a lot of contextual factors.  In particular, tests have an issue here where tests serve many different purposes within a project. Tests are code, yes, but tests also act as documentation. They also act as a marker of how complete the code is, which makes them process. If you're doing TDD, tests also inform the design of your code, so they're also designed. So they can have cost, they can have value in a lot of different ways, and it's very, very hard to think of a single way to measure that value. But I'm gonna do it anyway, in the name of actually having something to talk about for the next 25 minutes. The metric that I'm gonna use here is time. Time has a couple of advantages. It's super easy to measure. We're all familiar with it. I think we all have an intuitive sense that if you are building the right thing, that the time you spend on something is correlated with the cost of it, and if you are not building the right thing, then none of the advice in this talk is going to help you, and you should figure out why you're not building the right thing and start building the right thing. Also, most of the other things that we think of as positives of tests in terms of improving the design, improving the code quality, that kind of stuff, ideally, that will pay off in saving time building future features. Otherwise, you could argue it's not worth doing. So that's where we're gonna start. So tests cost time. You hear this a lot. You hear one of the problems with TDD is it just takes too much time to start up with. So let me break that down a little bit. What are the ways specifically in which a test can cost you time over the life of the test?  There's a particular amount of time that you spend just typing in or thinking about the test that you're gonna write. The test runs a lot of times, ideally, for some of you it runs on your local desktop machine. For many of you, it runs on a distant server in a cloud somewhere and rains its result down back at you. But this is a cost, right? Even if it's not a direct cost in your development process, it is a cost in terms of increased build time, the amount of tests, the amount of test builds you can run at once, that kind of thing. The test needs to be understood, a new person coming to the feature needs to understand how the test works as part of their process of struggling with how the code works. And also, the test needs to be fixed when it breaks. Whether or not it's breaking for a good reason, you still need to adjust either the test or the underlying code, and that's a cost that comes out of testing. Particularly, it's a cost that comes out of bad testing because a bad test is going to fail spuriously more often. On the other side, tests save time in a couple of different ways. Tests can save you time by improving the code design. So, first of all, a certain amount of time that you might spend just whiteboarding or doodling, you might spend testing, and also a TDD advocate would say that the test actually is improving the design of the code in a way that will save you time in the future. One that I think is a little underrated is that in development, it is often faster to run an automated test than it is to manually test the code. So, I showed that inventory management form before. Testing that manually would involve potentially like logging into the site, going to a particular page, putting in specific values in a form, pressing submit. Even if I have some of that automated, it's still a minute or two process in comparison to the test, the end-to-end Capubara test that covers that case, which would run in a second or two. And so, I often find myself thinking like, this is too simple to write a test, and then I find myself like repeatedly going through a web page over and over and thinking, oh, I should have written that test a half an hour ago, and I wouldn't be doing this right now. A test also validates the code to some extent and does not replace further QA testing, but might replace some QA testing, or it gives you some confidence that you wouldn't have if you didn't write the test. And finally, tests catch bugs faster. This can save you time in a couple of ways. It can catch a bug before the bug, before other code becomes dependent on the buggy behavior, which would be bad. This one actually can save you actual money if you catch a bug before it goes into production and you lose customers or server time or have some other outage because of a bug. So we have four different kinds of costs, writing, running, understanding, fixing, four different kinds of value, design, development speed up, validation, bugs. And one thing that is interesting to me about this is that these costs and these values happen at different times in the life cycle of the test. So when you actually develop the test, you take the cost of the writing the test, you get the savings of the design, at least some of them, you get the savings of the preventing the manual walkthrough. But then you have to live with this test basically forever. And forever you have the cost of the run, you have the cost of understanding, you have the cost of fixing, but at the same time the bug catching and the validation also live in the code base forever. And what's interesting about this is that not only does this happen over time, the cost and the value are incurred by different people. The developer writing the test and writing the feature gets most of that developer cost and value, but the rest of the cost and value is often spread across the entire team over the entire length of a project. In a way that makes it very hard for any individual person to really be able to confidently say like this practice has value, this test was useful, this test was not. And it becomes, I think, very dependent on your context.  Because you're all working within different contexts and all of you have different, those costs and benefits are gonna play out a little bit differently. But what I am hoping that you'll get in the next 20 minutes or so is a sense of how to think about these trade-offs in your own context. And the sense of thinking about testing in terms of strategy and not in terms of tactics. I feel like a lot of the test advice, including a lot of the test advice that I give to people, has to do with tactics. How do I write this particular test? How do I use this particular RSpec matcher? Should I use, would mini-test or RSpec be better for this particular feature? And then we don't spend a lot of time thinking about strategy, like how many end-to-end tests should I write? When do I drop down to a unit test? That kind of thing. And so that's the kind of process that I'm hoping to talk about. So I wanna start with, I wanna start, I'm like 13 minutes in. I'm gonna start now. I'm glad you're all here. Forget everything I said up until now. I was just clearing my throat. I'm going to present some data from a very small project that I've been working on for the last, the project that has the inventory management. I worked on it by myself for about, maybe 20 hours, 25 hours a week for about eight weeks. So it's somewhere in the neighborhood of 200 hours of development, more or less. And since I was the only developer, I got to design the architecture and just set all the testing practices. It was wonderful. I recommend not having other people criticize your design decisions for a few weeks. It's really great. And in the end, I wound up with largely three different kinds of tests. I had end-to-end Kappibara integration tests. They're actually RSpec system tests. These tests, the input to these tests is simulated user interaction. The outputs of these tests are HTML that we're comparing to expected HTML. These tests run empirically based on the RSpec profile data is somewhere between a half a second to three seconds. The three second tests are the ones that pull up JavaScript run times. And it's almost impossible to say how long it takes to write these tests, but 30 minutes seems like a reasonable amount of time that I spent purely crafting one of these tests, like from scratch, given how complicated they are relative to the rest of the code. So like, let's just agree to accept that number. I've given you no reason to, but let's, because it will make everything else work out. Everything else will work out super nice from there. You don't know me. I don't know. So the second level of tests are sort of intermediate. If you think about the testing pyramid, the integration tests are at the top. In the middle, we have these things that I call workflow tests. The way that I write Rails, if left to my own devices, is that the controller immediately passes off all its data to a workflow or an action or a service object, whatever you wanna call it, that handles all of the actual business logic for the functionality and interacts with active record to get things into the database. So I have a whole series of tests here that start with passing parameters to one of these objects, calling a run method or an equivalent on that object, and ends with checking the database to make sure that it's made the changes that I expect. These tests are about an order of magnitude faster. They run between 500 and three-tenths of a second. Again, this is actual sexual profile data. I actually did time myself writing a couple of these tests because I just did, and they took about a couple of them, again from scratch, about 15 minutes. So much faster to run, a little bit faster to write. And then finally, we had unit tests, which test the input and output of a single method. This is a wide variety of stuff in this code base. It's active record finders. There's a lot of things that test like accessibility logic from pundit classes. There's some service objects or data objects that do various and sundry small things. But all of these tests basically handle one, the input and output of one method. These are much smaller. They take maybe a few minutes to write, and they're much, much faster. They run, the runtime of them is between one millisecond and four-hundredths of a second. So if I put that all together, remember I said this was a small project. The last speaker said that his class, his project had 30,000 tests. This one has 180, which is smaller, you'll note. But the breakdown was like this. There's 22 system level specs in the system, and they take almost 13 seconds. And what's interesting to think about this is that the system tests are 12% of the code, but they are 75% of the output time of the runtime. Which seems a lot. Another interesting thing about this is that by and large, I spent about the same amount of time writing each of these tests, each class of tests as I did each other class of the test. So the system tests were the slowest and the longest to write, but they're also the fewest of them. I spent the same amount of time, more or less writing each kind of test. So like I said, 12% of the code is 75% of the output time. It's actually even weirder than that at the extreme. The slowest four tests of this, which are basically the four tests that do run called JavaScript runtimes, are 40% of that runtime. The other thing that was interesting to me when I actually looked at this data was something that I think I probably would have said I suspected but had never really put numbers to, which is that the range of the runtimes was much wider as a percentage than the range of the time it took me to write the tests. So the tests took me somewhere between one to 30 minutes to write. So that's like about a 30 times difference. But at runtime, it was the difference between a millisecond and three seconds and probably even more, which is a 3000 times variance. Is that making sense as I'm explaining it? And the amount by which those two ranges were different was interestingly enough to me that I went back and I checked another project to see. I didn't necessarily have time to write data on that project, but I was really curious to see to what extent that breakdown held up. This is a larger project, but by no means a super large one. It's a project that we've worked on for four or five years. Many, many people have worked on it. I've written probably the plurality of the tests in this test space, but by no means the majority or most or even a majority. And the breakdown on that test, on that project looked like this.  They're four and a half seconds each. And a much higher number of unit tests that are significantly faster. They run about two tenths of a second on average each. I would characterize this test, this code base as a whole as having too many end-to-end tests relative to its overall size. And so end-to-end tests in this case, they are the end-to-end tests which are the cucumber tests and those system tests are 18% of the tests and two thirds of the runtime. Okay, that's a lot of numbers. What do they mean? Do they mean anything? Probably not. It's just like, I mean, empirical data in this field doesn't move very far. It doesn't go very far outside of its own context. But it did suggest a couple of things to me that I thought were worth, changed, at least affected the way I was thinking about testing. I thought that that concept of a balance between the amount of time that you spend on different kinds of tests, that seemed reasonable to me, that seemed like a good rule of thumb. And what that basically means is the larger, the longer, the more complicated the test, the fewer of that kind of test you probably should be writing and the smaller and more focused and quicker test, the more of those you should be writing, which is basically just the testing pyramid but with a little bit of my own more empirical experience to back it up. Another thing here that is not necessarily shown in the data is that as you write a number of different kinds of similar tests, the cost to write the next one goes down. So if I write an end-to-end capybara test, it may take me a really long time to write the first one, but if I write the second one and it's similar, I'm gonna copy-paste or I'm going to refactor setup or something like that, the cost to write a bunch of similar tests in that run will go down pretty quickly. And because of that, it seems to me that the short-term cost, the right time, the development time, the design time is not super related to what kind of tests you write. And I think that specifically when somebody comes up and says you should mostly write integration tests, you don't need the unit test, one of the places that that impulse is coming from is from the idea that the unit tests, writing unit tests may not be saving you developer time as you write the feature. But I think that writing unit tests will save you time in the long run along all of these different accesses, along the run time, along the understanding time, fixing tests, bug catching and that kind of stuff. And the reason that I say that is because over the life cycle of a project, once the test is written, the long-term cost of the test basically depends on two things, how long it takes to run and how often it fails, especially how often it fails spuriously. And both of those things are dependent on the complexity of the test. The more complicated the test, an integration test versus unit test, the longer it takes to run, the more things that can go wrong, the more likely it is to fail. Whereas it seems to me that the long-term savings in writing tests come from focus. If I think of the times when a test has really, I feel like a test failure has really saved me time, it's where the test failure makes it really clear where in the code base the problem is because there's a very, very limited number of things that could go wrong to make this test fail and they know right where to look. Add to that the idea that a small fraction of your test can be the bulk of your cost.  Like, and that's at some level, like I have now spent like 25 minutes here and I've gotten you all the way to don't write slow tests.  But I do think, and this is like both profound and stupid, like the way not to have a slow test suite is not to write slow tests. And there's a tendency here, no individual test causes a slow test suite. How many people here have a test suite that runs more than 20 minutes on their CI server? We're gonna keep going, 30 minutes, 45 minutes. Over an hour? Okay, so there's still some hands up at over an hour. In your over the hour, in your over the hour test, is there any individual test that is longer than 30 seconds? Maybe? How many, like? We have a lot of Selenium. A lot of, okay, Selenium's its own. Yeah, okay, that's fine. Selenium test.  Selenium tests are obviously like, work on like a geologic timeframe compared to the stuff that I'm talking about here. In the non Selenium world, which is the world I choose to live in as a general course of time, no individual test causes a test suite. That larger code base that I was talking about here, which is actually like a 18 minute, 16, 18 minute test suite, the slowest test in that one is 13 seconds. And so like no individual pebble causes the avalanche here. So it's kind of a collective action problem. You write the two second test instead of the one tenth of a second test and the first time you do it, it doesn't seem to matter and the like tenth time you do it, it matters a little and the hundredth time you do it, it matters a lot. It's an aggregate set of decisions. So let me talk about, all right, that's hand waving. Let me hand wave in a different direction and talk about how you can avoid or how you can think about your testing as a strategically to try to avoid those kind of slow tests. So back to this inventory management software. Let me talk about what I actually did to test this. The first test I wrote was a Kappibara end to end test, our spec system test. And it will goes all the way from the user, simulated user to the controller workflow model back up to the controller to the view, back to the user. Everything read in these diagrams indicates a part of the system that the test is touching. So this test fails in a lot of cases. It fails if there's a typo in the view. It fails if something's weird in the controller. It fails if the controller handles off to the logic object badly. It fails if the logic doesn't work. Like that core of the functionality is only one of like a gazillion things that this test will fail on. And it fails if there's some problem with how that we access the database. Once I write that outside end testing, I start trying to make it pass. I very quickly find that I need logic and I start writing a test of one of these workflow objects. This is the next thing. The next test I write, it starts with the workflow, goes back to the database, comes all the way back up to the workflow. Strictly speaking, it doesn't have to go all the way to the database. It could use test doubles to stub out the database. I don't do it in this project for reasons that it would wait the talk run over time when I had them in the talk. So we can talk about it later if you want. But basically this test fails if the work logic fails or the database access fails. And it does not fail if there's a problem in the controller or in the view. But conversely, this test, end-to-end test, doesn't care about the structure of the code. It is very robust against refactoring because it's not actually calling individual pieces of the code. Whereas this test which fails in a smaller range of code is somewhat more dependent on the structure of the code and might be brittle against refactoring. As that gets completed, I have a bunch of unit tests that I write individual specific pieces of logic. They go against the model on the database and they fail only in very particular kinds of ways. So eventually I get this code passing. The tests all pass. I have a suite of, I don't know, five to seven tests, maybe more depending on how complicated it is. And I immediately start thinking about how can I break this? What could happen to break this test, to break this code? And to me, the clear thing that can break this is bad input. Like the user could enter in instead of entering in a positive integer, they could enter in the letter A, they could enter in a negative number, a blank space, an emoji, like all kinds of things could come in that could potentially break, that would be unexpected input. And I need to deal with that and I need to write a test to deal with it. Test for failure cases are like the best kinds of tests to write, I think. And I have this decision. Do I write this as a capybara as a system test? Do I write it at the workflow level? Do I write it at the unit level? And interestingly, given the tests that I've already written, none of these tests are going to be hard to write. Like I can take my existing capybara test, copy and paste it and just change the input and change the expectation slightly and I will have a new system test that covers the bad input case in only a couple of minutes. If I write a unit test, those tests are potentially very small and I will have those tests in only a couple of minutes. I decided in this case to write them as unit tests on the theory, basically, that that was the logic that was changing, that the logic in the controller was not changing, that the logic in this workflow was not changing. The part of the code that was changing was actually a specific object that takes these inventory numbers and passes them along to the database and that object picked up a bunch of extra logic to handle these database tests, these bad input cases. And in fact, I actually did write these with test doubles. It took about five minutes to cover all the edge cases. The tests are super fast, they don't go to the database and if one of them fails, I know exactly where to look. When I had this working, the client asked for a new feature. They wanted a blank row at the bottom of the form that would become a new item, add a new item into the inventory. And again, I had the same question. Do I write this as a system test? Do I write this as a workflow test or write it as a unit test? And what I did in this case, and this is actually tracing through my process, is I wrote a workflow test. And my theory was that the logic of the controller handing off to the workflow was not changing or at least was not adding any new logic. The literals were changing, perhaps. But that all of the logic change was happening in the run method of this workflow object. And so that's where I pointed the test. It did not seem to me like I had a smaller unit that I was encapsulating this functionality. But that raised a bug. There was a bug where if the user entered a new row and entered a name that was already in the system, it duplicated that item. And that was potentially confusing. And again, excuse me. Again, I had the same question. Where do I write this? Do I write it as a unit test as a workflow test or as a system test? And in this case, what I did was I copy past the workflow test and wrote another workflow test with a setup, changing the setup. And I am not convinced that this was the right choice. It was okay, it's a small project. But I think it probably would have been better served to try and find a unit there that would have handled either a unit in the actual active record object or some sort of smaller object that was actually handling this validation. I think that this workflow object was probably doing more work than it needed to. Not a lot, but a little. A couple things that you can look for in your own testing to see whether you have a test that is perhaps doing more work than it needs to do is if you're doing a lot of copy paste. In general, if you're doing a lot of copy paste, that's something to at least reflect on why you are doing that and why you're not refactoring to commonalities. If your tests are doing a lot of copy and pasted setup, to me that's often a sign that I'm testing at the wrong level because I'm piggybacking on setup of tests that have already done. Something that comes along with that is a test that have a lot of assertions that are unrelated to the thing that you actually wrote the test to do because you're picking up assertions from some other test. That just makes it harder to figure out why the test is failing. And if the logic test is very far away from the method that's under test, if you're testing a specific method, that's also a problem. The longer the path the code needs to traverse to get to the failure and come back, the more things that can go wrong. Capubara is wonderful. It is not a unit test framework. And if you are using it, it is so tempting. I say this about Cucumber too. It is so tempting to use Capubara and it's not necessarily tempting to use Cucumber for anything anymore. But it's tempting to use Capubara and perhaps even Selenium as unit test frameworks. And that is, by the way, I didn't mean to shame you for using Selenium. Selenium is obviously a very valid choice in many cases and I don't want to make people feel bad. It's objectively slow but objectively very, very useful in certain situations. It is also not a unit test framework. So, I mean, some people like legitimately don't like writing unit tests. It was a significant part of DHH's TDD's dead talk was that unit tests were just adding cost and not providing value. I'm paraphrasing what he's saying. In terms of this talk, what he was saying was that unit testing adds cost and doesn't add value. And I recently saw this as a testing advice for a JavaScript framework stealing Michael Pollan's pattern, write tests not too many, mostly integration. I don't like this, although I see where, like, certain contexts, this makes a ton of sense. It makes sense in a context where unit tests legitimately cost a lot to write. And there were a lot of reasons why unit tests might cost a lot to write. It is very often true in legacy code. Legacy code that was not written to have the units be easily separated. It may be very complicated to write unit tests. There may be, you may have to do a lot of set up to test an individual unit. So oftentimes, you will see people like me say, if you're testing legacy code and you want to just get coverage quickly, end-to-end tests from outside using Selenium or Capybara, Cucumber or something like that are very useful. If you're using some framework that doesn't really handle unit tests very well, some of the JavaScript frameworks don't, then unit tests are expensive and they don't make sense to write. Some people argue, and I don't agree with this, but the argument, this was part of the DHH argument, was that unit tests create hard to understand designs. If you believe that, or if you don't believe that small units are a good thing in code, which again, I do believe it, but some people don't, then you get to a very consistent position where unit tests, small units are not good, are not valuable, therefore small unit tests are not valuable, and it is a very, it's a consistent position. I do think, and also the time to run matters a lot less if the only time you ever run the entire test suite is on your CI server, then the pain of writing slow tests is much less painful. I think that that's actually probably a bad thing. I think that throwing the pain of slow tests off onto the CI server is a short term benefit for what is probably a long term cost. So anyway, so not durating unit tests is a really good legacy code strategy. I do think that you pay a cost in tests that are, when you do have a test failure, it's somewhat harder to diagnose those tests. So I'm running out of time. I wanna talk about one more strategy that's really important in terms of making this kind of work, this work. A lot of times test driven development will talk about red green refactor and they will talk about thinking about tests in terms of what will make tests succeed. I encourage you to try to think about tests in terms of what will make a test fail. Particularly thinking about each new test in terms of what conditions in the code need to happen for this test and only this test to fail. This is different from saying that every single failure should only trigger, every single bug should only trigger one test failure, which I think is impossible. But I do think that you can get in a situation where every test can justify its existence by saying this is a condition in the code that might happen and only this test will fail because of it. And if you can't think of a reason for that test to happen, then maybe the test doesn't need to be there. It's a really common pattern in test driven development where you start off with a test that just does setup. It just is like you create a new object, you create the new class, you call new on it and everything and it has the right instance variables. And that's a great first test. And once you've written two or three more tests of that object, it no longer has a unique failure path because if any of those things are not true, some other test is going to fail and you can delete it. I think that way about a lot of people use those should a matcher tests, users should have many posts. I think that those similarly, like they don't cost very much, they don't take much time to write, they don't take much time to run. At the same time, if the post association were to go away, like a lot of tests would fail and one of them would be this matcher and it's not clear to me that you're getting a whole lot of value there. It helps to try and create the minimum number of objects in a test that you need to trigger the failure. Again, we're trying to focus complexity here. The more objects you're creating, the slower the test is, the more problems you could have. This pretenses is a really big problem with factory bot. If you create a lot of associations in factory bot, that is a really easy way to get a very slow test suite and a very easy way to get some hard to debug test errors. If a test does cause multiple, if a bug does cause multiple test failures, that is an opportunity to think about whether you actually need all of those tests. I am not saying that if a test failures, you should just delete it. I should be clear about that. I am saying that if one bug in the code causes like 10 unit tests to fail, you might not need all 10 of those unit tests and sometimes it is okay to delete tests, which is the most terrifying piece of advice I give to people because sometimes they take it. But in the end, nobody ever really takes my advice, so it's fine. You should use integration tests. You need to write integration tests. You should try to write your integration tests so that they maximally save your development time, which means use them in development to support the happy path of initial code development when you're running through the browser repeatedly. So tests have various costs as referenced by these emojis. Tests also have value, and you should try to maximize the value and minimize the cost. That's all I have here. I have a couple of URLs for you to check out. Again, you can find me on Twitter at NoelRap. Please feel free to ask me questions. I have a book. If this was not enough NoelRapin in your life and you were looking for NoelRapin in ebook or dead tree form, Rails 5 test prescriptions, which is all about how to test Rails applications is available in beta as of yesterday. The final printed version will come out in January. Statistically, given my sales numbers, I can guarantee that there are people in this room that have not bought it yet. So I really do think that it will save you a lot of time and a lot of effort. It goes into the new RSpec37 and Rails 5.1 features. I've even got the factory bot name change in there. Thankfully, they changed it right before I went to press and not right after, which was very, very nice of them. So you can get it at thaturlpragprag.com. Until Sunday, I think you can get 15% off with the code RubyConfNola. I also do a podcast called Tech Done Right, which you can find at techdoneright.io. The current episode is a conversation with me and Avadi Grimm, who some of you might have heard of. There are actually several speakers at this conference who have been guests on the show. It's a pretty good mix of developer technical and non-technical topics. I enjoy doing it. I think you'll enjoy listening to it. I am out of time. Thank you for spending a little bit of your time here and I hope you enjoy the rest of your conference.


Welcome to St. LaVeau's World Cinema. I'm your hostess, Betty St. LaVeau. On this show, we talk about foreign movies. And today, because I've been reading about Joan of Auc the last two days, I decided that our movies are going to be set in France and set one set back in the medieval days and one set in the present day. So before we get into the movie, I wanted to say that I read Nancy Goldstone's Excellent, The Maid and the Queen, The Secret History of Joan of Auc. And it talks about how Yolanda of Aragon, who was the mother-in-law of Charles VII, the king that Joan fought for, played an extremely important role in the diplomatic process that set France on to its path that it had before his father, Charles VI, ruled. So French history sometimes can be a little bit convoluted. But the fact that the French revere their heroines and their heroes and their queens is something near and dear to my heart. So that's one of the reasons why our first movie today, oh, and by the way, The Maid and the Queen, please check out Nancy Goldstone's Excellent book. It gets better as it goes on. And the last quarter of the book, I was just laughing. The writer, it has an incredible wit. And what a great read. So please check it out if you want to know some of the history of the Hundred Years' War. Now, we're going to fast forward a little bit in time to France about 50 years later, where Catherine de Medici has married Henry II, the most enigmatic king. He unfortunately died of a jousting accident. This sets the French nobility and aristocracy on a path of much unhappiness. I think that if he had lived, things would have been easier for his progeny who survived him. As it is, we're going to explore the beautiful Queen Margot, which was directed by, I think, Pierre Cheneau. And it stars Isabel Angénie as Margaret Vela, Danielle Eltelier, Jean Hugh Englade, Barbette Schroeder, Vincent Perez, Verna Vissi, Dominique Blanc, Pascal Gregory, Miguel Bose, Ezia Argento, Jean Corbele, and Jules Rosam. Please forgive me. My French is seventh grade French. It's not very good. So the first time I saw this movie, I could not even believe what I was looking at. I think I've talked about this movie on another show before. It is actually a slice of history which involves Catherine de Medici and one of her sons plotting the Saint-Barthal-Moustée massacre, which murdered the Huguenot faction in France. And the Huguenots were Protestants at the time. The new religion was an up-and-coming one, and there are kings, dukes, and counts who support it, and kings, dukes, and counts who did not. So there's much unrest in the kingdom. And to bring the Catholic and the Protestant together, Catherine, Regent of France, decided to marry her daughter, Margot, to the king of Navarre, Henri Bourbon, who later became Henry IV. Now, this all might sound a little bit confusing, but basically there was a religious civil war. There were three different kings named Henri. One was a duke, one was Catherine's son, and one was Henri of Navarre, and they all fought for supremacy of France. Now, when we look at this movie, it's based on the novel by Alexandre de Mont. I have not read the book. It's a cordially romantic tale. Catherine is used as a pawn to bring the factions together, but she has a will of her own. I want to say here that in America, I find we don't really make movies as graphic as this. For instance, when Ron Howard and Brian Grazer tried to make the movie The Alamo, Touchstone Pictures, I think a subsidiary of Disney, I'm not sure though, didn't want them to produce it the way that they had the vision of the movie. They were like, look, it's the Alamo. There's blood, there's gore, there's brown people, it's horrible, it's a mess, people are dying everywhere. And Touchstone said, no, it's a PG movie. And Ron Howard and Brian Grazer said, this is not PG material. Neither is the St. Bartholomew's Dace Massacre.  It's a horribly, horribly graphic, but what great filmmaking. The music's awesome. I neglected to, pardon me, write down the name of the composer there. This movie won a few awards. It was Best Director for Patricia Rowe and Isabel Adjani won Best Actress. I believe Jean-Hu Englade won a Best Supporting Actor Cesar Award, and so did Verna Lisi, who played Catherine de' Medici. And there was also a Best Symmetography Award and a Costume Design Award. So Margot being a pawn and not in love with her husband, from the opening scenes, we know that something horde is going to happen. If we don't know our history, we do not know what it is. As the movie progresses, both Margot and her husband there, Henri of Navarre, circumnavigate the treacherous waters of medieval France. Please check it out, okay? You're going to love it. And all the guys are handsome.  Backers are all rather terribly sexy.   Catherine's parents, I think, were cousins, and Catherine was distant cousins with her husband. So the royalty were all marrying each other. So that's why they didn't look, you know, too appetizing. But the guys who starred in the movie look fantastic, and so do the gals. Okay, so the next movie we're going to go to is Agnes as far as wrenching the vagabond, starring Sandra Bonaire. Now, we've all have thought, maybe not all of us, but we've all thought about wandering the road, traveling like a hobo. Preston, Sturgis is wonderful. That movie, Joe McCrea and Veronica Lake. Sullivan's Travels, okay, shows the pitfalls of that as well as Paul Muniz. I was a prisoner on a chain gang. Okay, so to be a vagabond, you know, you think freedom and the romance of it, but there is that movie, Lee Marvin, Ernest Borgnein, and Lee Marvin was said of the hobos, and Ernest Borgnein was said of the conductors, and the hobos and the conductors were always fighting.  So when you're younger, some of us think, oh, to travel the road and be free, yada, yada, yada. A friend of mine, one of my best friends a couple years ago said, I'd love to be a vagabond. She is one of the most responsible people I know, and I said to her, we're going to sit down one day and watch Vagabond. Now, I read the review for this movie when it first came out. Saw it a couple years later. Child, I did not know where to look. Okay, like I did not know where to look. So let me look at my notes here. The movie illustrates the perils of the road. The beginning is showed, oh, pardon me, the end is shown at the beginning. I lost Sunset Boulevard, Billy Wilder's movie. I like that technique. The movie's told in flashbacks.  She curses a truck driver. She's rude.  She kind of is a taker. The perils of the road have hardened her. She meets all types of people in the time frame that the movie is set. A nice bourgeois lady, and there's one other character. Oh, Tunisian migrant worker, both of whom are the only two people who seem to have good heart. Almost everyone else, all the characters seem a bit cynical to Mona comes across. All right. So Varda actually plays the interviewer slash narrator who is recounting Mona's life in those two days that we see her on the road, which is a very nice touch. Usually when someone's narrating a movie, they put a different voiceover. Anyone who's playing the movie usually isn't doing the voiceover. I don't think that was true of Citizen Kane. I sort of thought maybe Justin Cotton or Orson was narrating it. I can't remember. At any rate, it's a nice touch. Please watch this movie. You're 16-year-old. Don't threaten them with military school if they're act up. Show them this movie. Show them and illustrate to them that we all need one another. We're all in it together and we're all related. And if you choose to turn your back on family and society, not in a way that's productive for you and productive for everyone, but in a way that demeans you and hurts everyone else, that road is a long and hard one. So I love this movie. I love the darkness of it. It's actually very scary. But Mona is one of the most scariest characters of them all. She's a vagabond. And there's a reason why this young lady is traveling the road. Tearjerker said, but you're going to find that she's not all that sympathetic character. All right. So I think that that's it for me today. I'm your host, this Betty St. Leveau. You've been watching St. Leveau's World Cinema. This episode is a little on the short side. Next episode, I think we're going to explore the Nigerian film industry and a little bit of Hong Kong filmmaking. Until I see you again, our links, Chow Baila. And check out some movies with some subtitles. They won't hurt you. Chow.


Alright you guys, what is going on? Welcome back to another video. Today's video We're gonna be doing it a little bit of mail time. I've received a special parcel It's it's not a big one, but I think it's gonna be a pretty cool one And it's gonna match something. I've got just sitting over there, so I'm gonna grab it and I'll be back in a second or a minute Nick minute or a net minute believe it or not look what we've got Like I said, it's not big, but I think it's it's gonna be pretty special So this post this this this post this parcel this little package is from a man, Andrew little and I want to shout him out on Instagram his Instagram page is little underscore boy 62 LYTTLE underscore BOY 62 if any of you guys want to head over there and tell them that you've seen this video Please do but in the meantime Let's open this Oh, oh, oh you guys gonna love this man. That that is epic.   I will be going to a chief's game. There's no doubt in my mind.  I'm just gonna get the headband. All right, you know Okay, we're good Jesus What do you reckon right there? I'm gonna be like that I'm not sure man. I'm gonna do something cool with this. So thank you man. Thank you Andrew sick That is really cool and this is even cooler. He also sent me an unopened packet of football cards Unopened from 2005 This is or 2006 Thanksgiving classics And we've got Trent Green quarterback for the chiefs on the front.  This is wow man This is nostalgic. This is amazing. Do I open it? Do I open it? Oh, I think we're gonna have to Do I No, I'm not gonna open that yet No, I will open it. Why not? Let's open it. Let's see what players are in here This is so cool man. The last time I had cards or trading cards was Well first it was Pokemon For a good two years Then it was Dragon Ball Z for a good four years and then it was Yu-Gi-Oh for a good, I don't know two years So I spent eight years of my childhood Obsessed with trading cards, but it wasn't football cards Let's have a look at this shit Trent Green quarterback for the for the chiefs. Oh, they're all chiefs players, are they? They are They are chiefs players. Oh, that's all right. Trent Green Larry Johnson Eddie Kenison Wide receiver. What's Larry Johnson? Running back. Oh Eddie Kenison wide receiver Tony Gonzalez Tight end Tamba Harley.  Do they have anything on the back? Yes, they do Sweet. Oh, let's read this Trent Green Trent Green for the third straight season green through for 4,000 yards in 2005 The only other quarterbacks to have done that are Dan Marino, Peyton Manning and Dan Foots He was born 7th of the 9th 1970 So he's 48. Oh These are cool man. Larry Johnson. Johnson concluded his breakout 2005 campaign with nine straight hundred yard efforts Five of which covered at least 140 yards in a pair of 200-yard games six foot one two thirty Out of Penn State Eddie Kenison After failing to crack a thousand yards in any of his first NFL seasons Kenison has aged like fine wine with back-to-back such efforts in 2004 and 2005 Tony Gonzalez in 2004 with 102 catches Gonzalez joined Todd Christensen as the only tight ends to leave the NFL in reception since Callan Winslow did so in 1981 so a tight end led the league in receptions over a wide receiver That's crazy Tamba Harley Harley enjoyed a big 2005 for Penn State being named the Associates Press all-american first team He recorded 65 tackles and 11 sacks And he was about to go in his car.  This is This is 13 years old What kind of a career of all these guys had what kind of a career is Tamba Harley had he was a rookie? I've got to look that up Marcus Ellen Ellen was a workhorse during a 16 NFL season. We're dressing registering 12,243 yards and scoring 123 touchdowns for the Raiders and Chiefs He has ninth all-time in the NFL rushing charts. What a cool thing to send Really cool Really cool Thank you. Thank you, man. Thank you. That means a lot Andrew.  That's all I got to say. So I'll be taking this to my chief's trip I'll be taking this to my chief's trip. Hopefully I'll get a proper jersey at some point Not from you guys from me buying it But um, yeah, what a cool thing to have man. These are you know, I'm playing look this is my new place, man It's my my new office.  You don't have to look what a legend. Thanks, Andrew Everyone out there. Have a great day or a great night wherever you are in the world