the radical fundamental principles of freedom, rational self-interest, and individual rights. This is the Iran Book Show. All right everybody, welcome to Iran Book Show on this January 10th. It's a Tuesday. Well into January now. No excuses for signing your checks 2022 anymore. It is 2023. I don't know who writes checks anymore, who dates checks anymore. All right anyway, good morning to those of you on the west coast. Good evening to those of you in Europe. Good early afternoon to those of you on the east coast. Welcome to Iran Book Show. All right, let's jump into it. Lots of stuff I guess happening. Let's start with this new immigration executive order rules being put forward by the Biden administration and being promoted or being negotiated, I guess, final details with the Mexican government in Mexico. This is kind of interesting. It's an interesting proposal. What they're trying to do ultimately is use the framework of I think how ultimately they will solve this issue of immigrants on the southern border coming in illegally. So I think this is a framework. But let me just say first that the first thing to remember about immigration is it's the law that has to change. And the reality is that the last time we had systematic immigration reform was 1964. It's been almost 60 years since that has happened. Attempts to have comprehensive immigration reform primarily under in the Bush administration were killed by the Democrats and then attempts by the Obama administration were killed by the Republicans. And there was an attempt to have some little bit of immigration reform done just a month ago by cinema and the Republican senator from North Carolina in that field. This is an issue for Congress to deal with. Congress needs to pass a new immigration law. It needs to fix the problem. The immigration law for 1964 does not cannot cope with what's going on in the southern border cannot cope with the needs for immigrants the United States has today but cannot doesn't have the equipment doesn't have the tools to cope with massive influxes of people from south of the border. We need a new immigration law. It's not going to be the law I want. It's not going to be even close to the law I want but they they need to solve this. So whatever Trump does whatever Biden does whatever anybody does at the end of the day the ultimate problem here in the United States other than a fundamental wrong view of immigration. But the fundamental problem here is a problem that we keep seeing repeating itself and that is that the legislative branch of government is basically not doing its job and not not in delegating to the executive branch and then blaming the executive branch or whatever happens. The fundamental issue here and this and lots of other issues trade being another one. The whole issue of tariffs should not be in the hands of the president. There should be Congress that has to vote on tariffs. That's how it was originally set up and that Congress is basically defaulting on its responsibility to actually pass laws and actually do the hard work and actually hashing out deals and granted you know if you're going to have a deal given this Congress it's going to have to have some compromise but something and even have the discussion and the negotiation and that hasn't happened in a long time. So you know I don't know what's going to happen ultimately and whether this Congress can hash out an immigration deal. Kevin McCarthy says immigration is high on his priority list but I'll believe it when I see it and how do you resolve the real conflicts even among Republicans never mind between Republicans and Democrats and how do you come up with a reasonable immigration solution. Now I think what Biden is doing is actually pretty reasonable and you could expand this into a more broader deal. I think what he's doing is tinkering at the edges with what he can do. So what is this new proposal? The new proposal basically says that right now there are four countries that dominate asylum requests in the United States. Four countries that dominate. They are, let's see if I remember this by heart, Venezuela, Nicaragua, Cuba and Haiti. And what happens is that people cross the border illegally and if the United States wants to return them to their home countries they can't. We don't have any kind of diplomatic relationship with Venezuela, Honduras, sorry Nicaragua and Cuba and you know if we try to return people to Haiti all hell breaks loose in the press and everything so people don't like that. So we're basically not returning them there. Mexico is resisted in taking them in Mexico. So and they come here and they have, based on current law, again current law, the law is what it is, they have what are seemingly legitimate cases for asylum but they're coming here illegally and they kind of right now the authorities are stuck. What do you do with these people? So they kind of keep them in the United States while they appear for asylum and it takes forever and when they reject it they can't ship them home. So there's just, it's just like a dead end with these countries. So what the Biden administration is basically doing is just saying okay if you come here, if you just cross the border and come here and ask for asylum we're sending you to Mexico and Mexico has agreed to receive 30,000 of these immigrants from these four countries. But what we're also doing at the same time is we are going to set up a process that if you apply for asylum from your home country or from our country before you get to Mexico, if you apply for a country before you cross illegally into Mexico and to the United States we will expedite and make it simpler for you and if you can show you have a financial support and if you can show you know whatever you can find a pass a FBI screen you can pass all these other screens we will let up to 30,000 people in every month from these four countries. So they're basically encouraging them instead of crossing the desert, instead of paying the coyotes, instead of doing all these things and then coming here quote illegally they get a chance to actually apply for asylum. Again I'm not for all the asylum rules I would like a work-based system but this is what we have so you work with what you have. Get them the opportunity to apply early they don't get a green card but they get work permits for two years while I guess their paperwork is finalized and they get the right visas and they get all the other things working out but at least they're in the United States legally and they could fly here right they can come instead of playing the coyotes they can buy airplane tickets which are much cheaper and and fly into the United States legally. So accompanying this the US claims that they're going to be rolling out a new website which is going to be dedicated to explaining to people in Latin American countries what the legal options are for coming into the United States or emigrating to the United States all the different options and supposedly it's going to make it really easy and simple for them to apply for legal ways in which to get into the United States based on the existing laws and the existing system. This is going to be rolled out in a few months I mean tech rollouts and government don't I don't expect too much and the idea is there then to then establish centers in south Mexico so the first they cross the border into Mexico and then there's centers in south Mexico that provide them with information that help them apply legally and help them do all that you know it could even be funded by the fees that they pay in order to come into the United States and then they can again come legally rather than having to travel through the desert of Mexico and having to come through illegally. So and I think at the end of the day it's that kind of program and I've always said the way to stop illegal immigration is to expand and simplify legal immigration and what needs to happen is to make this comprehensive and then decide on what basis that we want to accept legal immigration on the basis of asylum on the basis of family unification on the basis somebody can support you on the basis in my view of hey I here's here's somebody who's willing to hire me here's here's a job off I got and then you simplify it and if you make it really really really easy including for example seasonal workers who can come in for for three months four months five months and then go back home and come in and make it really really simple again make it put it on a website make it simple this is not hard to solve and that's how you get rid of illegal immigration but you see Republicans in my view don't want to solve this problem because they can they have they have two issues one they don't want immigrants they certainly don't want immigrants in Latin America and two they don't want to solve the illegal immigration problem because it is their number one campaign issue if illegal immigration basically stops being an issue as really it did from about 2008 until 2018 there was very little illegal immigration I mean Trump still made it a big issue even though it was it was really a non-issue there was negative illegal immigration into the United States but if that really goes away and everybody but perceives it as going away and people are integrating into American society and getting jobs and everything is going smoothly they lose a big issue that they have in terms of in terms of all these all these other issues so there we go so that's Biden's proposal or I guess I guess plan this is what's being enforced that Mexican government has agreed to accept 30 000 of these these people into Mexico the ones that get kicked out of the United States in addition to others that are already being kicked back to Mexico than Mexico I think Mexico views them as as additional labor potential I think they view it as a as an economic plus having these immigrants in Mexico and you know Mexico is really driving to become an industrial center that can become a part of the U.S. company supply chains even bigger part of U.S. company supply chains that take advantage of all the tariff benefits and NAFTA allows and provides okay so that's uh that's by by the immigration I just hope congress actually does something actually does something that would be that would be pretty amazing if we actually got some form of immigration reform and I think if Republicans and Democrats have to compromise maybe they can compromise or work an asylum and drop some other things or find some way to rationalize this or throw them a few smaller numbers on asylum and on other family unification and stuff like that but make the emphasis on work that would be huge and and what I don't like and what I think is awful right um is that um uh this this idea of the government deciding which jobs have acquired giving points to different jobs and different let the markets sort it out give them job applications uh Ken says that there's 70 million illegals here that is BS Goldman Sachs doesn't have such a study that names 70 million that the number it puts is 30 something million what's a what's her name in her book uh cites that number that number's been debunked many many times there's some way between 10 to 15 million illegal immigrants in the United States maybe the number's a little higher uh now given the the influx since COVID uh but it's it's it's far far it's it's got 70 million is just such a laughable just a laughable number and based on nothing based on no actual evidence of fact um all right let's see um yeah you remember the meme stocks well one of them Bed Bath and Beyond uh that uh uh you know went up to close to 40 dollars a share during January of uh 2021 um is just announced earnings yesterday earnings were disappointing there wasn't much expectation for earning and they were disappointing even given that um and uh Bed Bath and Beyond is is letting people know BBBY that it is probably uh filing for bankruptcy it will probably fall for bankruptcy this is I think it's going to be interesting to watch first of all it's trading now at a buck 89 last time I looked that was up a lot today after uh being pounded yesterday but uh buck uh so hopefully you listen to my advice and you sold uh Bed Bath and Beyond at uh when I told you to get out of meme stocks back in January uh 2021 they were disasters you can follow you can look up all the meme stocks and all the meme stocks are disasters this one is in particular a disaster um all right let's see um uh so uh the reason I think it's interesting is that so first if you want to buy stuff from Bed Bath and Beyond and you need supplies go there now and and stock up um although you know a lot of these companies survive bankruptcy bankruptcy it's just about restructuring it's not about shutting down every store and ending it um but in addition uh this is going to be interesting in the sense that um this might be the first right we've talked about uh we've talked about the fact that uh there is um gme is is not over that's true it could go down a lot more of what it's gone so far there's still a lot of downwards there's a lot of space downward and given the call icon has a big short position gme is probably going down quite a bit uh anyway Bed Bath and Beyond is interesting to watch because it could be the first of the zombie companies to go under um it could be I've seen other retailers other large retail chains that have announced that they might be filing for bankruptcy or that analysts thinks are going to go bankrupt this might be the beginning of what I've told you has been missing from the from the Fed right-hate rate hike god I can't talk anymore um and that as interest rates go up companies that have sustained themselves on debt at at very low interest rates will start seeing trouble and um and we'll start uh we'll start declining uh and and we will start seeing we'll start getting into trouble and paying off their debts and we'll really start seeing bankruptcies maybe Bed Bath and Beyond is kind of the canary in the coal mine in terms of recession and in terms of the the zombie companies uh filing and going under uh if if we see a significant increase in these kind of companies going bankrupt not just retail companies maybe some real estate companies um maybe some some other types of medium to small-sized businesses um then uh then what you will then then then we're heading towards a deeper recession not just a milder recession but a much deeper recession so this is something uh this is something it's worth uh you know you know this is something that's worth tracking with monitoring uh with keeping track of not not hard not hard to find the debunking of the Goldman Sachs uh you know just just google it you know the idea that I have at the back of my mind the exact reference to every an exact study all you have to do is look at Alex Nowitzki's uh research on immigration at the Cato Institute the the debunking has been thoroughly done on multiple fronts um look at Alex's website that I'll give you all the sources you need all the references you need I mean the myths about the destructive nature of immigration that's a that's a different issue there I would refer you to the work of Brian Kaplan who's done some excellent work on on immigration and the impact that they have but um yes I mean the Goldman Sachs study um I've read a number of papers that have debunked that and and and and argued why it's wrong uh google it google it if you think I have uh an encyclopedia of references in my mind then you're nuts you know and Ken what are you doing here I thought I thought we finally got rid of Ken but he seems to he seems to keep popping back with his uh with his uh imaginary fairytale facts and conspiracy theories all right working remote working remote obviously is a big deal and a big issue um much of the tech industry and much uh many other industries went remote starting in um during COVID and there was a lot of talk about this being the trend this being the thing and people are going to stay uh people are going to stay remote you know forever and and the reality is that um much you know a lot of companies have required people to come in uh there is a real battle going on between uh companies and their employees about remote work and not remote work New York midtown is slowly coming back as companies more and more companies in financial industry are demanding their employees come back to work uh today there was a story about disney disney uh uh inga the new the new return CEO of disney requiring people to come back to work and ending remote work the flip side of that is a lawn mask who had said that he doesn't believe in remote work he's gonna fire anybody who stays at home he wants everybody to come into the office uh is now allowing remote work in Seattle where in order to save money on rent they have shut down all their offices and therefore in Seattle you can work remotely for twitter uh but not in other not in other uh locations uh and that's because uh i don't know if you saw the stories but twitter's been having a hard time paying rent in san francisco and in other places and has decided shut down its office completely in um in seattle it'll be interesting to see how this evolves over time and uh and whether you know what and and whether this is uh this trend is is will sustain itself or not we will see how remote work lands up i think apple insisted on everybody coming into the office other companies have not but now we're also seeing a lot of layoffs and it'll be interesting to see uh companies preferring to layoff people who work remotely or people who come into the office the massive tech company layoffs another interesting trend a lot of those tech company tech people are leaving the tech companies and what they do instead is join um joining non-tech companies and tech roles a lot of companies need tech people a lot of companies need tech people programming is needed in almost every industry today and what's happening right now is i think a lot of these people are discovering that they don't have to work for a big tech company or a little tech company on startup there's actually jobs for them in banks and even the auto industry and in almost every industry uh that needs this and those jobs might be safer if that's what you're looking for so um interesting it's going to be interesting to watch the tech industry as well as this economic conditions continue as their stock prices continue to be hooding and and and to see to see uh uh where all those employees uh land up finally i'm sure you're all going to be relieved that the Biden administration is considering uh banning gas stoves those of you had gas stoves you might want to think about the cost of replacing them uh probably they'll ban only new gas stoves from being installed they won't ban existing ones but gas stoves kind of the the way in which most of us i think or many of us have used to to heat uh to eat food um are going to be banned and and why are they going to be banned um well because they're dangerous i mean a lot of you i think leave the gas on and forget to turn it off and then you blow up the house when you light a lighter match and you kill yourself um it's just it's just dangerous we just don't want people to do dangerous things and uh and uh we want to protect you from yourself we want to protect you from your own stupidity so expect the price of um cooking to go up one of the reasons gas stove is popular is that gas is cheaper natural gas is cheaper than electricity but it's always good to see our central planners and chief um our government out there trying to make sure that we don't kill ourselves and trying to protect us and help us and and uh and do good by us uh you know so uh i'm sure you know all of you are now relieved that the new home that you're buying will not have a gas stove thanks to the biden administration i i don't know what we're gonna do about movies i mean because so many action movies involve uh homes being blown up by the use of um by the use of uh you know uh gas stoves and leaving them leaked i mean i i can there are probably a dozen movies that have that so i'm not sure what the movies will do in the future they'll have to find a different way of dealing with it all right um let's see um michael yeah this is a newsy story and i thought michael was wrong initially but he turns out he's right uh at least impartially uh michael says great news you're wrong the house will be voting to abolish the income tax and irs they want to replace it with the sales tax it probably won't pass the senate override biden's veto at least it's a step in the right direction uh yes it turns out that um a bill will be introduced the fair tax act that will abolish the irs abolish all income taxes abolish all corporate taxes it'll also abolish let me let's be clear the wealth tax um let me see it basically abolish uh you know the wealth tax dividend tax capital gains taxes that abolish all those taxes and basically lever a national sales tax a consumption tax uh on the united states now this is this is in my view from a purely economic perspective this is ideal um it would it would you know it would be a huge step forward it would result in massive um uh you know massive economic progress and massive uh economic success it would it would change everything it would change everything um if this passed but let's be let's be a little bit of reality here a little bit of reality um this bill was first introduced in congress at the house in 1999 this bill has been voted on in the past by the house as far as i can tell and never passed the house in spite of republicans having majority after majority after majority in the house during the 2000s and during the 20 teens oh yeah it will abolish the list income taxes the death tax gift taxes payroll tax even social security tax many kid tax the uh you know and and and basically all taxes right uh and replace them with one tax yeah beautiful amazing i wish it could pass it's been bouncing around the house since 1999 it won't get out of committee if it gets out of committee and comes to our house vote uh i i'm willing to speculate that a majority you don't know well maybe not a majority of republicans but it won't pass a significant number of republicans will vote against it um and the only reason other republicans will vote for it is because they know it won't pass um there is exactly zero chance that it would pass the senate but i think the probability that a bill like this passes the house of representatives is less than 10 percent and um like all of my predictions i encourage you to come on the day after they vote and let me know i'm full of it right let me know i was wrong but on one condition that if it turns out i'm right please come on and say you're on you're right because nobody ever does that nobody ever acknowledges that when i write meme stocks trump losing the election uh you know all the other many many many many many many many predictions i've made that have turned out right and yet nobody actually comes out and says yeah all right anyway there you go um it's it's been on the books again this was first introduced by buddy Carter um it was introduced by um buddy Carter in this in this uh in this congress um he's from the georgia's first district it was first introduced in the u.s congress exactly the same bill um in 1999 by former georgia congressman john linda um and has never gone anyway so maybe what they've uh got a commitment to to bring it to the to the floor for a vote but the reality is that it will now pass on the leeway just said i'm right and gave me 20 that compensates for all the times everybody else did not say i'm right so uh thank you on the leeway i really really uh i really really appreciate it all right um so thank you michael um sorry i had this specific story early on because what did happen today is they did the republicans have voted in the house to cancel the increase in the irs's budget you remember they approved uh 80 billion dollars and uh to hire 87 000 new irs employees and um uh that passed the house today but the senate is not going to even vote on it and uh nothing's going to happen so this is this is the kind of ridiculous symbolism the ridiculous symbolism uh that uh that republicans do they come in they do something symbolic and they pat themselves on the back and when it comes to anything actual they can actually make a change make a difference they're completely wrong and they're complete disasters um yeah the other thing i was big time right was on uh ukraine which i called on the first day on on the first or second day of the war and it turned out on almost everything about ukraine to be absolutely right so that's the other thing thank you but thank you on the leeway you've kind of covered them all so i you know we don't we don't need specifics anymore uh adam thank you for the support really appreciate it um all right let's see um yeah oh and by the way of course they repealed the funding for the 87 000 new if we uh you know irs employees but i've already explained to you several times now there's no way in hell the irs can hire 87 000 employees they're just on the people aren't there um uh they the people aren't there the people have never been there uh they they can't hire them they can't they can barely replace the people retiring from the irs right now they i wouldn't be surprised at all if five years from now the irs workforce is actually smaller than is right now because of the the number of employees that are about to be retired um so uh so yes all right uh bradley says uh uh who's more masculine jobs are prudent how do you think masculinity and collectivism interact well the collectivists admire muscle and view masculinity from the perspective of muscle um you know this is if you look all you have to do is look at a communist and fascist sculpture and you can tell from communist and fascism everything everything you need to know about their view of a man their view of human beings they view man as as material to be molded they view man as just a physical entity with no mind uh and and and if you look if you compare that sculpture the communist and fascist sculpture to let's say 19th century sculpture of of of men masculine men right then what you will find is grotesque musculature and a mindlessness and a face that is that is always always always the same very little very little that distinguishes the individual as an individual and and that's the view of masculinity it's all about muscle it's all about bravado it's it's all about tate right it's all about fast cars beautiful women and lots of muscles sorry that's not masculinity that's bullshit that's that's a barbaric primitive collectivistic view of masculinity i think jobs is much more masculine jobs is a modern masculine man he is the epitome of smart um you know of confidence of self-esteem of of the ability to dominate dominate on a on a stage and and reflect his ideas and his passions his ability to change the world with words and in that sense in that sense uh putin is a you know putin is at the level of beasts and jobs that is at the level of human beings and uh you know so i believe jobs is much more masculine than uh than putin i don't consider putin masculine i consider him a brute a thug and i uh said that i've said that more than once in russia in st petersburg and in moscow to the horror of my audience who thought i should be careful um but the the self the self-confidence the self-esteem the calm command of an audience and then the ability to be in a sense ruthless in in in the business environment and and have his way um that is real you know that's what i think needs to be admired needs to be admired ashton is a time thank you for the fifty dollars that's great and thank you thank you and amina basically put us over our goal is it time for us objectivist that many manual content john john jacuzzo were right about reason and iron man was wrong no because they were not um they were not right about reason they were wrong about reason they still are wrong about reason they will always be wrong about reason and i think being up steve jobs is a good example of that and being up you know people you know who uh live by reason and history history shows us that cons and john jacuzzo were wrong it shows us because of the massive success of reason uh the massive success that reason has had in basically completely revolutionizing human life over since cons and john john jacuzzo have died that is uh since their heyday human life on planet earth has been dramatically and massively uh revolutionized standard of living quality of life life expectancy everything about human life has been changed and it's all being changed for the better by reason cons and john jacuzzo belong to an era before that revolution and they are the anti-revolutionaries they are the uh what do you call it the reactionaries who are trying to prevent that revolution from happening and to some extent ultimately they succeed they succeed in that um they have not allowed the reason revolution to win outright but uh they failed to um to prevent it from having a huge impact on our lives at the end of the day in spite of con winning the intellectual high ground in the culture con lost and uh you know we live we don't we live in it we don't really live in a content world not dominantly content um so no i i i i don't think i don't think uh imano account and john jacuzzo were right and of course we can't say it's time for us objectivist to admit because as soon as you admit imano account and jacuzzo were right about reason then you're not an objectivist so it's meaningless to call yourself an objectivist and therefore there's never a situation where objectivist have to admit this uh the only thing you could argue is that objectivist should admit that they're not objectivist anymore all right armin says i was watching one of your older videos that you briefly uh denoted plato's philosophy philosophies as being destructive could you elaborate oh my god that's a big question armin um you and you deserve a a systematic answer so here's the outline and then maybe ask me the same question on one of the longer shows so not on a show that's doing the news and therefore i'm committed to making it fast and quick and short um so yes plato is the enemy uh we talked about content who so but content who so could not be possible without plato plato is the enemy because plato like cons but plato does it well before cons um divorces human reason and human um senses from uh reality that is truth uh fact um uh reality really reality in a platonic universe in in according to platonist reality is is is is unknowable the real reality real reality is not what we see with our eyes it's just a it's just a poor reflection of the truth of what's really out there the world of forms that is in a different dimension and only philosophers can see that dimension the rest of us basically live in in a cave and have no access uh to the the real reality and and we can we can never have that access and as a consequence therefore we must be guided by philosopher kings who have access to that reality who can tell us about the truth but we can never discover it for ourselves because we don't have the tool that mystical revelatory tool to connect to reality uh itself to to to discover the world of form so in many respects uh platonism is the picosa to uh christianity which is a very neoplatonic and very detached from this world and very very much uh affiliate with the world of forms uh it is destructive epistemologically because it detaches the human mind and human reason from the evidence of the senses and from reality itself i think Aristotle went a long way to debunking Plato at least on on some important issues and on pointing us in the right direction in terms of where to go um but Plato himself is there's a great book on in that i highly recommend i've recommended before on the show but it's a really good book not written by an objectivist uh called the cave in the light which illustrates kind of western history from the perspective of Plato versus Aristotle and it's quite good i i think it's quite good and and and and we'll we'll say a lot about what i think the problems are with Plato there are many many many many many more problems with Plato Plato makes mysticism possible because he placed truth in a different dimension uh and and and that is destructive to human epistemology it's why the christians love Plato why they picked him up because he makes he legitimizes philosophically mysticism uh roland uh too bad you stopped reviewing songs uh now who am i going to annoy by making them review katie perry last Friday night you see you're just convincing me now that i made a good decision not to review songs not to you view songs anymore jeffrey millis says i'd like to switch on monthly contributions to be paid by check um okay we can do that um anything you want jeffrey maybe maybe what i should do is i should come to restaurant and pick the check up in person and you you could feed me while i'm there i think that would be that would be good all right michael says rules disconnected from facts of dogma and their attempt to use reason to justify dogma is rationalism um rules disconnected from facts of dogma yes and their attempt to use reason to justify dogma is rationalism yeah sounds sounds right oh don't do this michael what do you think of eric daniels did you see speech on defending capitalism from its defenders quite good uh you know i don't i have no interest in commenting on other objectivist intellectuals and giving you my opinion of them i've told you this a hundred times before don't ask me what do you think of um i like i i i i like this particular speech i like the work eric daniels does on capitalism so i'll say that i think i've heard this particular speech um and uh but uh you know but i've i've liked the work that eric has done on capitalism and his work on history is uh is quite good so uh i encourage people to seek it out and and listen to it um scott says you claim i want to work with the enemies but you've also said everyone is an enemy it's part of the issue that you're anti-correlation in practice yes i'm i'm anti-broad coalitions this is uh iron rand's iron rand was very specific about this and i agree with her you form coalitions only on specific issues uh like i'm willing to form a coalition with brian kaplan on the specific issue of immigration and trade right on on on those specific issues do i want to form a a political coalition with brian kaplan to take over the world no because he's an anarchist so i i i don't want that broader coalition i want it narrow on a particular issue um you know do am i willing to am i willing to join forces with some republicans to advocate for a fair tax sure am i willing to join a coalition with republicans to fight the left no because on on the broad sense republicans could be a man am i willing to join a coalition with the left in order to find for abortion rights some people on the left yes um absolutely there are certain people on the left i would form a coalition to fight for abortion rights or to fight for other specific rights so you on a particular issue you find the people you make clear that you disagree on other things and you fight but the fight on a broad political platform that is fighting with your that is working with your enemies and that is a sanction they do not deserve and it is moral treason to do so adam says from your military experience can 10 bodies challenge it twos make a difference in ukraine what's the superiority of a main battle tank over tracked fighting vehicles opinion on israeli converting mercava uh tanks to to tfvs tfvs are troop movers uh uh uh mercava was also a was always a dual function tank it could both act as a as a tank but it could also uh move troops so it had more space than a typical tank uh to actually carry small numbers of troops look um the whole question of of uh of the usefulness of tanks uh in in modern wef warfare is something that's heavily being debated right now um all over the place by military experts um i think it's way too soon i think it's way way too soon to um give up on tanks i think tanks are an important uh an important weapon by which to take ground and to take ground um fast and in overwhelming ways and a way in which to to to move uh ground troops uh forward that is the the tanks advance and clear the path for the ground troops that they always have i don't think it's the end of tank warfare i think it's the end of the soviet model the soviet model is don't you know the russian model is i don't give a i don't give one aota about my crew i don't care if they die i build tanks that are basically uh human traps um and and this i know you can argue with me about a lot of things but this i know from first hand experience with russian tanks russian tanks are death traps western tra- tanks are not western tra- tanks are amazing vehicles and in this sense a bit of challenge you choose i have no doubt uh uh amazing vehicles these are amazing weapon systems um they're up there with the german tags and the the american tanks and and the israeli milk cover um and um and uh you know they would make 10 tanks would make a big difference i think um and they are not death traps because so much of the thinking behind building these tanks and the making of these tanks is to protect the the crew inside and is to protect the tank from damage exactly the opposite of the thinking of the russians the russians and the soviet model is you throw numbers at the enemy you throw large numbers at the enemy and a bunch of them die who cares you can see that right now in the way russia is fighting in bakhmut which is just unbelievable uh the first of all it's unbelievable it's taking so many months to capture this little town uh given how much effort they're placing on it but second just the number of casualties just the casualties that they are taking here is just just unbelievable anyway uh i think modern modern western tanks um can make a huge difference um you know what ukraine needs right now is the ability to move fast i think uh 10 tanks can make a difference to them moving fast but remember the us is considering giving them uh troop movers germany is considering giving them tanks it's not just going to be 10 tanks it's going to be other tanks um and uh but if they do get these tanks if you do see these kind of weapon systems on the ground the russians just don't have a chance they really don't have a chance um and uh you know i don't think they'll get abram's tanks by the way one of the reasons i think the israelis are converting the mercavas into something different is the cost of updating the mercavas as new technology comes out um and it's in a sense cheaper to buy abram's tanks from the us and abram's tanks are really really good so they're probably the best in the world and and and and you know and the mercava was just expensive for the for the israelis to produce it turned out to be cheaper to bring it in um anyway that's my views for whatever it's worth on uh on the world of a tank and uh i've actually had tank trading it actually uh knows something about russian and american and israeli tanks uh but you can see them on the battlefield you can see how pathetic they are richard witzett bolton for president says he will beat trump for nomination due to the terminal decline in trump support i wouldn't run as a vanity candidate if it didn't if i didn't think i could run seriously and then wouldn't get in the race um i don't think john bolton has a chance in hell to win the republican nomination um so i don't think he has a chance i think i think trump would crush him would crush him sadly i mean i would take i would take bolton over trump any day in seconds um it's not even close but uh but i think trump would crush him i don't think i don't and i'm coming to conclusion as i said in my 2023 show that you know trump is a frontrunner and what happened in the house of representatives is just gonna just gonna solidify his um um you know his position um i don't know if you've seen but the russians russians have this a fifth generation fighter the su i figure i forget the exact number um it's it's a fifth generation fighter they're afraid of flying it over ukraine because they're afraid of having a shutdown so it's it does not do missions over ukraine it basically flies in russian airspace and fires its missiles from there um that's the level of confidence that the russians have in their most advanced weapon systems uh they ask you 57 i thought it was 57 but i didn't want to say if i was going to be wrong um you know and um yeah i mean if it had to go up against the the the the american stealth fighters forget about it i mean russian weapon systems are have always been an are worse than pathetic uh and uh that that is equivalent to the masculinity of prudent all right michael says the religious right is like skynet in terminator three they claim they must have full control to stop the virus of the left uh when skynet religion is the only effective virus at play all right uh paul says i watch your earlier show about predictions for 2023 i was curious about your opinion on whether iran will attack israel vichy's ballat that devote attention for problems at home i don't think so yet because i think they're too weak they're they're trying um they're trying i also think that right now the russians are holding them back um they they they're not in a strong enough position in lebanon and syria to do it um so i i don't think so i don't think it's going to happen anytime soon um i think also remember a lot of their strategy around attacking the israel and saudi arabia has to do with drones right now all their drones are going to russia russia's sucking up all the drones that the iranians can make um and uh so i don't i don't think but things in the middle east can change very very quickly but uh you know then they're not quite where they want to be i think they the iranians were hoping to be better established in syria so that they could um have a two front war against israel and could be in a much better position supply weapons to khizballah now and khizballahs had opportunities to attack israel they threatened to attack israel and they've not done it in the last few months and i think again the reason for that is they just are not confident also i think khizballah's position in lebanon is weakened because of the the crisis in lebanon and as a consequence of the weakening position in lebanon um uh i i think they are wary of turning the lebanese against them if israel you know uh uh damages lebanon because that's what israel has done in the past that the lebanese uh you know and then the lebanese turned against khizballah for causing a broader war michael says his ideas are worse with so with his view of man is born good and society is evil um well civilization is evil or harbs with his view that man is born evil and needs to be controlled whose ideas are more prevalent today i think who's so i think who's so is that is dominant uh i think harbors is not very original far harbors is basically christianity so there's nothing um uh nothing particularly um uh really that influential but i think i think who's so is dominant dominant on the left and in the entire environmentalist movement but also if you remember my shows on the black lives matter you could see who's so all over the place the defund the police is is a who's so in it's a policy inspired by who's so the police cause crime they don't prevent crime that's straight out of who's so so on the left who's so is dominated all right thank you guys really appreciate it appreciate us exceeding our target again today amen um save that question also for a for one of our philosophers when i have an interview with the philosopher ask about play dough and and and uh what about play dough that makes him as bad as i argue he is tom thank you really appreciate the support from all of you i will see you all tonight 7 p.m east coast time not sure yet exactly what the topic will be but i'll be i'll be putting it up online in soon so keep track of that regular show tonight 7 p.m east coast time


Four foreign electricians engaged in maintenance works for the Tokyo Olympic Games having arrested by the Tokyo Metropolitan Police for allegedly using cocaine. A public broadcaster NHK said the four men identified as American and English denied charges but analyzers of their urine, analysis of their urine gave a positive result for cocaine. An NHK said the four workers were drinking at a bar in Tokyo's Roppongi District earlier this month when one of them allegedly broke into an apartment after leaving the bar, which led police to question him and subsequent urine tests. The games postponed from last year because of the pandemic will run from July 23 to August 8. Hello, hope you enjoyed the news. Please do subscribe to our YouTube channel and don't forget to hit the notification button so you get notified about fresh news updates.


39 slides in approximately 45 minutes to do this in. So this is gonna be an adventure for all of us. If you have any questions at the end, I won't have time, so come find me afterward and I will gladly answer any questions that you might have. My name is Adam Cuppey. I am from Taiwan. No, I'm from the United States. I'm from San Diego, California specifically. I founded this company, we're a consultancy and we do web and mobile applications. In this talk, our spec design patterns came from dealing with a lot of different organizations where when we came into the code base and we would run the test suite, we found that they were really large and really cumbersome and really problematic. So this talk is specifically about that. Now before we get too far, you can find me on the interwebs. I am on GitHub at A-Cuppey and then you can find me on Twitter at Adam Cuppey and right now what I would like all of you to do who have a Twitter account, I would like you to tweet at me right now and tell me how amazing I'm doing. Okay, now that that's out of the way, moving on to better and gooder things. So the slides are not up there yet but they will be on speaker deck right after directly following this so you'll be able to get all the information. Of course it's on Comfreaks. Big shout out to Comfreaks by the way. Can we hear it for Comfreaks? Just for recording all of these. Yes. Big win, you can get tons of videos there and you can see all of these ramblings later. Okay, so RSpec, that's really what we're talking about. So RSpec for those of you who don't know, it was started in 2005 as an experiment. RSpec specifically focuses on behavior-driven development. So this is how the user or the, how to describe the functions of the application. Now RSpec has what's known as a declarative DSL. In other words, like as I define the function of something, I am going to leave the implementation within the scope of the application itself but being declarative I'm going to express or explain what specifically is happening inside of the app. Now here's the problem is oftentimes our test suite becomes a second class citizen, right? And what I mean by that is that when we build our applications, the application code that we write is often focused mostly on what the user is going to see or experience. The test code however, is this me? Hello, hello, how are you? The test code however, solver, the test code however generally comes after the fact for most organizations. And similar to that, the test code often becomes really cumbersome because we wanna make sure that there's good test coverage however when it comes to the actual performance of our application it rarely equates to either good or bad performance directly, right? So again, our test suite becomes a second class citizen. It's not the primary focus of our effort. However, it becomes really tough, really fast. Now, how many of you in the code that you write write tests? Raise your hand if you write tests for your code. No, how many, keep your hand up if you're lying right now. And there's some, when I said how many of you write tests they're like no. Oh yeah, yeah, I remember it just, right, totally. Yeah, so most organizations require, how many of the, either organizations or the code you write now require tests? Like you have to have tests written for your code. Okay, so that's interesting. Is that normally when I ask that question most people raise their hand saying they are required to have tests for their test, or for their code. So the fact that many of you don't is very interesting to me. Now, it is. The next thing is that oftentimes the tests are, and this is really the biggest problem, is that the tests are really hard to understand. Now, as an example, one of the companies we work with, they have a user model that is 6,000 lines of code, and a test for a user spec for that same model of 9,000 plus lines of code. 9,000 lines of code. When we did sort of an analysis of that to determine how often they were repeating themselves, in certain instances they were almost literally testing the same method almost a dozen times, in effect the same way. But because the test was so large, parsing that, determining what inside of that was already being tested was very, very tough. So that became a very big problem that they had to solve. Well, what do you do when your test is that large, that cumbersome, and that problematic? That's really the focus of this. So this talk is called Taming Chaotic Specs, and more specifically our spec design patterns. So this is what this is not. This is not what to test, that's not what this talk is about. There's some really great resources on what you should be testing inside your test suite. This is more specifically the patterns and practices that you can follow, suggestions, when structuring the tests themselves. So this is the design pattern of the test suite. Now, speaking of what a design pattern would be, just to set expectation as to what I'm defining it as, is first and foremost, it communicates expectation. So the design pattern, if I follow the pattern as written, I should understand, when I follow that a second time, what is gonna be communicated by doing it. Or similarly, if I'm looking at it and I know what pattern is there, I can probably derive and guess as to what the rest of the code is gonna look like. The next is that it encourages consistency. And this is hugely valuable, especially when it comes to like a 9,000 line spec, is when there's consistency amongst the code base, that I have a strong sense for what patterns are being used and what to expect and where to look and find and parse things. And the last is it reduces the mental load. How many of you raise your hand if you have looked at a test suite and immediately wanted to flip a desk? Absolutely, raise your hand. We all know that you've done it. We all know. Yeah, we've all wanted to flip a desk, right?  We wanna do this as much as possible. So I'm gonna talk about our first pattern. The first is called the minimum valid object. And if you're taking notes, there's a lot of stuff in here, but feel free to take notes. I'm gonna put all this stuff online, but I'm gonna walk you through this pretty darn fast. So the MBO workflow looks like this. The first is that you start with a quote valid object. Now inside of Rails specifically, there is the concept of what is a valid model. But a valid object, whether in Rails or just straight in Ruby, is whatever you define inside the domain. So you could say a valid object is something with a username. You could say a valid object has these attributes assigned. However you define that is perfectly fine, but the workflow starts with a quote valid object. The second step is that you make one specific change. So one mutation of an attribute on that object. And the last is you assert that the valid object is now invalid, right? So you say, I've got a valid object. I know it's valid based on certain criteria. I'm going to change one specific or very few specific attributes of that object. And then I'm gonna assert that it's now invalid, right? So that's the minimum valid object workflow, this pattern. Okay, so we'll start here and say, let's say inside our Rails application, we have this user model. And the user model's really, it has some class methods being called on it, but for the most part, the biggest chunk we're gonna focus on is the validations right here, right? So we've got validates the presence of a first name, the length of it, middle name, last name, email, and in a certain format, so on and so forth. We've seen this many times before, right? Now, here's our test suite. So we've opened up our tests, our user spec, and it looks something like this. And we say, well, we're gonna describe the user and we're gonna run our first assertion, set of assertions, and it's gonna say, well, it should be invalid, that's very descriptive. And we say, okay, well, we're gonna create a user and the user's gonna have this really, really super long first name because if we look back, we say, see the length has to be between four and 20 characters. So we're like super, really super long first name and then we're gonna see that the valid object is now not true, okay? And then down below, we're gonna do it again, right? We're gonna say the short version, right? Because again, it's either between four and 20 characters and in the first one, we're more than 20 and the second one, we're only three characters. So it's really short. So we're testing both inside the first thing. Now we run our tests and it passes, right? This is fantastic, it passes. But is it actually accurate? No, it's totally broken, right? This is a false positive. And oftentimes when we look inside of our tests, we're gonna notice this pretty quickly that we're gonna have a lot of false positives inside of our code. Well, what is false positive? What is the false positive? Well, if we look at when we factory up our user, right here, okay, and we create where the first name is really, really long, it is invalid, right? Because the first name is really, really long. But if we look back at our validations, the first validation, yes, is invalid, but the thing is is that all the other validations are failing too, right? This is the false positive. That even though what we think we're testing, although it might be functional in terms, or although it might be invalid, in fact is not determining that all the rest of it is also invalid. So we actually have a broken test, right? So if we look back at this again and we say, okay, what's really the problem here? Well, the problem is that we're not communicating enough, right? We're just, we have this kind of like blanket, sort of like crummy description, like it should be invalid, well, what should be invalid? We don't explain or express any of that, right? One of the objectives of your test suite should be that when you run it, or when you read it, it should tell you, it should help you rationalize and reason about the code itself, the implementation. That's the whole idea of being declarative, is that if I declare a certain set of criteria and a certain set of functions, it should come out the other end meeting that criteria, right? So if we see these two highlighted chunks, we say it just should be invalid, doesn't say why. And the second one is we've got this incredibly confusing sort of expectation, so it just is saying that it should be invalid, okay? So we'll start with this. So let's refactor this test a little bit. So we're gonna just start looking at the top and say, well, first and foremost, we're gonna describe our user object, right? And we're gonna use that. And the next thing we're gonna do is we're gonna take advantage of an RSpec method called subject. Now, raise your hand if you've heard of subject before or used subject before in a test, okay? So what subject does is it defines what is the focal point, what is the object that we are going to start to describe, okay? Now if you do not include this line right here, RSpec will automatically run effectively describe class dot new on the user model. It will just do that automatically. If you do not define this line, it effectively is going to just automatically generate that line right there, okay? But I like to define it for a couple of reasons. First and foremost is it communicates what it is that we're trying to test, okay? And more specifically, always name the subject. Most people don't realize you can do that, right? Most developers don't know that you can actually pass the first argument in there and say, well, this is what this is. The goal of the test suite is to communicate those things. So let's communicate what it is that we're testing and specifically that we're gonna describe the new class itself, okay? So we're gonna align these two. If you didn't know the user and describe class, describe class is a method that is built into RSpec itself. You can use it or not, but it's really helpful because describe class will reference the user object itself that's being passed into describe. And then we're also going to match the name down below, right? So we have three instances or three named instances of the same thing. This is very important, right? So we're communicating what the domain model looks like very quickly, right? Now we've got this. Now when we look down into our test itself, we've got these two very different assertions all being tested inside the same spot, right? So we're just saying it should be invalid and then we're gonna run this expectation in the same block, expectation block is the one down below it, right? Well, one is the long name and one is the short name but it's in the same expectation block. So if one fails and the other passes, they both fail, right? So we don't wanna do that. We wanna clean this up quite a bit more, right? So if we go back to what we've been refactoring, okay? And we add in a couple of contexts, right? Now the first context is with a first name that is over 20 characters, right? So this is testing the validation where it's too long, right? We're describing what it is that the function is and down below we're gonna do another context is with a first name that is under four characters, right? So we're not saying whether or not yet whether or not it passes or not. We're just gonna describe what's going on, okay? So this is what our test is starting to look like. Then what we're gonna do is we're gonna move into, we're gonna establish a let, okay? We're gonna establish a variable, a value that we're gonna then pass into our subject, right? So it's gonna end up looking something like this, right? Now I'm gonna go over the value of using let over instance variables in a little bit as a practice, okay, but this is part of the value in doing that. You can do this with instance variables, but I find it to be a lot easier otherwise. So this is the mutations we're gonna make, right? We're gonna say on my subject, which has a user as a first name, we're gonna define the first name and in the first context of over 20 characters, we're gonna define what first name looks like and in the context with under four characters, we're gonna do the same, right? We're gonna communicate what the expectation looks like. Now we've basically cleared off and refactored those three lines right there, which only leaves us with these two right here that we wanna change. We wanna make these a little bit more clear. Now there's a bunch of problems with this and if we look at this, this is the reason why the reasoning about this is really tough, right? Because this is what we end up with. We say expect user.valid to not equal true. In other words, we're saying is true not true? Make sense? Raise your hand if that makes sense. Don't raise your hand, okay. All right, so this doesn't work either. Well most, you might not know this, but our spec has support for predicate magic methods. In other words, if you have a method on the user object that ends in a question mark set like this, so user.valid, okay, you can write an expectation that looks like this, right? Where automatically it's going to take the ending, the method being called B underscore and then whatever that is and it's gonna, it's going to assume that that word right there aligns to a predicate method on the model, right? So this is valid, okay? You could also have something like this, right? It doesn't matter what the method is, okay? User is writing a monkey, okay? And you can just append it with or prepend it with B underscore and it will run that predicate method, okay? So what that means is that we can then refactor slightly to this, getting a little bit better, right? So expect user to not be valid, but we still really haven't solved our problem yet, right? We're still saying the true is not true, right? So we haven't solved anything. Well, we're in luck because Rails specifically has support for an inverted version of valid, which is invalid. Now this may not be the case in the library you're using. You may wanna write either a custom matcher for this or if there is a method on it, great, but we're just gonna use this as helpful. And as a result of that, we can get really, really clear. The expectation becomes really obvious, really fast. Now when our spec runs and it exports a formatted value at the end, it's actually gonna read all of this and properly format it so that as you read the code, once it's run, if it fails, it's gonna be really easy to understand, okay? So we've gone from true is not true to is this true, right? Is the user invalid? Make sense? Fantastic, okay. So moving along the lines here, okay? We're gonna check and see, well, have we, now that we've added in our expect user to be invalid, now we've injected those, have we eliminated the false positive? And the answer is no, we haven't yet. This is where a minimum valid object pattern comes into play because we haven't actually implemented that yet. We're just simply cleaning up our tests, right? So if we go back here, we're gonna inject a little code at the very top of the test and this is the pattern and this is how you use it. The first and foremost at the very top, you wanna establish what a valid object looks like. This is essential, right? Because again, as the test gets super long, that's okay. Because the goal of which is we wanna know at the very top, this is going to help define what is a valid object? What are the attributes and things that I can mutate on that object? And therefore, as I build out the context down below, I've got some structure to that. So if I need to add another test to the bottom, that's fine, I can follow the same pattern and I'll have some sense of expectation that this is gonna work out, right? So we're gonna set up the default first name and we'll just use my own name because it's an amazing name at that. And then we're just gonna assume it's validity, right? We're gonna test that from the very beginning. So if we run this test and the very first expectation to fail is the very first one, we know that all the ones down below it are less valuable. So we need to fix that very first state. We need to know that that is valid as it sits at that moment, right? So that if that is now valid, when we make the mutations down below and they pass, we know that we're actually testing whether or not this first name is the thing that's changing that validation. Make sense? Fantastic. So did we fix the false positive? Yes, we did, okay? We did at this point, right? Now, there's a little bit of magic that can happen inside of here, which is, and use it or don't, some people love it, some people hate it, that's okay. But in our spec, there's some helpers to make this a little bit more simple, where if you look at just the difference, right? If your subject up above is effectively, if you're doing this over and over and over again, you can use a quick method called is expected. Sometimes I use it, sometimes I don't. It's totally up to you, but sometimes it can just help this read a lot better. So it is expected to be valid. So the first thing we're gonna do as we build this whole thing out, right, is we're gonna build the subject. That's number one, okay? So we've factored up our user object. We've passed in all the attributes that matter. We've set the configuration variables. In other words, these are the attributes that we can change, and more specifically, as we read it. So if I built this test out, and you come into my test suite and you read these, you know these are valid values, right? You can assert that right away, and then we're gonna assert that it's in a valid state. Now, when we change the first name, it's gonna map up to the subject line at the bottom, so that's the mutation, and we're good. So this is a fully incomplete spec at this point. Now, pretty quickly, you can see how we can truncate the spec really fast. We could take a 9,000 line spec, probably down to a lot less than 9,000 lines. I know that much. Pretty fast, okay? So this is one, minimum valid object. Pattern number one. Pattern number two is permutation tables. So here's what the workflow looks like. First thing is, you define a set of data. You define the output of each set, and then you assert that the method creates the output from the data, input output. So I put this input into the method, this output comes out, and I should see that. So let's look back at our user model for, this is our example. So looking back at our user model, we've got a method that effectively concatenates all of the various name segments, right? So we've got first, middle name, and last name. Those are the different name segments. If any of those are nil, then it's gonna strip it out, and then it's just gonna join them together with a space in between, right? So this is the implementation of our method. Now if we were to write tests for this, it may end up looking something like this, right? Where first and foremost, we're going to define a full name, and I wanna just, I'll just hone in on this for a minute, is that again, we're gonna follow the same pattern. So we're gonna describe the full name method. We're gonna set the subject to full name, and we're actually gonna call the method. Now most of the time, the subject is reserved for an object to be returned. You don't have to do that. In fact, this can be really, really helpful, but it's really essential that you define that you align these three, right? That when you say what you're describing, that it's the same as the method being described as well as the name of the subject. Make sure that all three are the same. If you don't do that, it breaks apart fast. The communication goes down, okay? So as we build out our spec, right, we start to just add in these various permutations, right? So in the first one, we're gonna say if the name, if the first name is nil, then it's expected to equal the last name, right? And similarly, if the last name is nil, then it's expected to equal the first name, right? And it just keeps going down the list. Well, then the question becomes, well, is anything missing? Now, raise your hand if you've ever seen specs look like this, where you have one or two values that are changing, okay, and you write all of these various, like assertions that test that same thing, yeah. Okay, so the reason this is why we saw 9,000 line spec was because they had in that user model, which they shouldn't have had in the first place, but they did, they had a big authentication model. And the authentication model tested, well, do they have, if this value is there and that value is there, then it should equal this. Well, if the first value is there and the second model's not there, value's not there, then it should equal that. And it just ran into this big issue where there were all these permutations, all these variations to the same thing. And they were trying to test them all at once. And as a result of that, they were testing the same methods on the same object multiple times because they couldn't keep track. So the permutation tables is a pattern that you can use to be able to prevent all of that. But it comes down to this kind of core question, well, am I missing anything? Well, let's look at this a little differently. And the answer is yes, we're missing a lot of different variations, but we can fix this really fast. So if we look at this first example, we've got a couple of problems. The first is, if the first name is nil, then it's expected to equal the last name. Well, we don't know why, it just says that it is. We don't know whether, we don't know why that's true. Well, if what we do is we first build this into a hash. So this is our data set. Remember, the first step is to create a set of data. So if what we do is we have this very basic hash, where the key in the hash is the set, so nil is the first name, the middle name is James, the last name is Johnson, and then we say that should equal a full name. So this is the set, that's the expected output. Well, if we take all the examples we had from the last model and we plop them into here, then we can pretty easily see and follow what things are missing. So can we see if anything's missing? Well, yeah, we're missing about three different options. Well, it's pretty easy to determine what those are, right? Fixes a test pretty darn quick. So now we can scan through this and say, okay, well, we've got all the variations where first name exists and when it doesn't, so on and so forth, right? It's really easy to track. This is the input, that is the output, simple enough. Now, what we'll do next is we're gonna basically iterate through each of these sets, right? We're gonna get a name set, that's our data. We're gonna get an output, that's the value in the hash, okay? And we're gonna move this, and this is an option which is into a shared example. How many, raise your hand if you've used a shared example before. Okay, so a shared example is very similar to a mix-in, okay, it's very similar. You can in fact use a mix-in in place of this. You don't have to use a shared example. But basically what it does is it allows you to define common sets of expectations, okay? Without having to duplicate yourself, right? So if we go back, we'll go back a little bit to this example. We're running the same type of expectation over and over and over again, right? It's all very common, it's all very much the same. Well, a shared example is a way to, we'll go back. There we go. A shared example is a way to make, to dry all of that up. So basically we're gonna say, well, in our shared example, okay, actually we'll start down here, we're gonna say it behaves like, which is a method inside of our spec. We're gonna say it behaves like a full name. And the first thing we're gonna pass it as the name set, the second argument we're gonna pass it as the output. Well, it comes in in the form of a block. So the first thing is, is the first, middle, and last name, okay? And then the output. So we're gonna say the subject is a full name and we're gonna run our common method. We're gonna set these three different attributes as the first, middle, and last name. And we're gonna say that it matches the output, right? This is our shared example. So that took the entirety of that spec and truncated it down to this. Now what happens if we wanna add in a fourth argument, right? So we've got three different name types. What if we wanna add in a fourth? Okay, fine. Then you just do that, you add to the table and you're done. You don't have to do anything else, right? So if you are building out a test suite, this is logic that you no longer have to change. You're simply saying, okay, I've got values, I've got data and I have an expected output. I just wanna line the two up, okay? Solved. Boom, all right, permutation tables. Number two, all right. And number three, golden master. So golden master testing is broken up into these, or it actually solves these problems. Okay, the first is, drink of water, for the win. Okay, the first thing is, is golden master testing can be a great way to backfill untested legacy code. Number two is it can be really valuable when it's uncertain what the expectations, or when uncertain expectations require visual confirmation. In other words, when the output is kind of complicated and hard to parse. And so oftentimes what I have seen in this is, like JSON payloads that come back, right? So JSON payload, and then we have to like, we parse the JSON to determine, is this key with, exist with this value, and nested three, it's just very complicated to visually parse. Well, a golden master test can help address that. The next is that the code complexity is significantly exceeds the current domain knowledge. In other words, if the code is so complicated that it's really hard to reason about, it's really hard to express in that manner, then a gold master test is a really simple way to expedite that because at the end of the day, it may just simply be a matter of, well, when I put these values in, do I get this type of output? If I get this type of output, it's good, right? Or if the JSON payload is really complicated, that's okay. I just need to know that they're the same, right? How many of you have opened up a test suite and seen something like this? Anybody? Yeah, absolutely. These are the worst. I kill people for this. No, this is the worst stuff, right? You get through and it just says pending across, and you're like, thank you for the help, die. Okay. So here's how the gold master testing workflow works. The first thing is it takes a snapshot of the object and it actually snapshots the object and it puts it into a file, an actual file in the system, right? Then what happens is you verify the snapshot manually, literally you view the file, open the file, look through it and say yes, that's exactly what I should be expecting, okay? Visual testing, right? And then the last is that from that point forward, you compare future versions to the master, the verified master. So what it would look like is it would be okay, here's my object, I'm gonna snapshot it, it prints it to a file. I open up the file and go yes, that output is exactly what I'm looking for. Save that, record that, okay? Then every time you run the test in the future, compare the output to that file's output. If they're the same, passes. If it's not the same, doesn't pass, and ask me to verify it again, okay? And if it might be better, new, whatever, it happens to be. Well, instead of going through how we implement this, I'm actually gonna tell you about Katrina Owen's amazing gem called Approvals. And you can find it here at catrics slash approvals.  You don't have to reinvent the wheel with this, all right? But here's how to implement that utilizing her gem. So again, the code samples you're about to see are a combination of our spec and also the approval's gem. All right? So here's an example of it. I love this description, it works. Okay, it's very helpful, apparently, okay. So this comes directly from the documentation, but oh, we'll go back. So the first thing is you'll notice that there is now a method that takes a block that works inside the expectation, right? So inside of this assertion block that is called verify, right? And it passes and you can pass in a format and say, okay, this is the type of data you're gonna get out of that file. And then there is an option where you could actually pass in some, a string of information. You don't have to, but you can. This is one of many examples on how you would do this, okay? Then what you do is you CD into the app itself and there is a CLI for approvals that you can then go through and manually verify. And this is the process where I said you visually test the file and say, yes, that's exactly what I should expect and it's verified, boom, okay, and move on. So you run through this process and you manually verify the snapshots, okay? Now, this is not a good, in my opinion, this is not a good practice for large applications where you have a lot of snapshots that you have to verify. This is a great practice where you have a couple of isolated examples, a couple of specific things that need this type of testing. If you're doing this type of testing all the way through your test suite, it probably is a smell, a code smell, that something's not right in the way in which your test and your code is implemented. This should be done in a very isolated capacity. I'm gonna go over some best practices. Now, I know that many of you may not like the term best practices, so we'll call them better practices. But sometimes they're not really better so they're just good but not required practices, which isn't really it, but we'll just call them other ways of doing things and what might be helpful ideas. So these are just other ways of doing things and why it might be helpful ideas. The first one is let, the use of let and not instance variables. This is another way of doing things but not a requirement, but I'll show you why. So let's look at this example right here of code. So we have this instance variable that sets a value called full name, right? And we have an expectation that runs that expects that the full name is to equal Adam Cuppey. But when it runs, we get this issue, which is that Adam Cuppey, it expected Adam Cuppey but got nil.  I've got first name, middle name, last name, concat, what the heck's going on? Oh, maybe it's the values that are being said. But you fail to recognize that it's actually spelled wrong, okay? This is one of the biggest problems and one of the biggest reasons why I highly recommend to utilize let instead of instance variables because even though a test suite running quickly is of great, great value, at the same time as if it takes more time to parse through a test suite to use it and you spend more time trying to debug the test suite, it doesn't matter how fast it could run another way.  Right?  If you're not using them, I've heard the arguments, I've implemented the arguments against it and I've found consistently that this is not a long-term solution, right? Because if you do run it as a let, it actually creates a method that can then be used so when you've spelled it wrong, you'll get this error instead. It's a heck of a lot easier to debug. In other words, you're spending less time in your test suite and more time writing better code. So this is the value of let, okay? There's many other values but this is the primary, the one that stands out the most in my mind, okay? Now the next is being descriptive in your naming. So how many times have you seen something like this, right? Where the first one we've got, user one is to be valid, user two is to be invalid, okay? The first one's passing, the second one's failing, okay? And we ask ourselves, well, what is wrong about them? And then you've gotta dive back into the test suite and figure out like, okay, when I factory up user one against user two, when I factory up user one, it looks like this, when I factory up user two, it looks like that. Like you've gotta determine all that reason. However, if we describe it a little differently, you at least have a starting place, right? So if I say user is to be valid and then I say expect user with duplicate email to be invalid but it's not, I at least know where to start. This is the value of descriptive naming. Now if you feel that shorter methods run much faster, cool, I appreciate that but you might be wrong, okay? Sometimes this is a very valuable way to do that. So when we look at our test suite and we end up with something like this, right? Where we've got our user, where again, we're utilizing subject with the user, we've got an email, we're passing it in there, we expect it to be valid. Now I know that this is not a fully flushed out model, I get it, but just bear with me, this is for the sake of example and demonstration, not accuracy, I know. And then when we define a new user with a duplicate email and we use the one before it, then when we run and expect this to be invalid, it's really easy to reason and understand about. Yeah? Fantastic, okay. The next thing we're gonna talk about very briefly is extracting common expectations, right? So being able to build in there is, our spec has great support for this. Ruby itself has a lot of support for this and so you can do all of the same things inside of test unit. All of the things I'm talking about can be done in test unit. So if you utilize that, all the same patterns apply. You don't have to be using our spec, but our spec was a buzzword that I knew would draw people to a talk. Just kidding. So the first is custom matchers. So you might not know this, but it's actually really easy to design a custom matcher, right? Our spec has a class that you can tap into to define one. I have heard many times that this is gonna be deprecated, but regardless, it still illustrates the point that if you would like to define a custom expected to have a custom value or a custom type of matcher, if you're writing the same logic to test that thing over and over and over again, then maybe writing a custom matcher for that will help make this a lot easier, right? One of the most horrible experiences is when you're going through a test suite and the logic is the same, so it's not very dry. You change the logic that tests one thing, but don't for another. Those tests begin to fail or even worse off, they continue to pass and you don't know where or how to look, right? This is directly out of the documentation by the way, so here's a link to that. But again, custom matchers might help that out. The next is to think about factories over fixtures. So you may have already heard about this. This is used all over the place and that is Factory Girl is a great gem built by Thoughtbot. There's many others like it, so it doesn't have to be Factory Girl, the conventions are the same. You've seen throughout the examples today the use of user directly, so we're calling this directly. In the previous examples I was using described class, but it's one and the same. But what you can do is actually utilize Factory Girl to build an object. Now, the value of this is a couple of different things. The first is that you can lint these objects. So the minimum valid object pattern actually came from utilizing Factory Girl and specifically realizing that Factory Girl is built around the idea that a factory, when you factory up an object like a user, it should represent a valid object and only a valid object. It should not be more than that. When you add more to that, then you would utilize in Factory Girl the notion of a trait, right? So these are additional traits of that thing. So as an example, let's say you have a user and then you have an admin user. A traditional user is just a valid everyday user. An admin user has the admin attribute set to true. Let's use that as an example. Well, you can have both. The fine and factory girl is really easy. But when you run Factory Girl lint, it will go through and run all of your factories and make sure that they all work. And if they all work and factory up a valid object, then actually you can expedite the entire process. And in the MBO example I was giving before, you don't even need the valid true part anymore. Once it builds the subject, it will actually tell you right off the bat whether or not it's valid. Pretty darn helpful. And again, you can find us at Factory Girl. All right, closing up, because I'm running out of time a little bit here, is here's a bunch of things that you can resources to read. Again, I'm gonna include all of this. So, one of them is betterspecs.org. Not all of the principles in betterspecs.org I agree with. However, many of them are a great starting point. So, if you're not familiar with some of the practices in terms of how to structure and utilize our spec and the kind of conventions that are done inside of it, this one is really great as a good starting point. And if you follow these, you're gonna end up in a good spot. The next one is actually a blog post, a set of blog posts written by Randy Coleman. And there's a category, and he wrote I think 14 posts called Getting Testy. And it goes into not just how to structure tests, but more importantly, excuse me, the many things that you can write inside of your tests. So, the added value to this is, he's actually a member of our team, right? So that's pretty cool. But bottom line is, even if he wasn't, he actually is incredible at describing and expressing how to structure these things. This is a blog post series that you should absolutely go through. It's incredibly valuable and incredibly well-written in structure. And of course, I'm proud to have him as a team member. It's pretty great. The last is, if you have not read it, practical object oriented design in Ruby, phenomenal book. Raise your hand if you have not read this book. Okay, this is a required reading. You have homework now, okay? This is absolutely an essential reading for anybody that wants to write really quality code. This book is incredible. This is well worth it, hands down. All right, so there you have it. There's everything. Again, oh, and of course, we're online at codingzeal.com. We are a consultancy. So if anybody is looking for extra help, by all means, let me know. But I am a total resource. You can find me on Twitter. You can find me on Facebook. You can find me just about anywhere. I'm more than happy to answer questions. I'll be here the rest of the week. And plus, so, I am available to you. Tweet at me, do whatever you like, all right? All right, thank you very much. That's the end of that talk for the day. I'm gonna give myself a hand.


The CTS Personas Project aimed to develop 12 evidence-based profiles of roles across the translational workforce and two patients. These profiles were designed to illustrate the key responsibilities, motivations, goals, software use, pain points and professional development needs of individuals working in various areas of translational research such as basic science, clinical research and public health. The project also sought to identify potential challenges and successes associated with creating these profiles. The resulting persona profiles can be used to inform software development projects, educational resources and communication initiatives. Additionally, this paper provides insight into the process of developing persona profiles, including the methodology, engagement strategy and lessons learned. This article was offered by Sara Gonzalez, Lisa O'Keefe, Karen Gutsman and others.


He got killed. Aaron, obviously, not the end result you would have liked, but you got two arms back. What did you think of Montgomery? I thought Manny looked pretty good. I thought his breaking ball wasn't real sharp, although I thought he finished strong with it. I thought he threw some good ones, took to Les in a second and he'll work. But struggled getting the bite on that pitch his first several times with it. I thought he flashed some good change ups. I thought the arm speed was good and threw some good fastball. So got hit around a little bit, but I thought another good step for him and saw some good things. I was going to say, what do you take away from his outing and then what's next for him? That's a long road back. And this is a young man and a guy that's already had success at the big league level and when you have a major injury and all the hard work that goes into getting back. For him to put himself in this position to get out there this final month, a lot of credit goes to Monty. And I thought he went out and threw the ball pretty well. Again, just not real sharp with his breaking ball and that hurt him a little bit. Do you like what you saw from Potensis? I did, man. Really good. His first time pitching after just one day off. So that's why I obviously went a little shorter with him, just the two hitters. But stayed in his delivery, didn't try and overdo anything. Obviously showed command. I said, you're a command guy now. And it was really good to see him compound the strike zone, how he wanted to. And again, another step for him as well. Like he forgot there were only two outs, not three in the inning. Did you guys give him a hard time about that? Dylan? Yeah, he did another one. He thought he was out of the inning. Oh, he did. I didn't even notice that. Because I was debating because he was so efficient with those first two and I had kind of planned two hitters and kind of get him out of there. But he was so efficient, I was kind of kicking around, debating, going with the third hitter. But just wanted to get him out of there on a really good note. And so I didn't even see that. That's exactly what you mean by, like, putting any forward, getting guys out at this level. Because he was pretty confident that you could still do that.  But it's his size, his presence out there. It creates kind of a different angle and a different look where things get on a hitter. But the slider and curveball are elite pitches. And again, hopefully, we continue to see the tick up of the fastball. It was good to see him look like he was mostly around 94 today, consistently there. So again, hopefully, this is another step in him kind of building up. But to have him come out and be as sharp with his command as he was was encouraging. Knowing what he can mean to the bullpen, was there any type of a buzz at all today, excitement, the fact that he was coming back? I think there was excitement seeing him walk through the room. Again, a long season for him in trying to get back. He's obviously beloved in there. And he's been such an important part of this team now for a long time. So to see him in here, obviously, he's around a lot. And we see him all the time. But knowing that he was an active player today, I know a lot of guys were probably very excited for him. What would be next for him? What would you want to see from him next? Dylan, just continue to pitch. I mean, we'll see if he's in play Tuesday when we start the homestand. But now just continue to build up. And hopefully, with the repetitions, the stuff continues to tick up. His confidence continues to tick up. And hopefully, he can put himself in a position to be an impact guy for us moving forward. Will you try back-to-backs in these next two weeks? At some point, we would hope to get to that point. Yeah. I wouldn't expect at any time this homestand or whatever. But hopefully, we get to a point where there's a back-to-back in there. But we'll just keep taking a step at a time right now. How important is it to have to pick up?


What's going on everyone Sam here with late in sports cards and I am ripping one box of oops I just closed restream one box of 2021 Panini Chronicles football hybrid for Jason L So good luck Jason. See what we got in here. What's up Gavin? How you been man? I don't know if I told you I met Gavin when I was set up at the apopka show. Oh really? Yeah Brought a Herbert off of us Really empty. Oh, yeah, we talked for like a good half hour basically so just about cards in general. It's fun. Had a good time Yeah, dude Kelsey got Jermart Chase on the Chronicles base Calvin Ridley red to 399 That's bookend 399 of 399 and select silver or elite silver Kellen Mond Uh Sam Ellinger and Devonta Smith Only one eminence case. I guess you could do that since Victor. I'll show you don't want like five Micah Parsons base rookie Lock it Now 27k right now on really? Yeah. Devonta Williams on the um Uh prison black. Hey glad you like it man. Yeah, absolutely. I remember our conversation. It was a good one for sure Rashad Bateman crown Trey Lance crown. There you go. That's a nice Herbert man select Uh, Micah Parsons elite silver and Trey Lance Panini base. They also got uh, kind of gain well on the back there Yeah, any any Herbie's a nice Herbie for sure Tyler Josh Allen got Mack Jones silver dynagon. There you go. Nice one there got Parsons and Kyle Trask on the uh Crown got Trey Lance elite silver Got Kellen Mond and Justin Fields on the uh Momentum downtown I'm so pumped for baseball MLB tonight to start. Oh my god McCaffrey Hertz got terrace marshal jr Uh, Davis mills crown Michael Carter crown Devonta on the elite silver Trevor Lawrence luminance base. There you go. Nice Jags and Kyle Pitts clear vision Michael Thomas DK Metcalf Zach Wilson Flux base Pat Friarmiuth and Kellen Mond crown got Amari Rogers red elite to 399 for the Packers There you go. Devonta Smith luminance and Davis Mills Panini base Last pack for you here. Uh, Jason Dak and Herbert Chuba Hubbard uh legacy got Jalen Phillips on the crown Alvin Kamara Six of 10 nice gold chronicles uh base or gold chronicles insert Six of 10 on the Alvin And Trace sermon purple to 99 behind that Niners. There you go Also got etn and Zach Wilson Uh stars and stripes on the back That will do it for your box there. Um, Jason congrats on all the hits get those right out to you


As the year 2024 begins, there is a general excitement across the country, especially for a new dawn. Just like the dawn of every new year, Nigerians are already optimistic that the new year would be better than the preceding one, which was mired with violence and economic hardship. Of course, tribal religious affiliations and political differences will play little or no role in welcoming the new year. Even the economic realities will for a moment be relegated to the background. However, Nigerians are also making demands from the government in the new year as they hope that the newly elected public officials, both at the state and federal levels, would focus on strategic governance and fulfill their campaign promises in the new year. Happy is an understatement. I am joyous because joy is not limited and is not fashioned. The joy is full. But if you were in the church, you would have seen the joy all over the environment. So we are extremely very excited about today. My prayer for Nigeria for 2024 is that the new Nigeria will emerge out of the current Nigeria. There will be peace. There will be prosperity because we are blessed. Those two things that they call potentialities, they will become realities and then the lives of the citizens of this country even can become more meaningful and can make a progress. So I pray for Nigeria and the leadership that in the coming year there will be a new Nigeria and the leadership will be filled with the righteousness of God and they will be focused on the lives of the people. And that's my prayer for every Nigerian also that will enter into a new dimension of life. And that will mean dimension of glory, dimension of prosperity, dimension of joy, dimension of peace all around us in Jesus name. Believe that it cannot be worse than what we are passing through right now. My advice particularly to Christians is that we should be true to God and God should grant us grace so that we shall get Nigeria up and back again and God will prosper this nation so that we will not continue to waste the grace of God upon our lives. My prayer for Nigeria is that beyond everybody's expectations, beyond what we can even imagine, God will restore the glory of Nigeria. God will do new things. People are going into year 2024 with fear and economists are forecasting that even 2024 will be worse than 2023. But my own declaration, my own prayer is that year 2024 will be a year of abundance, it will be a year of divine turnaround for good for Nigeria as a nation. We have been a pariah nation all this while, God almighty, we turn the fortunes of Nigeria around and every nation of the world will seek after the glory and the God of Nigeria. That's what 2024 will do for us.


Add and edit text. In many places in Moodle where you can type in text, you'll use an editor. We recommend TinyMCE editor. If your editor doesn't look like the one in this video, then you can change it, if your admin allows, by going to the user menu top right, clicking on Preferences, and then Editor Preferences. If your screen is smaller, you can expand the toolbar from the three dots. Many of the icons you'll know from word processing or other online software, but some may be unfamiliar. The multimedia icon here offers many options for adding sound and video, along with thumbnail images and subtitles. We explore adding media in a later video. These icons allow you to directly record sound and video from within the editor. H5P is free software for creating interactive content, such as quizzes, and the H5P icon allows you to either link to or upload an existing H5P file. The link icon allows you to link text to an external website. So, for example, if we select the text United Nations, and then click the link, a pop-up appears, allowing us to paste in a URL or web address. You can also browse the repositories here and link to an uploaded file. The text will change color, but note that the link will only work once you've saved the changes. TinyMCE editor allows you to drag and drop images directly onto the text box, and it automatically saves what you type, so if you have to leave it for a while or you accidentally go onto a different page or lose your connection, you don't have to start again. Other options are available from menus by clicking the words. For example, from edit, find and replace. From tools, code view, word count, and an accessibility checker. This helps ensure your text is designed well to make it accessible for everyone on all devices and including people with restricted site who use screen readers. You can also make useful tables and discover keyboard shortcuts from the help menu.