My name is Jim Wyrick. I'm the chief scientist for edge case. We do Rails applications and some iPhone apps There's my Twitter handle if you want to follow me on Twitter And there's an email address if you want to contact me with questions after this this presentation is on github So there's lots of references at the end of this So I've probably flipped through them fast by the time we get there So if you want to see what they are you can go to github and download it and I got lots of links and things in that Okay, I want to start off this talk with a question How do you recognize a good design? Think about that for a second. I asked this question a lot in telephone interviews that I do with people just to see if they can put into words What they think a good design is and the most common response I get over the phone is I Maintained that some designs. It's easy to tell that they are not a good design Actually, I got a lot of pictures like this, but what this will do for right now Who can tell me what this is? The George Washington Monument Baltimore wrong But good guess good guess. I'll give you some hints. It's in London. Okay It's a monument. Okay The monument in London It's on Pudding Lane Put it's the pudding money the monument the banana pudding. No, it is not It has it is a memorial for an event that happened on September 2nd 1966 does anybody know what happened on Excuse me. 1666 The great fire of London. Yes A baker supposedly a baker left some burning coals in his Stove overnight and he was sleeping upstairs and a spark from that caught fire and all of Pudding Lane went up in flame and Because Pudding Lane was kind of in the poor part of town They weren't really concerned about getting everybody there and getting the fire out and because they delayed because of political Manipulations because all kinds of factors that would end and there was a drought that year, right this fire Spread it was terrible. It burned for I Think it was five days It got so hot it melted the lead off of the roofs of buildings It it made the bricks explode from the pressure that built up inside because of the heat Here are people escaping the fire Carrying their belongings and another contributing factor to the fire was people were more Concerned about escaping the fire than to put out the fire. Finally, some people got together They started pulling down the buildings They made a fire break and they were able to get it under control But not before it burned down a good part of London in that day You can see the London wall there in black and a You know three-fifths or fifths of the city was absolutely terribly burned down because of that You can see St. Paul's Cathedral here. You can see the Royal Exchange up there. It was a terrible terrible event Six days after the fire were out people were already designing the new London Christopher Wren you might have heard of him. He had something to do with the dome at St. Paul's Cathedral He also designed that monument with the gold ball on top of that commemorated the fire So here's a great architect Six days after the fire he submitted to the King a plan to rebuild London. This was his plan. This was his design and You can see there's a certain cemetery. There's a certain flow in this and it looks like this the angles of the street You can see the St. Paul's down here You can see the Royal Exchange up here and and a very nice it looks very nice How would you judge this design? I don't know. I'm not good at judging city layouts. So I'm not sure Here's another design. This is by John Evelyn. He wanted to create the most noble city that can be he wanted to rebuild London from the ashes and a lot of angled lines a lot like Christopher Wrens But a little simpler a little more symmetric. I like symmetric. That was cool Here's a design by Robert Hook Robert went in for the square. I think this tells a lot about the Artistic flair of the individual architects kind of how they put things together So he has a very square shaped very grid oriented architecture here for the city Here's one by Valentine night He had seven or eight north south roads with lots of lots of lots of little tiny lanes Running east and west so he'd get a lot of houses building because he was very concerned about the people being able to Provide housing for all the people that were who lost their homes However, he made this suggestion that they should use fines and taxes to raise the money to rebuild London Charles II the king at the time had knight arrested for Suggesting that he would try to profit from so public a calamity of his people Where are those kinds of politicians today? finally, we have a Richard Newcourt's design and You can barely see it here, but here Right here is the original wall Now the interesting fact about this design is that not only is he rebuilding the part that burned down? He wants to tear down the remaining good parts and rebuild them from scratch as well Needless to say this design didn't go over very well but here we have five designs all submitted within weeks of the burning of London and The burning question now is the burning question the question now Is which of these designs did they choose to go with? none None of them They did not choose any of them. They decided actually they didn't decide so they rebuilt the city Incrementally from scratch as they needed as they got to a part. They just rebuilt it as it went No upfront design an incremental build that sounds like maybe this was the first agile project Okay, so now agile. I was introduced to agile by Bob Martin. Who here has heard of Robert Martin? Very good. Excellent. Who has read his book? Good. So so you know the the five Principles of solid design. Yes You know you want to teach this? Oh, he's thinking about it. He's seriously considering it Right and in the the late 90s early 2000s Bob Martin sat down and said we need some principles for design So when we look at a design we have some More or less objective ways of judging good designs from bad designs. It's not just this Artistic feel-good thing. No, it's got lots of angles or no, it's got lots of squares. It's it's more objective So he sat down and actually thought this out and gathered up Five principles. They're not all original with him But he kind of put them together in a package and these are the five here And if you take the first initials you get SOLID for solid therefore the solid design principles So what are the solid design principles? You can read about them here at this My hand when I put it in the pocket. There we go. Now we're back. I don't know what happened But the solid design principles are all about Dependencies because that was Bob's big concern at the time how to build maintainable code and you do that by managing your dependencies Now why are dependencies important? Suppose you have two classes like a car and an engine and your car object uses the engine object But the engine object doesn't know anything about a car. It just does its job The car uses the engine so there is a dependency that goes from a car object To an engine object and we denote that in UML like diagrams by an arrow, right? So arrows in UML always point in the direction of a dependency So this is a using kind of dependency here. There's also a dependency Okay This arrow means that car objects are allowed to call methods of engine objects Engine object will not call anything on a car because it doesn't know about a car There's also an inheritance type of dependency That's also an arrow but a different style of arrow But it is also a dependency that the car object depends since it inherits from vehicle. It depends upon vehicle existing So this is another kind of dependency again denoted by an arrow Okay, so why are they important if I were to change? Module X on this diagram Change the interface change the semantics of one of the methods in module X who was affected Absolutely everybody so dependency tells you how changes propagate through your system if I change X Then ABCD and E are all affected by that change. So I Have a great deal of Pressure upon me to not change X or to choose X. So it is a type of module that is does not tend to change How about this diagram? If I change Z in this diagram who is affected? Z alone because nobody else cares about what happens to Z Z uses everybody else. What if I change module C? Who is affected? Z is affected so in this diagram We have isolated the propagation of changes So if C changes Z might be affected and we have two modules we might have to look at but everybody else is probably okay Because there's no direct dependency on those Well this one what if I change module L who's affected Well, definitely K is affected because K has a direct reference to L Possibly maybe J is affected because if K changes we might force some changes back here So there was a kind of a transit of property to dependency So this is the basis for the solid principles Bob looked at these kinds of ideas and said okay How can we manage dependencies and software? Now in the late 90s and the early part of this millennium Bob was mainly concerned about Java and C++ programming. So he was mainly dealing with static statically typed languages Now we know that statically typed languages have stronger dependencies Than a dynamically typed language like Ruby So it makes you wonder these solid principles Do we just throw them out the window when we're dealing with Ruby since Ruby is dynamically typed Do they do they apply at all and this is the purpose of this talk? I want to kind of get down into Some of these questions and look at each of these principles and see how they apply to a dynamic language like Ruby So let's just start with the first principle single responsibility principle says that a clash would have one and only one reason to change Here's a good example of this in the rake project that I maintain There is a module called the application and Then this is the top-level object that kind of sits and starts up when rake starts up and it goes and parses all the command line arguments and then also Reads the rake files and and defines the task and holds those tasks in a hash So it actually has two jobs So it has two reasons to change number one if we change the way the command lines are Handled it needs to change number two if we change the way that we store tasks. It needs to change So the single responsibility principle says we should probably break up these two reasons to change into two separate modules Maybe maybe perhaps something like this We have an application object and he uses a task manager and the task manager Manages the storage of all the tasks and keeps track of them and the application then is just dealing with command line arguments Now there's actually a good advantage to doing this because once I broken the task manager off into a separate object I can create nested Structures of task managers to handle named scopes in rake And although rake doesn't do it that way right now This might be a good way of handling that and I might want to change rake in the future to do this So splitting things up gives you a lot more flexibility in the way you build your code Even in a dynamic language single responsibility principle is an important principle to follow I feel and any disagreement You guys are an easy crowd An easy way to tell if you're violating the single responsibility principle is to write down the purpose of That module and you have to if you have to use the word and or the word or in the description of your task Then it's probably doing two things. So that's a nice easy rule to follow. I love these slides Okay, open close principle is I was first thought up by Bertrand Meyer who designed the Eiffel language And he says that module should be You should be able to extend a class's behavior without modifying it should be open for modification But close for change I say that right open for extension close for my modification. Thank you. Yes Which sounds weird what what in the world does that mean? Suppose you someone wrote a really cool library that was really useful and a lot of people use it and You are writing an application now and you would also like to use this really cool library But there's a problem because you see this really cool library works 90% But there's 10% of things that it doesn't do that you would like to have it do So you need to change it to work for you Well, the typical way we do this in software is called Copy and paste and this is a valid design technique so I've been told and then you have a modified version of that cool library and Unfortunately any bug fixes applied up here will not be applied to your modified version So you learn you lose all that kind of advantage. What is a better way of doing this? Fork the modern copy paste hire someone to fix up the back fill all the bugs yes A better way is to subclass the one Change the the behavior you need in your subclass and then your application can use the subclass version that you have somewhat of a Control over and yet the original one is still there and any fixes that go into that will be picked up by yours automatically Okay, now now there's an extra dependency here And that's fine. I mean we you can't write software without dependencies But but you gain that you gain great benefit by doing it this way okay, but You say Ruby has open classes So let's let's just monkey-patch it Think about that one Here's this is a real a simulated real-life example This is not the real code, but this is very very very similar to something that happened in real life To a rather outspoken former member of the Ruby community Who could kill you with his thumbs? I think you know who I mean Here's a logger the interesting thing about this logger is it provides a way of changing the format string so you have a way of going into the logger and You have some control over the the format not a great deal of control but a little bit of control by specifying a format string And we're going to do that in our application Yeah, here we go. So we set the log string here So we see LOG colon in our log string and it comes out down here. We can see that and we run it Now we include that really cool library and we run our program again and whoops What's happened here our LOG colon message is gone. It's disappeared and what they've done is Gone into the cool library has opened up the class and replace the format command because they needed some more Explicit control over the formatting well They went in a clobbered software that your code depends upon and has broken your code so Rather than the principle of least surprise are Infamous former Ruby community member called this the principle of most heinous arsenic injection So is there a better way? Yes Derive your cool logger from the simple logger implement the behavior you want then in your cool library You can use your subclass one and you won't affect anybody else using the original logger at all This is a better way better way to design so open-close principle still important in Ruby prefer to subclass rather than opening a class and modifying it now this one begins to get interesting the dependency and version principle and I love I love this would you solder directly into a socket? You know it scares me but I know some people who would it says depend upon abstractions and not Concretions, I love the word concretions is that it where it is now because I said it is I like to mess around with hardware Did anyone see the blimp demo in here the other day? Okay? This is my Arduino project not nearly as impressive It just is a Pomodoro timer that raises a flag when you start your 25 minutes and that at the end of 25 minutes It will lower the flag Yeah, the blimps more impressive, but this is fine The reason I introduce this is because my next example is going to be a hardware based example And I actually use this in telephone interviews I ask people to do a design problem over the phone It's a very simple problem to design a embedded hardware system software for an embedded thermostat that controls a furnace So you have thermostat software and you have a furnace software and you might do something like this You can turn the furnace on and you can turn it off So it has on and off methods and the thermostat calls that Now remember solid was written with Java in mind. So let's just look at the Java Solution here to kind of motivate where it comes from Here's your furnace class. It's got an on method and an off method and then the thermostat Here's the run thing and if the furnace should be on you turn it on it Otherwise you turn it off really simple control module here Anything interesting about this code Yeah, yeah, look we reference furnace explicitly in this code We are hard-coded to use a furnace object That means this thermostat can never run any other bit of hardware other than that particular furnace What we want to do instead is to introduce an interface between the two and we'll call this an on-off device Now the thermostat uses you on off device Which is just interface and if you're not familiar with Java interfaces are just method signatures with no Implementation with them. Okay, then furnace implements on and off and it inherits from the on-off device So here's your inheritance dependency Here's your using dependency and notice that the original one had all your dependencies going this direction and the new code has Dependencies going the other direction Yeah, turn towards the audience when I say that this way Therefore dependency inversion we're changing the direction of the dependencies now the nice thing about this is now We have this interface. This is what an interface looks like in Java and our thermostat code has removed all References from the furnace object. We now references on off device, which is an abstract interface It's not a particular device And the advantage of that is now we can implement all kinds of objects that conform to the on off device Interface and our thermostat can control them as well. That's really nice. I like that so Java people have it ingrained in their heads to code to Interfaces and I'm sure that the Java people who saw that original code is a no interface, right? Okay, so this is like ingrained in their minds So what does Ruby look like? Here's the furnace code very similar to the Java version and Here is the thermostat code Before I changed it to conform to the dependency inversion principle now watch very carefully the next slide will be this code After I've applied the dependency inversion principle. You ready? There's no explicit references to furnace in this to begin with so kind of the whole dependency inversion thing falls off automatically So we begin to wonder does does that mean that dependency inversion is not important in Ruby that we can just ignore it Well, you think about that. I've got a rant to do Some people feel that they must check The type of an object passed in in order to be type safe And so they will embed is a test throughout their code and there are exceptions unless that object is the proper type Notice what we've done We're back in Java mode thinking because now we have an explicit hard-coded reference to furnace and this code will no longer work with arbitrary on-off devices in Ruby you have to work extra hard to do what Java does normally Keep that in mind Okay, so What do we put here in our diagram for Ruby? Well Ruby doesn't have explicit interfaces, but it has something Conceptually very similar. I like to call them protocols now protocols are not coded There is no nothing in if you if you go into GitHub and you look throughout a code base You will not find a file that has the protocol in it, but that doesn't mean we don't use it Right? So thermostat is written with this idea of something I can turn off and something I can turn on and Then we write the code here that conforms to that idea that protocol So protocol is just a list of methods with certain semantics Certain semantics keep that in your mind too because we'll get to that in a little bit Okay, so protocols are important in Ruby So the guy who wrote that that that is a task now. He said okay protocols are the important thing Let's let's do this. Let's check for the protocol Okay, we no longer have an explicit reference to furnace But I'm not sure what value this brings to the table and in fact a friend of mine has suggested that instead of duck typing This should be called chicken typing because you're just scared to use the facilities Ruby Ruby gives you Okay, example XML builders library. I wrote it generates XML Very easily and it writes the XML to a target object So here is an example usage of XML builder. You give it a target and here I'm giving it a string So it's going to build the XML into the string and this creates a person Nested with a name nested inside of that with a value for that name so it builds up a nested XML It's a really nice library and we print that out here and it all works Because the target here is explicitly defined to take a shovel operator So let's go back and look at this. So this is the target. I got to give it an object What kind of objects can I give it the documentation says anything that responds to the shovel operator? And takes a string and returns itself so a Method with a signature with semantics That's a protocol So I've explicitly called out the protocol in the documentation for XML builder that means I can go and I can give it Say a file because files in Ruby respond to the shovel operator So XML builder can write into a string or it can write into a file or it can even write into an array There's some reason you want to do that or it can write into any object that supports the shovel protocol Which is kind of a standard protocol in Ruby anyway, so that's easy to define Okay, so code to protocols. This is our Mantra in Ruby rather than code interfaces code to protocols and think about protocols when you're designing your system protocols are important Barbara Liskov just won She just won an award at UPS law, right? I don't remember what that was. Does anybody know the Turing Award? She got the Turing Award and gave a speech at UPS law here just like within the last month or so Barbara Liskov a number of years ago came up with what's called the Liskov substitution principle and I'm not going to read that for you It's very mathematical very precise very academic But essentially what it says is that derived classes should be substitutable for their base classes This is a very Java like formulation. This is what Bob Martin says Personally, I kind of like this definition of the substitution principle Dave Thomas just calls it duck typing But walks like a duck and talks like a duck and treat it like a duck and you'll be good okay, so When is something substitutable when can I take one object and substitute it for another and expect my code to work? This is a very important question. I think it goes to the roots of The power that object-oriented design gives to you and so it's very important to understand Substitutability and OO design I'm going to start with this example here suppose we have a module called normal math opposed to abnormal math and It has a function called square root in it and this algorithm here I don't know if you recognize it or not. This is Newton's iteration a fixed point iteration for Approximating a square root and it stays in this loop until the answer your answer here is within Three decimal places of the correct value of square root So this is a very interesting piece of code we can Write another version of this we'll put it in a module called accurate math And it does exactly the same thing except its termination is Five decimal places So it is more accurate is the answer you get back should be it Well is guaranteed to be more accurate than the guarantee of the previous one We also got a module called sloppy math that does the same thing, but it's You know, yeah, we're close. That's good enough for government work You're called a government math, so now we can ask two questions about the square root method What does the square root require before you can call it and what does the square root method promise you? after it is finished and it returns Require and promise think of those things okay So square root requires that your input be non negative It must be greater than or equal to zero because if it were less than zero you'd get a complex number back We're not going to handle that Which is okay? It promises that the answer your return is going to be within Three decimal places of the correct square root value So you got a requirement and you got a promise two things. This is called the contract For this method Anyone worked with any design by contract? Okay, a few of you a few of you this comes right from Bertrand Meyer right from the language Eiffel Which I absolutely love I Think it's good to learn Eiffel for this reason Truthfully though I wrote more ruby code in six months than I did in three years of using Eiffel So take that in mind, but but but the disciplines the things you learn in learning Eiffel is well worth it Okay, so you asked a question about does it require what does it promise? Now here's some client code. We are using The square root here and this is how we'd use it you pass in the math object You call square root on it and you're finding the distance between point a and point b Now There's actually two views of the contract. There is the view from square roots point of view what I'll call the actual contract and that is What is actually being provided by that module? There's the expected contract over here and That is what the client expects Now if the expected contract its requirements and promises match exactly to the actual contract then everybody's happy It works software will work Well, that's a bold statement How about if we made a better promise what what if instead of saying? Three decimal places the actual contract says five decimal places If I substituted accurate math in for normal math and the client used it would this software still work Most likely yes because the promise is better It's like you make a contract with someone to mow your yard and the requirement is they mow it once a week and they do it Twice a week Hey, that's all the better right. It's a better promise. It's a better delivery than what you expected. So that's okay But what if we go the other way? What if the promise is weaker than what's expected? We're expecting three decimal points of accuracy And we're only getting one decimal point of accuracy Will this work? Maybe you don't know you don't know so because the contract is broken at this point So weaker promises worse promises are what make objects non substitutable So accurate math is substitutable for normal math, but sloppy math is not Substitutable for normal math. So now we've got some rules and substitutability. We're beginning to understand that yes in the back Possibly although You may also have Yeah, there there may be a performance aspect involved in that and if the performance aspect is important You should probably make it part of the contract and that way you can evaluate whether it's substitutable or not Yeah, okay. Yeah and good point there Okay, so now let's let's look at this. This is complex square root and It makes no assumptions about x because we explicitly check for it And if it's going to be less than zero we will return a complex answer rather than just the regular real answer So the contract for this guy. Oh same same accuracy guarantee the contract for this guy Says in the requirements anything goes. This is a looser requirement Because it accepts a wider range of inputs now is complex math Substitutable for normal math Yes, because normal math because the client will always pass in a value that is greater than or equal to zero He will never explore the area where the number is negative. So yes, you can substitute in Complex math and a less restrictive requirement is okay If it is a preconditioned the requirements of the preconditioner on the client If the client does not match the precondition there is no requirement on the supplier software to do anything if the client expects an exception It's got to be part of the requirement. It's got to be part of the contract So and and we can go we can go into deep discussion about that So I kind of want to not if you want to talk to me afterwards I'd love to talk to you on that one because that's that gets in the whole way you design exceptions And my take on exceptions just a little bit different than a lot of people So I'd love to talk to you on that one But yes, yes, if if you have a precondition that says you cannot pass me a negative one And I pass you a negative one then I might throw an exception or I might not But if you expect me to throw an exception then that is part of the expected contract Okay, that would be that would be the promise. Yeah, I promise to throw an exception Okay, if I actually wrote a square root module that required and to be greater than zero This is a more restrictive requirement This would also fail because I might pass it a zero from the client in which case who knows what happens We're breaking the precondition. So More restrictive requirements not allowed So the answer the question the reason we went into all of this was to decide when can I substitute one object for another object? Okay, and we can summarize these rules very simply Require no more promise no less so the contract I'm providing has to require no more than the contract you're expecting and Promise no less than the contract you're expecting if you follow these rules This is the definition of duct typing If an object follows these contract rules, then it is a duct type and can be substituted So I really like this. We've now got a formal definition for what it means to duck type I think that's a very powerful idea How are we doing our time? I got two more principles. Can I make it? That's a break keep going We're getting close. Okay We'll go through this fast Okay, make fine-grained interfaces that are client-specific is this rule Here's a hardware piece of hardware that has a keyboard and a displayer Connected you can actually buy this one. This is called the wild card keyboard and display So if I were to write this in software I might write a module that looks like this and an interface that looks like this and software that uses it like this What's wrong? Remember the rule that you want to depend upon things that tend not to change Here this display menu is depending upon an interface that has keyboard and display methods in it So if the keyboard changes that may impact your display menu It's not a good thing. So The interface segregation principle says segregate your interfaces and do separate ones So the display menu display depends upon only display things and the get selection method Only depends upon keyboard things and your dependencies are much nicer. So so this is a better design This is all ISP says The other nice thing about this is that you can Okay, okay, why why okay? you have fewer reasons to change and Easier to implement alternatives So if I get new hardware that has a separate keyboard a separate display I can implement them like this and it's easier to implement. I don't have to implement Display things in this keyboard that doesn't have a display, right? So that's good. But again In Ruby, we don't deal with interfaces. We've got these protocols So the Ruby formulation of this is really quite simple. It says clients should depend upon as narrow a Protocol as you can get away with Okay, you can see that in the builder Builder only uses the shovel operator to put things into the target So anything that implements shovel that's good enough. Suppose you have an array that you're using as a stack I would suggest sticking to push and Pop operations on that array and not general-purpose array operations allowing you more flexibility In substituting objects in there. So depend upon narrow protocols is the Ruby version of this principle Okay, I Got through all five. I only had one left instead of two I Got five. I got four minutes Now instead of questions from the audience, I'm gonna ask you questions For discussion Active record Implements a domain concept and a persistence concept in one object Does this violate the single responsibility principle discuss? Yes, it does Absolutely, does it bother us? Okay, yes, it does. Okay, why I'm curious So designs become more complex the interactions between all these different interfaces Become more complex and it is less convenient to do that. Good point. Anyone anyone else have feedback on this. Yes Makes it harder to test. Yes. Yes, it does Especially if you want to segregate database related tests from just business logic tests and since they're going against the same object inconvenient Okay So we heard from three people who are kind of negative on this. How is anybody okay with this? You're okay with it. You want to defend your position you can move the Domine layer to other place. I mean Active record. Maybe it's not a Partner Some kind of really huge pattern, but it's good. I don't know what I mean Okay, the key the key to these design principles that they they are just principles They are not ironclad rules that you must follow under all conditions But they give you objective reasons for discussing designs and you can say I don't like this design because it kind of violates single Responsibility principle or you got kind of a dependency inversion problem over here, you know, you can talk about these things Okay, this is this is in with regard to contracts If you decide you're going to write contracts for your methods or at least think about them sometimes you can't express them as logical Conditions, what should you do about that? We think requirements. Okay, right tests. Okay, that's good It's really interesting post conditions in particular post testing testing Testing there we go. Um, I've table problem. There we go. It's a dependency injection problem You I'll try this again. I'll hold this. Okay. I'm not touching the court Post conditions and unit tests are very similar. They do the same thing. However, they do them differently Unit tests give specific very understandable Examples, but it's a finite number of examples post conditions state the truth for all Possible invocations of that method. So it turns out that a lot of times post conditions are harder to write than unit tests But because they are more general sometimes they provide more value. So that's an interesting point Sometimes are harder to not implement in fact sometimes force for simple for simple methods The post condition is essentially The body of the code as well. So yeah, you're just restating what the implementation does. Yes Okay Just a couple more questions. I'm going to go through these real quick because we're out of time But I want you to think about these how do you verify that your client software only uses a narrow protocol on the objects that you're using How if you only want to use push and pop, how do you make sure your software doesn't use anything else? Think about that one Solid principles were written with static languages in mind are their principles That might apply to a dynamic language like Ruby That do not apply to a static language like Java Think about that one. I think if you have any answer to this one I'd love to have a discussion with you afterwards because I'd love to hear your thoughts on that Okay, so summary I Think the solid principles are important. They don't map exactly but there's a lot of good information in them that we can Apply to our Ruby designs Okay Thank you


Hey everybody, this Saturday, September 16th, starting at 10 o'clock, our PR department is hosting an event to raise money for sister care. And it's got a dunking booth and guess what? I'm in the dunking booth. So how about come down there at 10 o'clock with a handful of cash, spend the day at Soda City and dunking me as we raise money to support a great organization like sister care. We're so excited about this opportunity. We'll have games, cornhole, other things to keep you occupied as you watch me go up and down in that dunking booth. So don't forget Saturday starting at 10 a.m.


Hello and welcome to today's webcast. Before we get started, we'll go through some interactive tools. Located in the top right hand corner of your screen. You can submit a question directly to the presenter. You can download supporting documentation. And you can provide us with your feedback. Need help? Quick help to chat with our local support team. Access technical FAQs and a phone number to call us on. Enjoy the webcast.


Welcome, my name is Matthew Goodman, the CSIS-Simon Chair. We have just completed our annual CSIS-JETRO conference on regional economic integration in the Asia Pacific region, and I'm delighted to have with me the speakers from that conference, and we're going to have a short chance to chat with them about their thoughts following the conference. Chairman Ishige, let me ask you first. The U.S. and Japan announced progress on the Trans-Pacific Partnership when President Obama visited Japan in April, but we're unable to reach final agreement. What needs to happen to close the gap between the two sides, and when is this likely to happen? Yeah, that's a tough question, if I can answer such a question, I would not be here. Okay, having said that, according to the joint statement, they made very, very big progress. Actually, most of them said, we would call upon other TVP partners to take necessary steps to conclude the negotiation. That means they are very, very close to the agreement, and in addition to that, the political leaders, as I said in the seminar, they have the mutual trust. So based on that, the negotiators will be able to find the common ground, find the solution. The important point at this moment is that not to be greedy, not to be too ambitious, not to be too greedy, too ambitious, to refrain from bringing in the new ideas, because the ambition should be held at the start of the negotiation. We are going to reach the agreement, so it's time for us to make a compromise. The important point, the necessary thing is sort of, how do you say, the political art of compromise, to consider the counterpart's position, and to know the red line of the other counterpart's position. That's important. I don't have to go into the details of specific issues. And timing, based on that, anytime soon, the bilateral negotiation can be concluded soon. That's my assessment. Professor Arato, what are the prospects for agreement among all 12 TPP partners? Do you think that could happen this year? Frankly speaking, that may be a bit difficult. Assuming the Japan and the U.S., which some kind of agreement, then the issue, rulemaking issues still remain. Specifically speaking, developed countries on the one hand and developing countries on the other hand, they have different views on issues such as intellectual property rights, their own enterprises, investment, so it may take some time. But once Japan and the U.S. settle their issues, I think the momentum is there, and hopefully early next year, things will be done. Dr. Lim, the other major track of trade negotiations in the Asia-Pacific region, the so-called regional comprehensive economic partnership, is also moving along. Do you think that that will be concluded, even if TPP moves forward, and should it be concluded? It will, according to schedules, end by December 2015, but I think the nature or the exact form of the completion is yet to be determined, but at this point in time, the agreement on goods I think should not be a problem. On services, there will be some of it, and also investment and flow of capital, as well as other issues. So our step will be completed, although at this point in time, it's quite slow in progress in negotiation. But as the case in ASEAN, trade negotiations or regional cooperation procedures, it takes for a while and gradually accelerates. Dr. Zhang, China is the host of the Asia-Pacific Economic Cooperation Forum this year in 2014, and they have revived the idea of a free trade area of the Asia-Pacific. What is the thinking behind that in Beijing, and what is the specific plan for getting to this ultimate objective? Actually, I'd like to say that this idea is not a new idea provided by Chinese side. In 2006, the U.S. already provided this idea, meanwhile, Australia also suggested this idea. But just in the past, actually, there was no TPP negotiation, there was no RCEP negotiation. Meanwhile, you can find that a lot of important bilateral free trade agreements, such as between Japan and Australia, between South Korea and Canada, this type of bilateral FTA, without this type of FTA, you cannot imagine FTA in the region. But today, I think that the condition and the foundation already changed, obviously. You can find that both TPP and RCEP, two tracks already get obvious progress. Meanwhile, important bilateral and trilateral FTA also provided more and more conditions for formulation of FTA in the future. But this time, Chinese side just suggested we conducted a feasibility study on FTA. That means we hope that all economic entities in the region, we can work together and discuss what will be the possible roadmap for FTA in the region. I think it's the right time for us to consider this issue. Well, thank you very much. There are obviously a lot of very exciting developments happening in regional economic integration in the Asia-Pacific region. And I'm sure we'll all be watching closely to see how it comes out. Thank you for joining us. Thank you.


All this month, get up to $50 off any Android smartphone from Appalachian Wireless, any Android you desire. All $50 off with two-year agreement, better service, bigger savings, that's today's Appalachian Wireless and East Kentucky Network Company. Riverview Health Care Center in Prestonsburg held a surprise party for 98-year-old Jimmy Goble and 97-year-old Marie Goble, who are celebrating 76 years of marriage. She says the key to a long-lasting marriage is really pretty simple. There's two things you've got to do. One is to keep it living and keep it loving. It's been a pleasure and Marie, we'll do it all over again. It was also a special day for another couple. One of the Goble's children, Lou McCray and her husband Conley, is celebrating 39 years of marriage. We have grown up in a loving home and I know these days, I've heard it said that if your parents are still together and still living, that it's a rarity. And we know that we grew up in a loving home and they've just been a wonderful influence. During the party, the happy couple made a toast to their next 76 years of marital bliss. Reporting from Prestonsburg, I'm Shawn Allen for EKB News.


The Senate has mandated its Committee on Interior to investigate the circumstances causing the delay in the issuance and renewal of passports by the Nigerian Immigration Service. The Senate issued this directive to its Committee on Interior at the resumption of plenary on Tuesday following a motion by Senator Uchi Kunefe, who said Nigerians are facing hardship and stress in getting their passports. She explained that despite the six-week timeline given by the NIS to process passports, the Senate has now spent between three to six months to get them. The opportunity also asks the Committee to probe their contract for the printing of passports by the NIS. The Senate knows that the delay issuance and renewal of the Nigerian International Passport by the Nigerian Immigration Service nationwide has caused untold hardship for the Nigerians who need to travel out of the country or return to the country. The Senate further notes that the Nigerian passport is an official identity document that affirms the BRS citizenship and its issue to Nigerians, primarily for the purpose of traveling out of the Nigeria and returning to the country in exercise of their rights to personal liberty and freedom of movement. The passport is the right of every Nigerian. And the situation we're in today, we were in about 15, 20 years ago. How did we get back here is what all of us are worried about. And it is important that we resolve this as soon as possible, because there was a time when you could get your passport within two or three days. We must return to that time. And this motion is very timely because it is embarrassing to Nigerians to know that we will need six to eight months to take passports. Investigate the circumstances that led to the delays in each one of the Nigerian passports. But Nigerian Immigration Service are put back to the Senate within two weeks. Those in favor of this prayer say aye. Those against the NDII Service.


One of the most important things that clients hire you for is to help them stay on track with their most important thing. So think of a client right now. What did they come to you for? Or in your work together, what did you discover together to be their most important thing? Maybe it's a project that they've dreamed of that they want to make real progress in with your help. Maybe it's a behavior that they want to habituate, that it would be life-changing for them if it became a habit in their life. Maybe it's a set of values or virtues that they really believe in, but sometimes as they live their life and do their work, they can become distracted or tempted to go against their own higher values and virtues.  It's so easy for all of us to get off track from our most important thing because and I think it's going to be increasingly so because of our increasing connection to the internet. You know, we get so many emails every day. So many blog posts come into our view, maybe. People make requests of us. We see things on the media. Every single thought we consume, every single external thought, external idea we consume or internal thought that we indulge in, can take us off track from our most important thing. And so clients hire you to be a loving, firm and supportive presence, gently bring them back to their most important thing. And if you can do that for them, they will be so grateful for your work with them. So I'm always open to your questions and your comments. And until the next video, I wish you well.


So bear with me that none of the pictures I usually have actually exist for tonight. I had people questioning on CopyJS what DJs actually are but you know the type that have records and stuff done with me. It's really scary doing that kind of thing though. When you're doing something in public you have to learn on your feet or you will fail on your feet and people will ask you to exit. It's worse when you're paid to do it because then there's that extra pressure of doing it. I had a reflection, someone actually asked me about my Twitter bio and they said it used to be a DJ. It's like yeah, it was years ago. So what was that like? So where did I start? And that's why I'm telling you about it tonight. As I started thinking about it I thought about how the different things I did actually still apply to me every day. Which is really strange. Do you think what's DJing got to do with the developmental design or anything like that? So I've got to hold this to things.  This is the hard one. Everything you do will fail. Sooner or later it's going to break. The record's going to skip because a needle will snap so you need to spare one of those. The power's going to go out or there's a surge or something like that or you'll slip and you'll hit something or something is going to fail at some point or other. And the lesson to learn of that is you really think twice about the things that you're doing. When you're putting something into production or when you're handing it off to someone else think about how it's going to go wrong because sooner or later it will. Just be prepared really. So you anticipate what's going to go wrong in the outset. And the way to actually get used to that is to set yourself up with some routines. The last thing you want to do as a DJ is turn up at the venue and you've left all your records at home because you might as well have stayed home. The way to actually think about that in a project planning point of view is you can conduct a pre-mortem. It's usually when you've finished a project or you've done a release there's a bit of a catch up afterwards to think about what went wrong and what can we do better next time and everything. The idea of the pre-mortem is you actually really think about it what's going to fail, which issues aren't actually going to make this build and plan for that beforehand. It's something that's a little bit tricky to get into the rhythm of because everyone would just say you've been really negative or something but by thinking around it before you get started anticipating a failure that might come you'll be better prepared for when that failure does come because it will sooner or later, usually when you're not ready for it. As a DJ you've got vinyl records. It's a physical disc that's got etchings in it and you have a needle on it, it's very physical. So many things can interfere with that. I had a routine and I still have a routine where I have to wash my hands and basically scrub them before I go near any records. If you come over to my house and ask to look at my vinyl and note you may not, maybe if you've done like a surgical scrub three times beforehand you can look at them. I mean have fun when my son gets older and starts asking what those things are. So I had my methods of basically ensuring everything was as nice as possible. Before I put a record on I'd clean it several times with brush and everything's going to be perfect. The problem with this is you get false associations.  As a DJ that's the last thing I did before I went on stage. And now I associate I'm feeling nervous. What do I do to make me feel not nervous? I'll go through the routine. I'm just going to wash my hands. You hear sports people who wear their lucky underpants when they play and there's special socks or they need their blue M&Ms otherwise there's no way they're going to play. It's a false association basically. It's a cargo cult behavior. See how well prepared I have to read my notes. What you basically need to do is try to think around what you're doing just as a matter of routine. Ask yourself why you're actually doing things. If you're doing... I like that job with scrums. You can do daily scrums that can drag on to half an hour. Anything longer than 10 minutes you're in trouble basically. And it's cargo cult because you know you turn up every day and you do this meeting and it always goes long or whatever and you're actually getting anything valuable out of it. By thinking through the process that you're doing you eliminate messy things like that. And maybe the scrum is really good for you but needs to be tightened up a bit. But that's okay. You're basically questioning what you're doing instead of just going through and following the same routines every time. The DJ might turn up while that setup was on turn table, CD player, mixer, another turn table. In professional circumstances you have another turn table behind you another CD player, another source of audio or a spare mixer because something's going to fail sooner or later and it happens all the time. DJ equipment's really high end compared to anything you'd buy for yourself. So it's designed not to but even with those specs it fails. Servers go down. But no matter how good the salesperson's been to tell you it's got 99% uptime that 1% will happen and it will happen when you do a launch at some point or other. What you need to think about is what you can do about that. And really what you're looking at is a single point of failure when one thing in your process can fail and take everything down with it. An example of this is linking to JQuery or even Bootstrap for your CSS or JavaScript and linking to Google as the source for that. What happens when Google's down? Your site's not going to load properly. Thinking your way through that, planning for what's going to go wrong first is really helpful. If you're looking at a server situation a cluster is going to make it a lot more secure. Obviously there's more stuff that goes with it so you need to weigh out the cost of it. But planning in advance means you can eliminate this single point of failure. It gets abbreviated to SPLF. You'll see that quite often if you've not heard it at the time before. If you just Google SPLF you'll find all sorts of different things that can go wrong and kill everything. But be really careful about your dependencies. These days, especially with a lot of single page architections if the JavaScript fails for whatever reason your entire site fails to render which is Angular. Angular. Angular or who's Angular? Google knows that's what it is. They know it fails. They don't use it for Gmail. They don't use it for any of their core products. And we do for ours which is kind of scary. We're taking second-rate stuff. React on the other hand can render on the server beforehand. It's pretty safe by comparison. Anyway. Noise. Noise, noise, noise. Noise. Back when I was a DJ my parents never understood music and I was spending all this money on records and going out into a club to some strange hour and playing all this really loud music when it's not even proper music and everything. That's their idea of noise. My idea of noise is anything. It's interference. I'm standing here with my phone in my pocket which is another thing I try not to do because as a DJ if this starts ringing or someone texts you and it connects to the cell tower then it interferes with the audio and you hear beep, beep, beep, beep. That's terrible. Maybe someone will think it's part of the song but it probably won't. What you're looking for is... What am I looking for? This is basically getting rid of the distractions in what you're doing. I've just been working at my new company for a bit over a month and Emily works there as well. She'll attest that usually when I'm at my desk my headphones are on. Sometimes I'm not even listening to anything but don't tell anyone that. This just takes away every distraction that's around me. People can be having a conversation next to me and it just doesn't bother me at all. If you start looking at your routines about how you work then think about what's distracting you. Sometimes your distraction might be that you're just staring at a wall that's really uninspiring so it might be a good thing just to pick yourself up and go somewhere else. It might be people having a conversation constantly next to you. Unfortunately not many people use phones for stuff anymore but I've been stuck next to reception before and they're answering the phone all day. It's not good. Invest in a decent pair of headphones.  You will get interrupted. There are legitimate reasons for that but eliminating noise means getting rid of everything along the way.  Meetings are terrible for this. There was a study done into management groups I can't remember the scope but it was pretty broad and it showed that people who attend meetings think they're really productive yet in fact they're just not. Meetings are things you do when you're not actually doing anything else.   See if you can say no to things if it's not really that relevant to you but just try to keep the focus of what you're actually doing. One thing with DJs is you see different styles of how people actually do things so a few DJs I've met over the years plan out their sets meticulously they time themselves so they knew that 15 minutes in they're not going to reach for the next record to mix it in. When things go wrong when you work like that they go disastrously wrong because it's too controlling. You're basically hoping that everything's going to be perfect and as I've already said something will fail at some point or other That said you need to plan you need to anticipate what you need to actually think about but don't be a perfectionist be aware that no matter what you come up with however great it might seem to you someone else's interpretation is going to be different maybe they're even wrong but you won't always win and that's okay just let it go sometimes the crowd is not getting into your music and you need to completely change tap for what you're doing at night that's okay the important thing is you just keep soldering on and just get something out there part of what I'm trying to instill in my work at the moment is the idea that everything that you do needs to be released at some point or at all is just no point doing it and we get so easily stuck into that where we pay attention to things not saying that you shouldn't really pay attention to things really closely but if it doesn't go the way that you want it to then just relax and deal with it and be glad that you've actually done something out of the end of it if the audience didn't quite get into your music and you loved your set then that's alright if they loved it and you didn't that much next time find a different venue or something that don't get too caught up when things don't quite work the way you want them to where am I I've got a prop these things are my 16 year old headphones these are DJ headphones so I can do that to them and I've got no danger of actually breaking them I can twist them around and do all sorts of things normal DJ mode like this and you'll have a monitor so you actually have that one off like that so with one ear you're listening to what you're prepping the other ear you're actually listening to what's live the way to think about that from a development point of view is you need to listen to production we are really bad at doing this does anyone track their JavaScript errors in production shouldn't really ask because no one ever does do you even know people are screaming at the screen because something is going wrong usually not monitoring what's happening knowing what browsers people are using there are a lot of like Google Analytics are pretty good even though however evil Google may be it does give you a lot of data knowing that actually gives you an idea of what's going on because you could just be marching to the beat of your own drum putting stuff out into production all right competitor comes along glues you out of the water because your checkout process is rubbish because you've never really paid attention to the metrics on it you need to always keep paying attention to what's happening while you're developing so you can just have a feedback loop and think about how you might change it next time there are so if you get stuck into things like UX there are so many counterintuitive lessons to be learned about doing it and you don't know until you actually find out for yourself generally one of the criticisms you often get if you do UX design isn't it just obvious common sense no there are so many things that just don't make any sense but that's just how we work when things do your wrong and they do terribly wrong you have to pick yourself up and get on with it the worst possible thing that can happen when you're DJing is the music cuts out and it happens and it's awful and you're sitting there trying to work out what's going on you've got all your equipment checking the plugs, making sure that's going on it's not good but you have to keep going you work out what's broken if the turntables died on you you pick up the other one and plug it in and knock it go it's alright but as long as you keep going then they'll get over it really quickly sometimes your hand will slip as your middle of the mix and you've got the bass from this one and the treble from that and it's just being murdered you're swearing at yourself for the rest of the night and probably for a month later because you messed it up so badly but if you just keep going no one else will really care this is kind of what I was talking about before where when things don't go the way you want them to I guess it's you kind of repeating that point when you have a conflict with someone else as well just look for a way of resolving it grab a mediator or something else to help you out and sooner or later you just need to swallow your pride and get on with it I've worked in insurance for over 12 years now and everyone hates insurance because you get the thing that you meant to get out of it but you don't get anything else they'll fix up your car for you as long as they're not bad and they'll put you behind the wheel of your car again and everything's back to normal but it's not because you've had the psychological trauma of having an accident and there's no compensation for that I have a massive dispute with one of my neighbors in Australia over a fence for no reason at all other than they were really bad people I had to take them to court and do all sorts of things so they could just pay me what we had to and in the end they did and I still feel bitter about it because it was just such a harsh experience in the end you just have to let go of it though I was never going to get anything else other than what was due and when you have like heated arguments in the office about you know Angular is terrible if you use it I'm going to walk out the door or something like that don't ever use bootstrap or our medi another person's been using bootstrap forever and maybe wrote it and put them together and it's fun once you get to a resolution that's not the person walking out the door then just accept it take a deep breath and get on with it if you don't then one of you is going to leave basically and I've seen this happen it's hard and you might not even get on with that person but it's okay at least you'll be able to sleep at night hopefully without like waking up in the morning during bad pictures of them or something does anyone ever have DJs much anymore I don't think I don't know what kids do or person when you're DJing in front of the audience someone's going to come up and ask for a sign and this is the worst possible thing you can do to a DJ is you're not asked them for a sign if you're at a wedding or something like that if you're a nightclub DJ and you're playing just leave the DJ alone just respect them from a distance it's alright don't ask for a song because they'll be offended no requests I'm not a jukebox you don't put a coin into me just play whatever you like doesn't work that way the key to a DJ's success is not listening to one person's request but understanding the entire audience that's there and making it work for everyone not everyone's going to get into it that's okay when you're dealing with client requests you'll get all sorts of different voices talking to you at once all of whom have got their own priorities they all know exactly what they need but they never talk to each other you need to basically wade through that and say no to a lot of things because otherwise if you say yes then you'll never get the end of it this is why DJs say no because sometimes someone will say yeah it's a really good song but I'm just not going to play it because I'm not going to respect your own request if you say yes too much then you'll just turn into a dull map and your productivity will go down and you'll spend more time worrying about what you're not delivering and what you are and it doesn't end well this might be relevant to me with my badly prepared talk for tonight no matter what you're doing you might be playing the best set of your life but you need to go home at some point and other people need to go home at some point usually when you're a club DJ you're given your slot for three hours or something like that they'll tell you what you need to play and you go there, you do your thing and you go home and that's it you don't have to worry about it from that there are two different aspects of that that apply to development the first one is in terms of releases and the way to not outstay your welcome is to release things as often as you possibly can if your release cycles are slow then it's not great because everyone wants everything to make it into that release and then they can't wait another six weeks for the next one because they need it now if you're releasing something every week or every day then they're just going to be alright so I can get it for you in two weeks it'll be alright as opposed to well this next six weeks slot is full I can fit you in how's April next year sound it doesn't work, frequently releases are your friend you need to have a really good development process for that to happen you need to smooth process from the request to designers, programmers, testers everything along the way needs to be in sync but when it happens and when it works well the benefits to you are huge because you can just get on with it and you'll have the satisfaction of actually releasing things it's the worst possible thing is to work on a project for months and then turn around and say to the client they've just had enough of it or they've let it or something else has gone wrong frequent releases are your friend the other thing is during your work day you're asked to turn up to your office for a certain number of hours per day go home once you're done just go home don't feel that you need to work for another hour to impress your boss because who cares you need to go home and sleep and rest and actually be more productive the next day there are a lot of studies into this that suggest that we should shorten our work hours not increase them because if you push yourself that extra hour the work that you do in that hour is even rubbish and you're going to pay for it the next day because you're tired and you get into a bad cycle here in Singapore we are terrible at this I think there's the highest rate of sleeplessness in Singapore out of anywhere in the world it's amazing considering what Japan is like just relax lah basically work out you turn up to work at 9 go home at 5.30 just walk out the door you've done your 8 hours you've had your half hour lunch and whatever your hours happen to be it's okay if someone questions you on it just find a study and point them to it your boss is really that obsessed about it usually no one notices I've got a team of 8 people I don't even know how many there are I'm not looking at when they're coming in I'm not looking at when they go home I trust them as professionals to do a good job trust yourself as a professional to do a good job and your work life will be so much better for you this is the best bit this is probably the hardest bit when it's all done congratulate yourself actually be happy about what you've done there's a lot that's being said about this in management recently probably not enough where it's really easy to criticize someone it's really hard to give them praise in a meaningful way that's counter to that if you make a mistake in your job then you might pour over it and try to find out what's gone wrong it's like here's what you need to know what is next time if you do well you'll get well done and that's it, it's not an equal measure and part of humanity is we're really good at pointing out faults and not actually praising things we're not good at this as a species what you need to do is think about it so that when something goes right you get very happy and actually take your people out to lunch or something and make them actually feel good about what you're doing when you've got your release because you've improved your release cycle and you've done it just actually take the time to reflect on what you've done and be glad about it usually you're glad it's over but that's reason enough take a longer lunch that day because you've got the thing out do something to make yourself happy because if you don't do this bit then the rest of it's basically nothing if you're not able to enjoy what you're doing you'll get stuck into a rut or changing jobs maybe first but it seems to follow in that order normally I'd be pointing you to SlideShare where you'd find these but considering how badly prepped my slides are I'm not going to put them up there yet until maybe later you'll find other things on there on my twitter questions stunned silence I'm going to show I think it'll be I'm going to show


So let's put our root and remainder theorems together and look at solving polynomial equations. And we'll approach it this way. We can use the rational root theorem and the zero factor property to solve polynomial equations. First, we'll use the rational root theorem to find a rational root. We'll use the factor theorem to rewrite the polynomial as a product. And we'll lather rinse repeat. And at the end, we'll use the zero factor property to solve our equation. So let's consider our polynomial equation, xq plus 4x squared plus 9x plus 18 equals zero. The left-hand side is a polynomial with integer coefficients, and so the rational root theorem guarantees that a rational root will be among the divisors of 18 over the divisors of one. And so that means that the divisors of 18 are 1, 2, 3, 6, 9, and 18. The only divisor of 1 is 1, so the rational roots, if they exist, have to be among plus or minus 1, 2, 3, 6, 9, or 18. And again, the important thing to remember is that the rational root theorem only gives possibilities for the roots. You have to check to see which, if any of these, are in fact roots. And that means we'll have to check each of these to see if it's a root. Since we want to do this in the hardest way possible, maybe not. Since we want to do this the easiest way we can, we'll start by checking the easiest numbers. So we'll check to see if 1 is a root. And an easy way to do that is to use the remainder theorem. Remember, if we want to find the value of a polynomial at x equals a, we can find the remainder when the polynomial is divided by x minus a. Of course, unless we have a fast and easy way to divide, we shouldn't use the remainder theorem. Fortunately, we do have a fast and easy way to divide by x minus a. We can use synthetic division. So let's see if x equals 1 is a root. So remember, this means we want to know if x equals 1 makes the polynomial 0. And we can do that by finding the remainder when we divide by x minus 1. So let's divide our polynomial by x minus 1 using synthetic division and see what our remainder is. So we'll prepare our synthetic division table, then divide by x minus 1. So remember, this tells us that our dividend can be written as x minus 1 times a polynomial plus a remainder. But that means that x minus 1 is not a root. Because if x equals 1, the polynomial will evaluate to the remainder 32. We'll check to see if minus 1 is a root. We'll divide. So again, we know our polynomial is x minus negative 1 times something plus 12, which means that negative 1 is not a root. We'll check to see if 2 is a root. And again, since the remainder isn't 0, this is not a root. So we'll try negative 2. And remainder equals 8 means that this is not a root. So we'll try x equals 3. Nope. x equals negative 3. Finally, and we see that x cubed plus 4x squared plus 9x plus 18 factors as x plus 3 times x squared plus x plus 6. Now our equation is written in the form product equals 0. So by the 0 product property, we know that one of the factors has to be 0. So either x plus 3 is equal to 0, which we solve, or x squared plus x plus 6 is equal to 0, which we'll solve using the quadratic formula. And so we have our three solutions, two of which are complex numbers. How about this polynomial equation? The divisors of 6 are 1, 2, 3, and 6, while the divisors of 2 are 1 and 2. So the rational roots, if they exist, have to be of the form divisor of 6 over divisor of 2. And so this gives us a lot of possibilities. And again, the rational root theorem only gives possibilities. You have to check to see which, if any, are the roots. And that means we have to check through all of these, or at least as many of these as we can until we find a root. And if we do so after a little bit of effort, we find that x equals 1 half is a root. And so our polynomial factors is x minus 1 half times. And we'll make our life a little bit easier by factoring a 2 out of this second polynomial. So now we have product equal to 0. So we know that 1 of the factors equals 0. So either x minus 1 half is 0, which gives us a solution. 2 equals 0. Well, that doesn't happen. So we can ignore this case. Or x squared plus 8x plus 6 is equal to 0. So we'll run this through the quadratic formula and get a couple more solutions.


Hi, welcome to a real conversation in English between two native English speakers. I'm Liz Wade, and this is Adam Navas. Hi, Adam. Hello, Liz. How are you? Good. How are you? I'm fine. Good. And we are going to talk about one of our recent spotlight programs. This week's program, Bonhoeffer, Making Difficult Choices. If you have not listened to that program or seen it on YouTube yet, you can find a link in the description. And actually, while you're looking down in the description, make sure that you notice that join button to become a member of our channel so that you can get extra perks, including PDFs of scripts. That's a very difficult word to say. PDFs. PDFs. And other exclusive member videos and all sorts of great things like that. And while you're there as well, click that little Subscribe button if you haven't already, and then click the bell to always get a notification when there's a new video, because we have a lot of good stuff, I think, and we don't want you to miss any of it. If you are listening on Spreaker, you can also find that link, listen to that program, and then have your say in our conversation by posting a comment on Facebook or sending us an email or visiting our website at www.spotlightenglish.com, any of those methods to get in touch with us and join this conversation, because we really do love to hear what you have to say. And I think this program especially is a great opportunity for you to share your opinions, because it is about ethical choices, which is always an interesting topic to me. We can imagine what we would do in situations that we learn about. And so this one, Adam, you wrote this program. I did. And it's fascinated by Dietrich Bonhoeffer, which is the— Yeah, I was actually—I was going to ask two questions of you. Oh, okay. First, what made you write this program? And if you could tell us a little bit about it. So you've already started, so you go for it. So Dietrich Bonhoeffer was a German theologian and a pastor living in Germany during the 1930s, 40s, when they were Nazis. And what was fascinating about him is he actually came to the United States and studied some of the ant-nonviolent actions that were going on in the United States to change some of the society where we are. Decided it was more important to go back and to fight against what he saw as evil and hateful, and I think most of the world agrees now it was, but also how those beliefs went up against reality and how his life story actually—he got involved in a plot to assassinate Hitler, a failed plot, but a plot nonetheless, and he eventually was caught and imprisoned and killed for those plans, but he thought it's still a good thing to kill one person. And so, of course, we hear that, and it's very easy when your life is not being threatened or when other people's lives are not being threatened to say, well, it's never good to kill somebody.  Yeah. And of course, all people, hopefully, are going to say, no, I would never kill someone. But then, you know, you learn a little bit more of the situation and the question I think that ethical question of the program is, would you save or sorry, would you kill one person to save millions? And it's actually not—it's not a guarantee, right? If he had killed Hitler, maybe someone else would have stepped into his place. Maybe it would have been worse. Who knows, right? But that question, what do you do? What is the good choice, right? What is the ethical choice? So I think that's really interesting. I think it's a good idea to set the scene a little bit, to think about what sort of situation he was in there. So the Nazi party was rising to power, right? So they were gaining more power in Germany. And there were German people who said that what they were doing was wrong and they did work against the Nazis. But one of the things that I think really hit Bonhoeffer, or Bonhoeffer, it's a German name so it's really difficult for us to say, one of those things that really affected his life was that he was a person in the church who was a leader, right? He was a pastor, right? Yeah. Yeah. The Nazi party said that any church that wasn't a nationalist church was illegal. And so I think that's really what started to me in this story, what makes it seem like when he really started saying, wait a minute, that is not what I believe about being a Christian. Right. Yeah. He took what many of Jesus', well, all of Jesus' teachings very seriously. And there's a series of programs, or a series of teachings in the Bible called the Beatitudes, which are a series of blessings for people who are poor and who are troubled and are, I'm going to say put upon, but there must be a better way of, down-trodden, oppressed. Oppressed, yeah. Yeah. Good one. And so he took those seriously and said, you know, we need to care about these people who are being hurt, like there are a lot of stories in the Bible about Jesus' teachings in the Bible about like caring for your neighbor and taking that very seriously. And he really felt like he had to act. And even when he was eventually killed, he was willing to act knowing that if he got caught, he understood that what would happen. And he accepted that. Right. He accepted that. Because of course, that was a super dangerous thing that he was doing, right, plotting to assassinate a country's leader. Yeah. And I think it's really easy for us to say, well, Hitler was a bad person. The Bonhoeffer was a good person. However, there are plenty of times where we judge situations like I can't believe that person tried to kill that world leader because they're just values, their way of seeing, but they thought they were doing what they were supposed to do. So it's really hard to get into the mind of someone who is still a person, right? What could they be thinking that I could relate to even though I don't understand why they would do that? Right.  Yeah. This is a sillier thing.  And you can say that about like any terrible leader figure, right? Who ends up killing hundreds of thousands or even millions of people. Right, exactly. Like if you could prevent a genocide by killing this person as a baby. I think that's something for our listeners and watchers to put in the comments. Would you go, would you, if you could, yeah, what would you do if you could? See Adam, some of our listeners might know if they have watched or listened for a very long time that I am a huge sci-fi fan. I thought you were going to go somewhere with this. And I think that I have seen enough science fiction to know that when you go back in the timeline, you only mess things up. It never goes well. You don't make things better. So yeah, I don't, I personally probably would not go back and kill baby Hitler even, yeah. I don't think I could kill a baby. Teenage Hitler. Yeah. Yeah. What a crazy conversation we're having right now. I know. It's a little odd. We apologize to anyone who wanted to come to here and hear a pleasant conversation about pizza, ice cream or sport and instead this is what you got. So getting back to this science fiction, going back in time never works. But what I do think, but that's just, that's just TV science fiction. Real time travel could go well. But I think the point, because science fiction usually has a point that is applicable for us in our current situation, even without time traveling devices, right? And I think it just means that we have a lot of work to do here, right? To make our world a better place where we are now and to continue to make the best decisions that we can. And I think I hadn't thought about this before this conversation, but part of what we are doing to try and make this world a better place is the Ten Ways to Fight Hate series. And I think that is actually a really good sort of companion or partner to this program. So maybe the question of what you would do if you were Bonhoeffer isn't something that you know how to answer, but going forward and making the world a better place, that is something that we can do and we can learn more about it and we have ten programs all about it. Well, not ten yet, but they're coming. And so I think that is hopefully a helpful thing for our listeners and, yeah, for everybody, for me to think about, for you to think about. And I hope we're never in a situation where we have to kill anyone. Yeah. Yeah. Let's end on that. If you have gotten this far in this conversation about some very weird and, I don't know, things that make me feel uneasy, kudos to you. Good job. Good job. If you would like to learn more about membership, again, push that join button that's right under this video or follow the link if you're listening to this as a podcast. We hope that you can subscribe, that you have, that you constantly download our podcast. We think it's great. And that you can check out our website, spotlightenglish.com. You can find us on YouTube, Facebook, Instagram, and Twitter. And yeah, let us know what you think about this program, what you would do in an ethical situation. And until next time, listen, watch, practice, learn, Spotlight Out.


Oh my god, just tossing a few American airmen and some gasoline. Yeah, by the way, again, we have a new command on Aaron oops Bushnell We have a new command on Twitch Aaron Bushnell. Okay to understand Aaron Bushnell's divine violence and that's the title of the first article by Chris Hedges that I linked I linked up two articles of video and a Tweet from Max Bowman thought if you want to understand what Errol Aaron Bushnell's Extreme protest was all about I would highly recommend going through those four pieces of info and You'll get a pretty good idea And I watched the full video elder God linked it up for us on our Gilded server on censored video Brutal to watch brutal to watch and I wrote back in 2012 that I wasn't gonna post right about geopolitical articles anymore and stuff like this because I didn't want to Be a witness or you know give the play-by-play Death and carnage that was double that was about to come I didn't want to spend my energy Documenting death and carnage because it was coming right. That was 12 years ago. I wrote that piece, right? So I've stayed away from extremely brutal Video I've watched some video article not articles articles. I read video pictures and stuff like this But this one I watched it Uncensored because it Was one of the I don't I don't condone I don't I don't support extreme protests like this I wouldn't do it. I think Aaron Bushnell's Personal life would have been better spent Living a long life and fighting against tyranny, but this one act he committed One act to commit it and he gave a very short intro to it, right? Just Down and dirty, right? Just just straight up laying it out This me Paraphrasing he stated this may seem extreme to those who aren't aware of what's going on Okay, he implied he stated But consider what is happening Right Compared to what is happening to the people of Gaza. This was not extreme and he was a hundred percent correct on that okay, and he ended it there and As Chris Sages stated Committed his divine violence, right? It's on the same level. I mean Apologies, I'm not reading the chat, but just get this point across, right? For years now, I've been expressing Trying to explain to to people why Julian Assange is so important so important Because he has been crucified by centralized power For being a truth teller, right? And Julian Assange knew knew that the most powerful people and Institutions and countries in the world would come after him because I've been following Julian Assange since WikiLeaks first came on Online, right? I was like wow Groundbreaking and I listened to Julian Assange Since the beginning and read his articles and stuff like this, right at the beginning. He said look And you can find this online I should try to find the video and link it up for us for as a command, but he said look I have no desire to be a martyr He didn't he didn't right, but he knew The most powerful people institutions countries in the world would come after him and they would try to kill him Right, some people would call that suicide, right? Braver than I I would never do that some people say teacher aren't you afraid of what you're saying man compared to a judge Man, I'm just a little peon I'm not even I'm not even Coming out directly stating What I How brutal the situation is right now really I'm implying a lot of things, but I'm not straight out stating it because I'm not brave enough right Julian Assange was brave enough and he knew he knew they were gonna come after him right and I've been comparing his act and What is being done to him which is crucifying Julian Assange to what happened to? Christ right because He was a truth teller Jesus Christ was a truth teller so I've been associating the The crucifying of Julian Assange right to the crucifying of Christ Jesus Christ some people understand what that means right because Robert Anton Wilson has written about it murderer William Reich wrote about it the murder of Christ What's the other book we're reading the William Reich in hell with Robert Anton Great thinkers have associated truth tellers to what happened to Jesus Christ, right? he Because Jesus Christ really Knew that they were gonna kill him Right, so some people would say Jesus Christ committed murder.  They're going to kill you Right the person doesn't because they have integrity, right? Some people could say well he He was a cause of his own death right Jesus Christ seriously could have ran away. You could have walked away. You could have just denied you could have just said no Taking back his words Julian Assange could have revealed his sources Aaron Bush know He was a truth teller and his truth how long did he speak for before he committed that act how long He he walked like a block Across the street. How long did that take? Oh the the video is is timeless, right? You lose yourself in in how long that message took For him to say like really I couldn't tell you if it was a five-minute walk or a one-minute walk or The shortest shortest truth teller that I know of right Julian Assange has released Tens of thousands of documents and never had to take back anything that Wikileaks has released, right? Correct anything that Wikileaks has released, right? Jesus Christ 33 years, right? Let's say he was active Since he was a teenager puberty 20 years right Muhammad Ali documentary I mentioned this before there was a documentary where they Someone they interviewed Called Muhammad Ali a prophet because it was a truth teller. How long was Muhammad Ali a truth teller? couple of decades how long with was Aaron Bushnell a truth teller to the world to his friends maybe a long time and from what I've seen a long time But how long was your truth teller to the world a? Total of two minutes a minute. It wasn't even five minutes Truth teller for Two minutes Right, but the act he committed will live Throughout history it it was a nail in the Empire's coffin Right. It was the nail a nail in the Zionist agenda right Incredible incredible incredible Incredible incredible incredible really I Don't I don't I think It's best to live to fight another day. That's my personal opinion I'm not courageous enough to do what Julian Assange did or Aaron Bush Bushnell that right But you cannot deny his impact his impact is greater than the impact of So the most profound philosophers and Truth tellers and those who seek justice In history really incredible incredible right incredible So I'm not sure why I got into that, but I thought I think I read elder gods comment Yeah elder god got me into it elder god you get me going down dark That's what it was the elder gods comment just tossing a few American airmen and some gasoline profound profound profound Slick mick many of us Like to ask ourselves quote what oh, yeah, this is what Aaron Bushnell wrote in his on a social media post quote What many of us so this is this was what he wrote Many of us like to ask ourselves quote What would I do if I was alive during slavery or the Jim Crow south or apartheid What would I do if my country was committing genocide and quote The answer is You're doing it, right? You're doing it right now Aaron Bushnell 2024 right That quote Will live forever as long as human beings are around Right. I love you. Moo. Moo. Salutations. Welcome to our live stream The Way Aaron stood despite yeah, he stood firm and kept shouting free Palestine Until his body just couldn't take it anymore unbelievable unbelievable if if you I watched that video Twice Okay, that's rare for me to watch such brutal things even once and I watched it twice the uncensored version and when he did a turn He have you ever have you ever lifted weights to a level where your legs are shaking? Right. You just just shaking right when he turned His legs were bent and he was shaking and still yelling free Palestine


Marines have to carry a certain amount of batteries when they go on a 96-hour patrol and they carry those batteries because they have to communicate. Well, if we can provide them with the capability to not have to carry so many batteries, that means they can stay out longer. They can do more patrols and they won't need to worry about being resupplied. They can sustain them on their own for a longer period of time.  What it does is it allows us to use commercially available technologies to shorten the pathway from technology development to implementation in a Marine Corps. The leg braces that help store energy as you walk, they're small kinks that you got to work out there, like how they strap on a leg creates hotspots, but it's a phenomenal idea. And I think if the Marine Corps had that three years ago, the way that it helps assist to slow down your leg movement, it wouldn't have so much shock force on your legs. My knees would be fine. We bring a team of engineers and they actually wire up each of the systems and they're going to collect data on them throughout the week. All that data gets wrapped up into a report and then we'll make a decision to purchase in limited quantities, maybe one or two of these systems. Nothing that's here is going to be something that the Marine Corps will buy today. But the idea is to see the possibility. That's what we're looking for.