I speak today, of course, both as a representative of Ireland and, of course, as presidency of the Council. Ireland is an accession state. Many of us might forget that. We were a part of the first enlargement in 1973 and EU membership has transformed our country and brought many significant and real benefits to our people. Since that time, there have been several further enlargements. 12 new member states have joined since Thessaloniki and Croatia, as you all know very well, will cross the threshold in a few weeks' time. Enlargement is an integral part of the union. It has been part of its past and it will continue to be part of its future. A future which, as was agreed at Thessaloniki, includes the countries of the western Balkans. It's no secret that Ireland is an enthusiastic supporter of enlargement. We've made enlargement one of our key presidency priorities and I was very much encouraged by the strong endorsement of this decision by member states at the informal meeting of European Affairs Ministers which I hosted in Dublin in January. We see the clear benefits of the policy. We've seen them for our own country and we have seen them for other member states and we see them for future member states also. The European Union may have changed dramatically in the past 40 years since Irish accession. It's a political union and an economic union. It is a union that is not without its problems. But let us not forget one fundamental point that has not changed, that the union is first and foremost a union of values. The values upon which the union is founded are set out clearly in article 2 of the Treaty of the European Union. They are human dignity, freedom, democracy, equality, the rule of law and respect for human rights including the rights of persons belonging to minorities. These are powerful values and it's worth recalling them. They provide the bedrock of the union itself and they provide inspiration for the citizens of aspiring member states for the type of society in which they wish to live. Together with the Copenhagen political and economic criteria these values provide a framework for countries wishing to join the union. Article 43 of the Treaty says that any European state which respects these values and is committed to promoting them may apply to join. In this way enlargement brings us back to the very raison d'etre of the union. Enlargement is also inspiring because it is transformative. To meet the requirements of membership aspiring member states must undergo a rigorous reform process. They must ensure the stability of institutions guaranteeing democracy, the rule of law, human rights and a functioning market economy. This process may take many years and the effort required is great. But through working to meet the conditions aspiring member countries can transform themselves to become more stable, more peaceful and more prosperous. Enlargement not only benefits prospective member states. From the EU's point of view the adoption by the western Balkans of the EU's values ensures stability and irreversible political reform. There are obvious economic benefits in the form of a larger common market which translates into jobs, better living standards and economic growth both for the EU and its aspiring members. Ultimately the policy has the power to increase stability, peace and prosperity throughout the continent of Europe. This is manifestly to everybody's gain. This I believe is the most compelling reason why the EU should continue with its enlargement policy even in the face of its own economic and social challenges. This policy has the capacity to transform the lives of citizens of Europe to offer them hope where there might be despair and to bring a sense of unity and common purpose in tackling the many challenges with which we are all confronted. I noted at the outset that EU membership transformed this country. It has transformed other member states and in the future it can transform the lives of people of the western Balkans. The rewards come not only from the date of accession itself but throughout the enlargement process.  Today Slovenia has been an EU member state for almost ten years and Croatia is about to join. The other countries of the western Balkans are at different stages along the accession process. Some are in negotiations, some are official candidates and some hope to be granted candidate status in the future but all are aspiring member states. As such all can enjoy the benefits that the reform process can bring including help in tackling the burdens of history that at times may seem insurmountable. We saw a powerful symbol of this recently with the historic agreement reached in the Belgrade-Pristina dialogue. If implemented this agreement will improve the lives of the people of Serbia and Kosovo and will bring them closer to the EU. The leaders of both countries are to be commended for their courage and so too is high representative Catherine Ashton, my good friend Stefan Fulla for their tireless efforts to bring this about. If enlargement has the power to improve the lives of the citizens of Europe it has this transformative power because it is conditional. So while Ireland is as I said a strong supporter of enlargement we are also a strong supporter of conditionality. Yes the reforms required can be difficult and they can take many years but it is precisely through the effort expended that the benefits of enlargement come. There can be no shortcuts or special conditions states must be ready for the obligations of membership. The EU stands ready to provide assistance to aspiring member states but fundamentally it is for the countries themselves to implement the required measures. I'm very pleased that we have seen progress towards EU membership for almost all countries of the western Balkans in recent years. But to realise their places as future members of the EU these countries must continue to make progress towards meeting the conditions of membership. In turn we member states must not forget that conditionality works both ways. If aspiring member states are implementing the required reforms they can legitimately expect the union to fulfil its commitments and enable them to make progress on their EU paths. If we insist on conditionality for aspiring member states the EU should hold itself to its own standards. To retain its transformative power enlargement must remain a credible process. There are those that argue that there should be a pause in enlargement after Croatia some speak of so called enlargement fatigue. There are those who believe that the union must spend time looking inwards to resolve its current problems before it can begin to look outwards to new member states again. I totally disagree with this analysis. In enacting such a pause the union would lose much of its credibility. The union offers the prospect of membership to those countries of Europe that meet its conditions. By withdrawing this offer the EU would lose one of its most effective tools for promoting peace, democracy and prosperity in Europe. So ladies and gentlemen at a time when the EU is focused inwards on the challenges it faces enlargement reminds us of the reasons for the founding of the union. Aspiring members as they enact the difficult measures required of membership remind us of the fundamental values of the union. It is also heartening for the EU member states to be reminded in this time of crisis that European Union membership remains attractive and that countries are prepared to make painful and difficult reforms in order to join us. Enlargement must remain an integral part of the union's future because it has proved itself a powerful tool that has the capacity to transform the lives of the people of Europe both within the union and indeed beyond it. The award of the Nobel Peace Prize to the EU provided eloquent testimony to this truth. Ten years after the Thessaloniki agreement and on the eve of the accession of Croatia we must look to an EU where the people of the western Balkans can take their place among the citizens of Europe with shared goals, renewed hope and a common future. Thank you.


The speed of a fire on the slope can be very, very quick. The first thing you may be aware of is things that are landing around you, and if they're starting fires then it's too late for you to leave. There's no questioning the facts. Learn more at emergency.vic.gov.au Authorised by the Victorian Government, Melbourne.


SCP-366 refers to a human endoparasite of unknown, possibly extraterrestrial origin. Upon introduction of SCP-366 over to a male host via inhalation or ingestion, specimens travel through the body to settle in the testes. Larva developed in male hosts are transmitted to female hosts through ejaculation. Larva transmitted in this manner attached to the lining of the uterus, to grow to their adult form. After three to six weeks, the remaining adult specimen leaves the host in an ABE-366 event.


This game mode is way too fun for me to do just one video on it. You've seen one video on it, you've seen a wheel of mud with it, and I'm doing it again. So you should be certain that it's a certified banger. The game mode is called tug of warlock. I pray that you've seen the wheel of mud with this because it was insane. The rules are just insane. So the first to score a touchdown wins each get 10 plays. Okay, so like overtime rules, right? Every single tackle, no matter how you get it, causes a fumble. I'm not kidding. And the X factors stay on the entire game. It is hysterical. I haven't had this much fun in Madden in forever. I have to get one more in. So on my first house rules video, I was using Lamar Jackson with the X factor truss. So you can't fumble, which is ironic because in this game mode, you're supposed to fumble every time you're tackled, but this X factor negates that. It's pretty cheesy. It's kind of OP. Instead though, what I think is equally OP is bazooka because if every single play, I'm just heaving deep and praying that somebody catches it. Why don't I run bazooka Derek Carr? Which is exactly what I'm doing. The last time I did this, you guys only saw DK Metcalf and Darren Waller. As much as I love Darren Waller, you guys would see me score so many touchdowns with Darren Waller. Let's go Brandon Cooks instead. So the only thing Brandon Cooks has on is double me. That's honestly all he needs. And then on defense, we have Ramsey and Reed and TJ Watt without sample force and then shut down on the other two. On defense, all you really have to do in this game mode is make sure that you double team the other teams wide receivers because holy shit, you'll get lost so fast and you'll lose so fast. Tug of Warlock. The most fun thing that has happened in Madden in a long time. If you've never seen this, just sit back and enjoy. It's hysteric. I've played against this guy before.  He throws check downs and possession catches. Watch, he's gonna go down.  You know, if we can win this one, I'll feel real good. He doesn't even play the game mode for the fun of it, bro.   I don't wanna play this guy. All right, wait, wait, he torched him. DK, catch this. Oh my God, he caught it out of bounds. Derek Carr, what are you doing? That is so sad. We needed that, bro. I can't wait to get out of this game.  That was totally past interference and he's gonna go out of bounds.  Dude, play the fun game mode. Honestly, I kind of just went a lot of score on me. Let me get through a good game. No way. Are we gonna house call this on Tom Brady? Oh my God, he just switched off of Tom Brady. I sure just kept running at Tom Brady, but hey, whatever. And he catches it in traffic. So that's like the only time you don't fumble because technically that'd just be an incomplete pass. He's playing some weird coverage here, but my cat still caught it.  He literally has it double me out there and he hasn't thrown it to him a single time. That is so lame. And he's possession catches underneath.   I'm just gonna max protect everybody and we're going up to DK. It's like our only shot here. He is in triple coverage.   Oh, and he's gonna run out of bounds here. Oh, he's gonna try it. I respect it. All right, no, he still takes it out of bounds. You're so lame.  Can we get up? Do we want to? Wait, we don't want to. We're gonna fumble. Larry Zonka. I was just thinking, I should have stayed on the ground for that. Well, at least it's over. At least I don't have to play him anymore. Thank God. And of course, a huge thank you to Raycon for sponsoring today's video. I've got the red everyday earbuds in today. I do talk about Raycon all the time, but if you're not clued in, Raycon makes premium wireless earbuds. They're incredible quality and they start at half the price of other premium wireless earbuds, which is why I absolutely love this company. They offer eight hours of playtime and a 32 hour battery life. The new everyday earbuds that I have in right now offer an improved rubber oil look and feel, plus the gel tips are optimized to stay in your ear perfectly.  Plus my favorite is the 45 day happiness guarantee. If you don't like the earbuds, ship them back. They'll fully refund you, but I have a feeling that's not gonna happen. It's really hard to find an earbud that actually stays in your ear the entire time at the gym. That's why I always take my Raycons. They stay in perfectly. The sound quality is amazing. So click the link in the description box below or go to buyraycon.com forward slash MMG to unlock exclusive deals up to 20% off your Raycon order. Raycon, thank you for sponsoring guys. Enjoy the rest of the video. Let's see where this guy's gotten started. He doesn't have any double me's out there either. I'm kind of surprised. In fact, he doesn't have a single X factor out there.  In this game mode, we chuck bombs to our double me's, okay? I don't know who got this memo wrong. Brandon Cooks, I believe. Brandon Cooks, I believe! Go, go, go! Now that is what I'm talking about. Ooh, he's got Michael Vick and he's got a double me. Who's the double me? Is that Randy Moss? I don't know who this is over here, but he's probably gonna throw to it. No, he's gonna throw down and read. Oh, I didn't get there, but he will fumble now. Let's go, let's go. What are we gonna do here? Oh, that was actually probably best case scenario for me. What can Cooks do? Cooks, can you get around this? Oh, maybe. I don't know what's about to happen, but let's go up for it! Dude, he went for it. That is Randy Moss. Okay, so that's gonna be scary. We do have a QB spy this time, so I'll be vigilant. Yup, okay good. He's just gonna throw a check down. Oh, I wish he'd caught it, because then he would have fumbled, aren't it? Let's see if the play-action will set something nice up here. I smell my calf!  Just go up! He caught it anyway! And he was in bounce. You're telling me he got two feet down there? All right, that was so badass. This is how the game mode is supposed to work. I apologize about the first game. So we can set up. Oh, that's wide open, but we gotta pitch it back! No! Shit, that would have been so sick! Oh, that would have been so sick. I had to pitch it back, because if I had held onto that, I was just gonna fumble. He's got T.Y. Hilton and Michael Vick. He might just throw it. I have no idea what he wants to throw. Ooh, he does so Hilton, but just off the mark. I'm just gonna block here. I think he's coming with the edge pressure. Good luck! Good luck, Brandon Cooks!  Dang it.   He knew exactly what he was doing. Let's just play coverage. He's not going deep to T.Y. Hilton, so let's just play coverage. All right, he's got a zig route right there. He's got an underneath right here. He playmakers it! Get up there! Great play, digs. I'm gonna be looking for Metcalf. I think that should be single coverage for Metcalf. It is! We're gonna rifle one!  Where are you throwing that? You're supposed to have pocket dead eye and bazooka? He didn't even throw it in his vicinity. I don't know what happened, but let's just play defense again. He's looking for that playmaker again. Wow! And he doesn't fumble it because he was in a catch animation. Gotta make the play of the century right here. He might be going for the safety. I can't really tell. Get up, Metcalf! He's got it! And he doesn't fumble. Huge! We knocked him back to the 23. It is not over. Not even close, baby. Let's stay with 84. He's been throwing a Randy Moss a lot. He's gonna throw underneath? How did?   Got me down at the six. DK has to make a huge play here. I liked the defense he came out in last time a lot better than this. Are you DK? You're not even DK Metcalf. You're bringing cooks! Just go up, buddy! Oh! Passive clearance the whole way. I kind of expect him just to take off here with Michael Dick. Does he have truss on him? He does. He can't even fumble if he decides to. Oh, I'm on that! Let's go!  You wanna play a fun game mode? You better play the fun game mode, baby. Let's go! I don't know what he's gonna go for here. He is gonna throw underneath. That's super lame and God about this. All right, baby. Let's see who's there. Cooks or Metcalf? And let's see if I don't get set. We're just gonna sack the quarterback so fast that he doesn't even know what's gonna happen. Just kidding. Oh! You should not be allowed to possession catch in this game mode.  People can play the game mode however they want. I just think it's so lame. Like, this is an X-Factor dominated game mode.  That's the whole point. You know, I will say it makes us so much more fun to beat these guys.  Best way I can describe it. Brandon Cook's might? Oh! Wait, DK! No, you didn't! No, you did not! Oh my God, he just torched Troy Palamalu, who just came out. That's like one of the best safes in the game. Oh my God. Okay, he's got a Randy Moss and he's gonna throw a check down and you're making my job too easy. Keep throwing them check downs, baby. I'm gonna go right over the top and torch you. Let's go, baby. First and goal. See if it sets up similarly. Oh my God.  No, you gotta aggro.  Get it!  Single coverage cooks, no, double coverage. Metcalfe! Good luck, buddy! Good luck! Okay, wait, fumble! Yes, he fumbled! He's out of the back of the end zone! Wait, where left the end zone? I thought for a second that somehow that was a safety. Ah, he's just going deep.  Wait, maybe not yet. Not yet! Maybe he is! Maybe he is or maybe he isn't! Maybe he isn't! Somebody get the ball! That's on my team! Stand up! He did gain yards on that. He got 15 yards on that. That's pretty smart. And he kept the ball! How did he keep the ball? That's what I mean. The game just gets freaked out, dude. There's so many fumbles. They just kind of forget who has it. And honestly, I don't blame them. All right, fine. Oh, oh, oh! I have become everything that I hate, yes. But he was just way too close and he's playing literal pre-vent. So I felt obligated to take that. He's going up high! Woo-hoo-hoo-hoo-hoo-hoo! Look at how deep he's playing. Good luck, buddy. Let's go! Oh! Who's gonna be there? I think Metcalfe's there again. That is definitely single coverage. You're definitely in trouble. That's gonna happen every time. Yeah, I'm sorry, bro. That was literally an eight second game of that. All right, this guy looks like he's in a more suitable defense. I like he is in single coverage. What are you doing? And this is literally just two streaks. And then everybody else is blocking. Where does the... Oh, sir? Wait, maybe, maybe, maybe, maybe, maybe! I have gone, I think, three straight games now and I've played a total of 24 seconds.  Well, let's see if we can keep the streak up, yeah? Oh!  This is check-down, man. Go Metcalfe, whoa! Yeah, this guy was doing check-downs and we just barely beat him. He cannot throw anything here. Oh! Cross shot. I'm gonna have Metcalfe and Cooks intersect here. So he's not gonna know where I'm going with it. You just gotta hope one of the boys gets open. Let's see where they're at. Oh, go Cooks! You're in single! He's got it again!  Oh my God. All right, let's get one more good one in. Coloring bag. He doesn't have any double knees but he does have... This might be this guy's first time playing the game mode. He's got a super good team but it's not geared up for this game mode. You do not have Brandon Cooks' impressed coverage right now. What are you doing? Garner. Triple coverage Garner. Oh, maybe not. I lied. I lied. I lied. I lied. We gotta tackle him. Gotta tackle him in bounce. Good defense. I take it back.  What do you got, sir? His Derek Henry is wide open. I just don't think he sees it. Yeah, he didn't see it. Okay. Okay, I was pretty sticky. I'm impressed. First end goal. Let's go for a big bomb. Me, mech half. Mech half. Mech half! No way! Open a fumble! Ah! Get him Cooks.  Rifles it across. Well played. I'm gonna send everybody down there. Yeah, so Waller and Ridley will also be there. So hopefully if he picks me off, they can go make the tackle. Let's see. All right, let's get in front of this. Let's get up. Okay, good, but tackle him. But tackle him.  Yup! Go! No!  Hey, wait, that flipped the field for us. And it's my ball still. It works in my favor this time. That never happens. Where is, oh, Cooks is too tired? Cooks is too tired to be out there. You gotta go for it. Gotta go for it one more time! Dude, he's an interception machine. He goes down. Get around that edge. Somebody, oh, he did not just make that throw.  All right, let's see if he goes for the INT. He's in single. He's in single! No! Wait! Yes! Oh, what? What? You had to fumble! You're supposed to fumble! He's hacking. I don't know what hacks he has, but he's got him. Does he have truss? I think he does. Does he not? What are you doing, sir?  Fun fact, fun glitch. If you run out of stamina, start showboating because you move faster showboating than you do when you're out of stamina trying to run. Perfect one to end on. I don't know what he was doing there. That was bold. Maybe he thought he had truss and he just did it. I love this game mode. If you can't tell, this shit's hilarious. Thank you for watching us always. I'll see you guys in the next video. Peace out.


Hello, everybody. Welcome back to another Photoshop tutorial. In this one, I'm going to show you how to paint on depth of field or background blurriness to the exact specifications that you want to use. Just notice I am in Photoshop 2023 beta. So this feature is just on its way to the new version. They're just doing the final steps of testing. Let me show you how to paint on depth of field blur, that type of thing. All right. First step, load up some footage like I've done here. Now we're going to go up to the top filter. We go to blur, and then you're going to see one that says live Gaussian blur. This is the one we want. Click on that. And then you're going to see it back. It basically blurs the whole image for this piece. You want to go to the maximum amount of blur that you want at any part in the image. So as blurry as it's going to get, once you've done that, before you click on, okay, of course, leave it on new layer. What you can do now is select this brush here and you'll see that it has a brush with a minus. And now we're going to paint out the blur. So watch this. I want this kid, for example, to be less blurry. So I've gone ahead and selected a soft round brush and I've got the flow on 20% and I'm just going to slowly paint out the blur. So she wants to be more in focus and the rest of it is not in focus. So again, you'll see what I'm doing here. And by having the flow set to 20, you can do it in graduated steps. So depending on how much, so for example, if I want the dog to be a little bit in focus, but not super in focus, I could just paint on top of the dog until I get it exactly what I want. This is how you do depth of field blur using a painting process. It's awesome. That's all there is to it. Thanks for watching.


5. Sonnet's Ninety-One to One-O-Eight Stella, while now by honour's cruel might, I am from you, light of my life, misled, and that fair you, my son, thus overspread with absence veil, I live in sorrow's night. If this dark place yet show like candle-light some beauty's peace, as amber-coloured head, still cans, rose-cheeks, or lips more sweet, more red, or seeing jets black but in blackness bright. They please, I do confess, they please, mine eyes, but why? Because of you they models be, models such be wood-globes of glistering skies. Dear, therefore be not jealous over me, if you hear that they seem my heart to move. Not them, oh no, but you in them I love. Be your words made, good sir, of Indian ware, that you allow me them by so small rate. Or do you cutted Spartans' imitate? Or do you mean my tender ears to spare, that to my questions you so total are? When I demand a phoenix Stella's state, you say, forsooth, you left her well of late.  I would know whether she did sit or walk, how clothed, how waited on, sighed she or smiled, whereof, with whom, how often she did talk, with what pastime at time's journey she beguiled, if her lips dain't to sweeten my poor name. Say all, and all well said, still say the same. Oh dear life, when shall it be that mine eyes, thine eyes, may see, and in them thy mind discover, whether absence have had force, thy remembrance to divorce from the image of thy lover? Or if I myself find not, after parting, ought for God, nor debard from beauty's treasure, let no tongue aspire to tell, in what high joys I shall dwell, only thought aims at the pleasure. Thought, therefore I will send thee to take up the place for me, long I will not after tarry, there unseen thou mayst be bold those fair wonders to behold, which in them my hopes do carry. Thought, see thou no place for bear, enter bravely everywhere, seize on all to her belonging. And if thou wouldst guarded be, fearing her beams, take with thee strength of liking, rage of longing. Think of that most grateful time, when my leaping heart will climb in her lips to have his biding. There those roses for to kiss, which do breath a sugared bliss, opening rubies, pearls dividing. Think of my most princely power, when I blessed shall devour with my greedy, liquorous senses, beauty, music, sweetness, love, while she doth against me prove her strong darts but weak defenses. Think, think of those dallyings, when with dove-like murmurings, with glad moaning past anguish, we change eyes, and heart for heart, each to other do impart, joying till joy make us languish. Oh, my thought, my thoughts surcease, thy delights my woes increase, my life melts with too much thinking.   Yet truth, if Catef's breath may call thee, this witness with me, that my fouls stumbling so from carelessness did in no manner grow, but wit confused with too much care did miss. And do I then myself this vain skews-give? I have, live I, and know this, harmed thee, though worlds quite me, shall I myself forgive? Only with pains my pains thus eased be, that all thy hurts in my heart's rack I read, I cry thy sighs, my dear, thy tears I bleed. Grief find the words, for thou hast made my brain so dark with misty vapours, which arise from out thy heavy mould, that inbent eyes can scarce discern the shape of mine own pain. Do thou then, for thou canst, do thou complain for my poor soul, which now that sickness tries, which even to sense, sense of itself denies, though harbingers of death lodge there his train. Or if thy love of plain't yet mine forebears, as of a Catef worthy so to die, yet wail thyself, and wail with causeful tears, that though in wretchedness thy life doth lie, yet growest more wretched than thy nature bears, by being placed in such a wretch as I. Yet sighs, dear sighs, indeed true friends you are, that do not leave your least friend at the worst, but as you with my breast I oft have nursed, so grateful now you wait upon my care. Night-coward joy no longer tarry-dare, seeing hope yield when this woe strike him first, delight protests he is not for the cursed, though oft himself my mate in arms he swear. Nay, sorrow comes with such main rage, that he kills his own children, tears, finding that they by love were made apt to consort with me. Only true sighs, you do not go away. Thank may you have for such a thankful part, thank worthiest yet, when you shall break my heart. Thought, with good cause thou likes'd so well the night, since kind or chance gives both one livery, both sadly black, both blackly darkened be. Night-coward from sun, thou from thy own sunlight, silence in both displays his sullen might, slow heaviness in both holds one degree. That full of doubts, thou of perplexity, thy tears express night's native moisture right. In both amazeful solitariness, in night of sprites the ghastly powers to stir, in thee or sprites or sprited ghastliness. But alas night's side the odds hath fur, for that at length yet doth invite some rest, that though still tired, yet still dost it behest. Diane, that feign would cheer her friend the night, shows her oft at the full her fairest race, bringing with her those starry nymphs, whose chase from heavenly standing hits each mortal white. But, ah, poor night, in love with feibus light, and endlessly despairing of his grace, herself to show no other joy hath place, silent and sad in mourning weeds doth dite. Even so, alas, a lady, Diane's peer, with choice delights and rarest company, would feign drive clouds from out my heavy cheer. And woe is me, though joy itself were she, she could not show my blind brain ways of joy, will I despair my son's sight to enjoy. Ah, bed, the field where joy's peace some do see, the field where all my thought to war be trained, how is thy grace by my strange fortune stained, how thy lee shores by my size storm'd be. With sweet, soft shades thou oft inviteest me to steal some rest. But wretch I am constrained, spurred with love's spur, though gallad and shortly reigned with care's hand, to turn and toss in thee. While the black horrors of the silent night paint woe's black face so lively to my sight, that tedious leisure marks each wrinkled line. But when Aurora leads out Phoebus' dance, mine eyes then only wink, for spite perchance, that worms should have their son, and I want mine. When far spent night persuades each mortal eye to whom nor art nor nature granted light, to lay his then mark-wanting shafts of sight, closed with their quivers in sleep's armory. With window's ope then most my mind doth lie, viewing the shape of darkness and delight, takes in that sad hue which the inward night of his mazed powers keeps perfect harmony. But when bird's charm, and that sweet air which is Morn's messenger, with rose-enamled skies, calls each white to salute the flower of bliss, in tomb of lids, then buried are mine eyes, forced by their lord, who was ashamed to find such light in sense, with such a darkened mind. O tears, no tears, but rain from beauty's skies, making those lilies and those roses grow, which I, most fair, now more than most fair, show, while graceful pity beauty beautifies.  O plaints conserved in such a sugared phrase, that eloquence itself envies your praise, while sobbed out words a perfect music give. Such tears, sighs, plaints, no sorrow is, but joy. Or if such heavenly signs must prove annoy, all mirth farewell, let me in sorrow live.   Beauty is sick, but sick in so fair guise, that is that paleness beauty's white we see. And joy, which is inseparate from those eyes, Stella now learns, strange case, to weep in thee. Love moves thy pain, and like a faithful page, as thy looks stir, runs up and down to make all folks pressed at thy will thy pain to swage. Nature with care sweats her darling's sake, knowing worlds pass, ere she enough can find of such heaven's stuff to clothe so heavenly mind. Where be those roses gone, which sweetened so our eyes? Where those red cheeks, which oft with fair increase did frame the height of honour in the kindly badge of shame? Who hath the crimson weeds stolen from my morning skies? How did the colour fade of those vermillion dyes which nature's self did make, and self-engrained the same? I would know by what right this paleness overcame that hue, whose force my heart still unto thralldom ties.  But feeling proof makes me say they mistake it far. It is but love, which makes his paper perfect white, to write therein more fresh the story of delight, while beauty's reddest ink venus for him doth stir. Oh happy Thames, that didst my stellar bear! I saw thyself with many a smiling line upon thy cheerful face, joy's livery wear, while those fair planets on thy streams did shine. The boat for joy could not to dance for bear, while wanton winds with beauty so divine, ravished, stayed not, till in her golden hair they did themselves, oh sweetest prison, twine, and feign those eels youth there would there stay, have made, but forced by nature still to fly, first did with puffing kiss those locks display. She so dishevelled, blushed, from window I with sight thereof cried out, O fair disgrace, let honour self to thee grant highest place. Envious wits, what hath been mine offence, that with such poisonous care my looks you mark, that to each word naysay of mine you hark, as grudging me my sorrow's eloquence? Ha! Is it not enough that I am thence? Thence, so far thence, that scarcely any spark of comfort dare come to this dungeon dark, where rigorous exile locks up all my sense. And if I by a happy window pass, if I but stars upon mine armour bear, sick, thirsty, glad, though but of empty glass, your moral notes straight my hid meaning tear from out my ribs, and puffing prove that I do stellar love. Fools! Who doth it deny? Who is it that this dark night underneath my window plaineth? It is one who from thy sight, being, ah, exiled, disdaineth every other vulgar light. Why, alas, and are you he? Be not yet those fancies changed? Dear, when you find change in me, though from me you be estranged, let my change to ruin be. Well, in absence this will die, leave to see, and leave to wonder. Absence sure will help, if I can learn how myself to sunder from what in my heart doth lie. But time will these thoughts remove, time doth work what no man knoweth. Time doth, as the subject prove, with time still the affection groweth in the faithful turtle-dove. But if you knew beauty see, will not they stir new affection? I will think they pictures be, image like of saints' perfection, poorly counterfeiting thee. But your reasons, purest light, bids you leave such minds to nourish. Dear, do reason know such spite, never doth thy beauty flourish more than in my reasons sight. But the wrongs, love-bears, will make love at length leave undertaking. No, the more fools it do shake, in a ground of so firm making, deeper still they drive the stake. Peace, I think that some give ear, come no more lest I get anger. Bliss, I will my bliss forbear, fearing sweet you to endanger, but my soul shall harbour there.  Oh, unjustous fortunes sway, which can make me thus to leave you, and from louts to run away. Unhappy sight, and hath she vanished by so near, in so good time, so free a place. Dead glass, doth thou thy object so embrace, as what my heart still sees thou canst not spy. I swear by her I love, and lack, that I was not in fault, who bend thy dazzling race only unto the heaven of Stella's face, counting but dust what in the way did lie.  Oh, absent presence, Stella is not here. False, flattering hope, that with so fair a face bear me in hand, that in this orphan place, Stella, I say my Stella, should appear. What says thou now? Where is that dainty cheer that toldst mine eyes should help their famished case? But thou art gone. Now that self-felt disgrace doth make me most to wish my comfort near. But here I do store a fair lady's meat, who may with charm of conversation sweet make in my heavy mould new thought to grow. Sure they prevail as much with me as he that bade his friend, but then new maimed, to be merry with him, and not think of his woe. Stella, since thou so write a princess art, of all the powers which life bestows on me, that ere by them ought undertaken be they first resort unto that sovereign part. Sweet, for a while give respite to my heart, which pants as though it still should leap to thee, and on my thoughts give thy lieutenancy to this great cause, which needs both use and art. And as a queen, who from her presence sends whom she employs, dismiss from thee my wit, till it have wrought what thy own will attends. On servants' shame oft masters blame doth sit. Ho let not fools in me thy works reprove, and scornings say, see what it is to love. Then sorrow, using mine own fire's might, melts down his lead into my boiling breast. Through that dark furnace to my heart oppressed, there shines a joy from thee, my only light. But soon as thought of thee breeds my delight, and my young soul flutters to thee his nest.  So strangely, alas, thy works in me prevail, that in my woes for thee thou art my joy, and in my joys for thee my only annoy. End of Part 5 End of Astrophil and Stella by Sir Philip Sidney


Actually, I don't have a bouquet. Please follow us on Instagram and Twitter for more juicy content. It's so juicy. And today, we all... Everybody do this in their deepest voice. And today, we are recording a reaction to something called... Lipstick under my burka. Ah, well, you know, when that happens to me, I've typically had a pretty hot Friday night. No. Yeah, I know. In this iPhone frame. No. Let's just get into it. Lipstick under my burka. Yeah. Now, see, we've been joking. I think it's actually about a Muslim woman. This is gonna be like the brown girls' guy thing. We're gonna feel really bad. We're being silly at the beginning.  You're gonna feel bad. You know, I was being respectful. You don't even know what we're watching. Just one second, again. I'm Brihana Bedi and my song is inspired by seven things. No. Mobile's Britney No. 3. This photo is mine. It's for you two. Do you two have any relationship? No. Sensey? Well, you don't know who my aunt is. I'm not your aunt. I'm not your aunt. I'm not your aunt. I'm not your aunt. You're my aunt. I'm not your aunt. I'm your aunt. When they get emotional, that's when they know that. It's really interesting the way they went with that creatively, because it's a story about, obviously, a girl who wants to express herself as a woman, but is confined by whatever religion she's under. Right. And that's the common thing I think a lot of girls A lot of girls come all the way to, but the fact that they went with that and then with this, like, disco music on the line now, which I kind of liked because, one, it was different, but I think they were going with more of like, this is not like, this is going to be a sad movie about the oppressions of women. It's going to be about the empowerment of this woman, finding herself, and it started off. I really felt bad, we were so silly, because it started off like it was going to be this really deep, sorrowful drama about this poor young girl's oppression against her, and it became very different, very different, and I really like, apparently, it's all of those women's stories. Yeah, it's like all of them told. All age rages. Very different, yeah, different, so it's like, you're not in the class anymore. It looks fun, yeah, it looks like it's fun and touching, yeah, with a important message, which is good. I've not heard anything about this, have you? Yeah, I have, okay. People have requested it for a while. Yeah, never heard anything about this film. I don't think it was like, it was huge film. Um, Maburka. It came out in 2016. It's a great title, it is. One of the reviews. That's freaking fantastic. Also, in most trailers, they don't show the sex. Yeah, that's like, that was very interesting. I don't think, you don't normally see it outside of 50 Shades of Grey trailers. Right. Yeah, the actual, and she was filming that thing there. Yeah, that was different. In order to be independent and break free from the conservative society, four women sets, four women sets on a journey to discover freedom and happiness. Wow. So it's like, Sisters of the Traveling Pants. Yeah, Sisters of the Traveling Yahood Pants. Yah-ga? What? What? Alexis like that. What are you even saying? Sisters of the Traveling Yahood Pants. Um, the director is Alam Karita. Uh, I can't even pronounce that whole name. Wait, you can't pronounce the name? Uh, I know, it's crazy, right? Um, this girl's from Omkra with, uh, Vishal. Omkra. Yeah. It sounds like Okra. Not Omkara. Omkra. And this girl leaves Okra. Okra's pretty good. I love Okra. I love Okra. I love Okra. Yeah. Yeah. Lipstick under my Okra. Yeah. I thought it was one person from, uh... Sakra Gang. Sakra Gang. Sakra Gang. Maybe I was missing for it. Who knows. But, yeah, it looks really good. Let's know how it was. Um, and if it's worth a viewing. Yah-ga-ga. And work can be viewed. Never. Work can be viewed.


Alright, in this video I wanted to show how to update your YouTube handle if you want to change it. The first thing you're going to do is go to youtube.com by typing in the address and the address bar. You're going to get to your home screen and then up in the upper right-hand corner it's either going to say sign in or it's going to have a circle with either your initial or your logo on it. So sign in to the account that you set up your YouTube channel with. Next, click on that little circle right there which is your Google account. And then the next thing you want to do is go to YouTube studio right here. Next when you're in YouTube studio you want to go to customization on the left-hand menu. Once you get to customization you want to go to basic info and then there will be a handle right here that says choose your unique handle by adding letters and numbers. You can change your handle back within 14 days. Handles can be changed twice every 14 days. So this is where you're going to put in whatever you want for your YouTube channel.


There's a spiritual war going on right now family and you're in the middle of it It's all about vibration Are you able to maintain a positive vibration or are you getting dragged under with all the negativity that's going on? Look over here watch what this is happening for me It's important to go to the beach to ground to get away from everything Recharge my batteries and I hope you're doing the same thing


This book is titled My Two Holidays, A Hanukkah and Christmas Story, written by Danielle Novak and illustrated by Phyllis Harris. One cold December morning, Sam woke up, stretched, got out of bed and looked out his window. Everything was covered with white snow. Winter was Sam's favorite time of year. He loved sledding, ice skating, building snowmen and adding a hat and sticks for arms. And of course, celebrating the holidays. He was so excited that he jumped out of bed, got dressed and ran downstairs. In the living room, the Christmas tree sparkled with ornaments and twinkling lights. Sam had helped make strings of cranberries and popcorn for the tree. In the kitchen, near the window, the silver menorah gleamed on the windowsill. Sam had helped polish the old menorah, which used to belong to his grandmother. Have some breakfast, Sam, said his mother. Did Santa come yet? he asked. Not yet. There are a few more weeks to go until Christmas, his mother answered. What about Hanukkah? Sam asked. Can we light the menorah candles tonight? No, Hanukkah is almost here, but it doesn't start tonight, said his mother. He would just have to wait a little longer. At Sam's school, the classroom had been decorated for the holidays. Miss Nancy played piano while the children sang The Twelve Days of Christmas. And I have a little dreidel. Sam loved singing holiday songs. He knew all the words and sang in the loudest voice he could. Then Miss Nancy said, Today we are going to learn about the holidays that people celebrate at this time of year. Some people celebrate Christmas. And some people celebrate Hanukkah. Some people celebrate Kwanzaa. How does your family celebrate?  My family celebrates Christmas, said Jack. We put lights on our tree and Santa slides down the chimney to leave us presents while we're sleeping.  Her name was Maya. My family celebrates Hanukkah, said Maya. We light the menorah every night for eight nights and played dreidel. As each child described their special holiday, Sam didn't feel so excited anymore. He started to feel nervous and confused. All the other kids had just one holiday. Why didn't he? Finally, it was his turn. How do you celebrate Sam? Asked Miss Nancy. Sam looked around the room. His mouth was dry and his hands were clammy. The kids were standing waiting for his answer. Which one is it? Asked Jack. All the children stared at him waiting for an answer. His face felt hot. He was too embarrassed to say he celebrated two holidays. Sam stammered and he ran into the bathroom. He stayed there for a long time. When he came out, the class was doing arts and crafts. He was very quiet until it was his time to go home. I don't want to go to school anymore, Sam told his mother. What happened? She asked. Sam told her about the teacher's question and about hiding in the bathroom. I wish we celebrated just one holiday. It's weird to have two. Sam's mother hugged him. Actually, many people celebrate both Christmas and Hanukkah. It's very special to have two holidays. Then she explained, Your dad is Christian and he has always celebrated Christmas. We decorate the tree and hang stockings by the fireplace. Santa will leave you lots of presents. And Nana and Papa will come for turkey dinner on Christmas Day. I love Christmas, said Sam. I am Jewish, continued his mother. So I have always celebrated Hanukkah. This menorah has been in our family for generations. My grandmother gave it to my mother. Then my mother gave it to me. Every year, we light the candles for eight nights. We give one another presents, play dreidel, and eat latkes. Potato pancakes, fried in oil with applesauce and sour cream. Love latkes, said Sam. And I love Hanukkah too. Sam smiled as his mother hugged him. You see, she said, Christmas and Hanukkah are about celebrating our love as a family. It's one of the things that makes our family special. The next day, Sam marched into his classroom with his head held high. He did not feel embarrassed anymore. Sam sang the holiday songs in a loud, clear voice. Then Miss Nancy said it was time for recess. Wait, said Sam. Yesterday, I didn't get to tell the class how my family celebrates the holidays. All the kids looked at him. Well, okay, Sam, said Miss Nancy. Go ahead. My family celebrates Christmas and Hanukkah, said Sam. I get Santa and latkes. And stockings. And a menorah. The kids were quiet. Then they started to smile. Jack said, that's really cool. Maya said, you are so lucky. Miss Nancy said, thank you for telling us about your two holidays. After that, Sam felt great. He was so excited for the holidays. It's okay to be a little different, Sam told his parents when he got home. Celebrating Hanukkah and Christmas means more fun and lots of love. I can't wait for my two holidays. Now you've read through the story beginning to end. Maybe one of you celebrates two holidays. There is no wrong or right way to celebrate the holidays. Your celebrations are wonderful. Whatever your customs, your culture, or your religion is, you can celebrate two holidays or one holiday. Either is great. People must respect each other's celebrations. H-A-N-U-K-K-A-H Hanukkah. Hanukkah. A celebration lasting eight days in which a candle is lit, every day for eight days. It takes place in December and follows a lunar calendar. K-W-A-N-Z-A-A Kwanza. Kwanza. Kwanza is celebrated by African Americans and takes place the last week of December, January 25th or 26th until January 1st. M-E-N-O-R-A-H Minora, a candle labra which holds candles. D-R-E-I-D-E-L Dreidel, a Jewish game. L-A-T-K-E-S Latkes, a potato pancake. Deep fried in oil served with sour cream and applesauce. And to all of you, Happy Hanukkah, Happy Kwanza, and Merry Christmas. Bye-bye.


There's one really big problem with trying to think positive and I'm going to show you what it is. See this is clean water and this represents how you're born. Perfect, no flaws, a clean slate, but then life happens. We're told how we have to fit in. We're told what we're supposed to do, what's not acceptable, what society wants.  They get told that they're fat. They get told that they're not enough. We have some failed relationships. We go on Instagram and we compare ourselves with other people. We see the advertisements and realize that we're not as good as the Photoshop photos and what happens? We become negative and we start having negative self-talk. So not only is there negativity outside of you, but the negative self-talk is now negativity inside of you. Life happens. It's impossible to go through life without getting some scars. But then we hear that we should think positive and that's like taking a little bit of clean water and pouring it in. It makes it a little bit more clear but it doesn't make the negativity go away. And at this point is where most people give up. They say that positive thinking doesn't work. Well, if you go at it this way, of course it doesn't work. But then there's some people that try a little bit more positive thinking and they take more water and they pour it in and becomes a little bit more clear and a little bit more clear but it's still dirty. But then you have to realize that this is how you have to be. You have to search for the positive things in your life. You have to find the things to be grateful for, the things to be happy about. You have to be intentional about creating positive relationships in an environment in your life that's positive because thinking positive isn't something that you do sometimes. It's something that you have to do all of the time. You have to be proactive about it.  And if we do, this is what our mind will become. It'll start to become a little bit more clear and a little bit more clear and a little bit more clear because see positive thinking isn't something that you do sometimes. It's something that you have to do all the time.


So my name is Tamer Saleh and I work for Thoughtbot over in Boston and today we're going to talk a little bit about coding for failure, how to build rock solid applications in 45 minutes, not 60. All right so the talk instruction in pretty much three main sections, the first two are a little more philosophical, a little more energetic, the last one is going to be a lot more code. So the first thing we're going to talk about is why you want to build rock solid applications. Just bear with me on that. The important part is that it's for the people, it's for your clients, the people who are going to be using your applications, you want to make them happy and there's a lot to be said about that, especially in the book Defensive Design for the Web by 37 Signals. A lot of that is the philosophy that went into the Ruby on Rails framework, how easy it is to add good user feedback through things like flash messages, error pages, validations, failure emails are a great example of something that people don't do, tripit.com does. If you're sending an email to an automated system and it can't parse it, it sends you back an email explaining what went wrong. Little details like this, also XML responses are something that are often ignored. If you try and post to a site with XML incorrectly, often you don't get back the errors that you should. So those kinds of details that we're going to talk about today, how to make your apps deal better with those kinds of situations. I want to talk a little bit about error pages real quick. Here's an example of a great error page, the fail well from Twitter. This is not just a 500 page, this is actually a capacity issue page, right? So they had to take great pains to create a special error page just for one of their major problems, right? Now this is a liability having capacity issues, Twitter's known for the scaling issues. And yet people love the fail well, right? People really love the fail well. And this got Twitter all kinds of publicity. They took something that was a distinct liability and turned it around through good user interface, through treating their clients well. They turned it around into something that worked for them. The other reason that you want to build fault tolerant applications is for yourself. You want to be able to sleep at night. A good example of this, I used to be a systems administrator over for a city search. And we used network appliance filers. This is essentially a big disk array, insanely expensive, but it's expensive for a reason. When a disk failed on a NetApp filer, it actually notified the company and sent a disk in the mail before I woke up. I would wake up to a disk failure message and a message that says we've sent your disk in the mail, right? That's really good, that's really good service for the people who are buying NetApp. That's why they could charge so much money. It's because they think about those situations, they think about the right way to solve them. So the next thing we're going to talk about is when you want to deal with these issues. It's not always clear. The most important part is that you want to think about the failure points in your application. You're not going to go around fixing everything. You have to know what parts to concentrate on. Some of the failure points that you'll see are external services. These are like the most obvious. Your e-mail server or a web service that you communicate with, your G-O-I-P, whatever. When you're communicating with something like that, that's a distinct failure point, something that you have to code around. You have to be very careful when you're dealing with those. Another one is internal services. If you're running Memcached or full-text search engine, part of the reason that we shy away from running those early on in a project is because that adds another point of failure that you have to be very careful with.  Complex operations, complex systems are something you also have to worry about. If there's something you're interacting with, like dealing with Git, for example. It's a very complex system. It's somewhat external to your application. When you're working with Git or with the command line or with the OS, you have to be very aware of what you're doing. Performance bottlenecks. If there is like Twitter, for example, if there's a place where there's a known performance bottleneck, you have to be aware of that in order to give the best service to your clients. And entry points. If you have one spot in your application where lots of people are entering into that, with web apps, it would be the front page with services. It might be the creation action on a certain model, something like that. You want to surround that with defense. You want to make sure that that's going to work correctly in all situations. But the most important thing to know is when to worry and when to relax. You can't spend all of your time fixing everything on your app, making sure that no situation goes uncut. The important thing to know is that you're not NASA.  Come on. How important is this in certain situations, right? A great example of when you can relax and when you should relax is in the destroy action on Rails controller. If you look at the scaffolding that's produced on those, you'll see that the destroy action isn't wrapped in an F block. It's not catching any errors that came out of that. It's an implicit assumption that when you call project.destroy, everything's going to be fine. There are all kinds of things that can go wrong in the destroy method on an active record model. You can have database issues. There might even be validations you didn't know about, something like that. But the chance of that happening is very slim and the impact to a user is also fairly slim. And that's kind of the important thing to know is that it's always a trade off. You can't surround everything with all this error catching and all these what if situations. You have to be very careful about choosing the right ones and working on those. It's a trade off of effort versus impact. I had a designer make that slide for me. All right, now we're going to get into the meat of things a little bit more and I talk some about code. There are three guidelines that I like to give for building an application that handles failure well. The first one is fail fast. How many people here have heard of that phrase? Great, great. About half a year. Jim Shore wrote an essay about fail fast and he said think about what kinds of defects are possible and how they occur. Place your assertions so that the software fails earlier, close to the original problem, making the problem easy to find. The idea behind fail fast is that you catch bugs as soon as they happen. And the way you do that is you surround things with sanity checks. You don't want your application to try and stumble along. You don't want it limping. If there's anything wrong, you just want to die. You know about it as soon as possible.  Here's an example of a sanity check that we use in one of our applications. It was dealing with an external API and it was for purchasing. The API was known to go down for long periods of time, something we had no control over. And it was really bad user experience to have to go through this whole purchase wizard before they found out at the very end that the purchase wouldn't actually happen because the API was down. So we put in this service available method which essentially pinged the API, made sure that it returned same results. And if it didn't, it notified us both by logging and by using Hoptote, which is something I'm going to talk about a little later on. Another great example of sanity checks is Subversion.  Svn commit dash m, which is for the message that's going to be in the commit. And then you forgot to actually give the message.  Has anybody here ever done that? You have about five of you. When you do that, Subversion says, this commit message looks like a file path to me. I see a file that matches the path for this commit message.   Or did you mis-type this? That's a great sanity check that really improves the UI because the alternative is pretty bad for Subversion.  You wouldn't know anything went wrong until you did Svn step next time. So that's great attention to detail for a common failure, right? The second guideline is to fail loud. The worst thing that I see in code is something like this. In some task, somebody is looping through a bunch of records, modifying the records, and then just calling save on it. They're thinking to themselves, well, it might fail, but I don't know. I don't really want to deal with that. I don't know what to do if it does fail. Just shh. I mean, the simplest way to solve this is to add a bang, right? Save bang will now raise. The first one that it comes to, it will stop the loop, raise up an error. That's an okay solution. It's much better than failing silently. The problem with that, of course, is that now you've got half of the records that have been updated, other half haven't, and you've got a pretty bad error message presented to the user. Of course, if you want to take it to the next level, where you're actually going to loop through all of them and save the error messages and present that to the user in a friendly manner, it's a bunch of code. I mean, it's a pain at this point. And this is what I'm talking about, about the trade-offs you have to make. This is a lot of effort, and more importantly, it's a lot of code which is a liability. You want to minimize the amount of code in your application, but you want to give a good user interface at the same time, right? So, depending on the application, this might be what you want to do. If it's something simpler, something less of an impact, then the previous slide works just fine. One of the ways of failing loud, of course, is to log things. It's a very simple method. It doesn't send anything to the programmers, but it keeps track of what issues have happened, right? It's useful. And the Rails logger, because we build mostly Ruby on Rails applications, the Rails logger is very accessible. In any application, there's a Ruby logging library. Very easy. You can also send out an email. Sending out an email, unfortunately, is so complicated that I don't want to put any code in there. And then, of course, you can page the sysadmin. I don't even know how to do that. I wasn't going to try and put code on that one. And then you can use exception notifier, which takes care of sending the email for you in any exceptions in a production Rails application. The problem with that is that you get information overload. How many people here use exception notifier in their applications? How many people have ever had an application that's in the wild, a lot of hits, and you've got one error that just slams your inbox? How many people have been able to work while that's happening? Yeah, that hit us pretty hard. So actually, because of that exact situation that happened to us in one of our larger applications, we realized we needed to come up with another solution for it. This is not a talk about hop toad, but I've got to mention it because it's very relevant. How many people here have used the hop toad service? All right, all right, not bad. Essentially, it replaces exception notifier. And instead of sending out an email, your exceptions turn into, you know, just a post to our hop toad service, and then we kind of keep track of the exceptions that have happened. We send out an email for the first one, and then for subsequent exceptions, you just see the count, like that one, that was pretty big. And it just correlates it for you, multi-user, things like that. Hop toad can also, you can also trigger exceptions on your own to send a hop toad, which is a very useful feature. So you can rescue something, still present a very good UI to the user, and yet still be notified via email that that issue happened, right? You can also send arbitrary information to hop toad. If you're doing something that's not in a Rails app, if it's just in a Ruby application, you can still use this just by constructing your own message. So the third guideline is zero trust. Components should never trust their inputs, and components should always do their best to provide sane outputs. Now this is something you don't see very often in Rails applications, or Ruby applications, but it's a very good coding practice that was kind of made famous by Dr. Bernstein, I believe his name is, DJB who did Qmail. So this is only about a quarter of the diagram here, but this is the security architecture of Qmail. Later on at the last slide I've got references for the URLs for anything that you guys want to look up afterwards. Essentially each one of these is a separate process, and they take input on standard input and they send it out on standard out, and they are very paranoid about their inputs. Tons of sanity checks that ensure that data that flows through the Qmail system is checked again and again and again, so that there's no security problems, and there's very little crashing and stuff like that. It's a very good architecture. Alright, let's see some actual code here. For external services, something that we see often that isn't treated well enough is net-HDP exceptions. How many people here know how many exceptions you have to catch when you're doing a post for net-HDP? That's a leading question, nobody does. This unfortunately is the block that you have to use when you're dealing with net-HDP.  I don't even know what these are, connection resets, EOF error. There's a lot of them that come from the underlying Ruby code that net-HDP is built on, and if you don't rescue all of these, users will see a 500, so you have to be able to rescue all of them. Same thing with SMTP, which is actually a little bit more tricky. When you're sending an email, there's actually two different types of exceptions that can happen. There's server exceptions and client exceptions. Server exceptions, of course, are like site timeouts, things like that. Client exceptions are more about email addresses being malformed, that sort of thing. Depending on the situation, you might want to catch both of them, you might want to notify the user that their email was bad, or you might want to say that the site was down. This is the technique we usually use. We've got the constants that I just showed you, and then when we send a message, we have two rescue clauses, one for each. Note that use of the splat before the constant, so it's actually rescuing all of those. And then, you know, you present the best UI for that situation to the user. Of course, there are some situations like in a rate task when there is no UI that you can present to the user. So no matter what, you're pretty much just going to be rescuing all of them. And here's another example of when you want to fail aloud, send a message to your developers so they know that the rate task failed. The command line is another point of failure that we talked about. The important thing here is to always check response codes. Any, there's just a myriad of things that can go wrong when you're dealing with the UNIX commands. So it's important to either check the response codes, or look at the command output to see if there's any abnormalities. My favorite is this one. So in my sysadmin days, I took over a network that had been built by somebody who was not a sysadmin. So that being said, I knew I was in trouble when I looked at some of the cron jobs and found lines like this sprinkled across the production machines. I said to myself, if I ever remove or rename a directory, I just had to accept the fact that at midnight that user's home directory might get wiped out. Of course, the correct way of doing this, instead of using the semicolon, is to use a double land. That's the simplest way of getting by that. The next command won't run unless the first one passes. In your Ruby code, the correct way of checking the response codes is to use the actquestionmark.success. It's the same kind of issue. You've got a UNIX command that you're running, you check the success, and you deal with it. Anytime you run a UNIX command, system, backticks, whatever, you need to check the response. Another place where we see issues often is in cron jobs. So the important part about the actual cron tab itself is that you want to keep it as small as possible. Cron is not something you want to deal with if you can avoid it. It's something you want to minimize your interaction with. So we set up the mail to variable. So if there is any problem on this line, if cron is actually not able to execute that script, somebody will get emailed about it. And then all the nightly jobs we put in a cron nightly script. And this is the cron nightly script that we use, or an example of. The first thing that you want to do when you're running something out of cron, you need to realize that cron doesn't pull in any of your environment. It's an entirely a blank slate. If you want your environment, then you have to pull it in yourself. So we source our bash profile for that user. And then we make sure that we're in a directory that makes sense for us. The second thing is that especially when you're dealing with, for example, Rails application that's running in a cluster, there are some tasks that really should only run on one machine in that cluster. The way that we, I'm sorry, some tasks happen on all servers. So those are just normal script runners. They're in every cron tab across every server. Some of them only happen on one machine in the cluster. So the way that we deal with that is we have just a file that we touch called primary. We just put that in the user's home directory on the one server that should be running those one off commands. And then if that file is there, the cron job runs them. An important thing, like we said, fail loudly. We log everything that happens in the cron tab. And again, failing loudly. We use hop toad to notify on every error that happens. Now, this is another good example of how to build this sort of thing in a testable way, in a maintainable way. We put all of our logic, all of our business logic inside a Ruby module method on that, that allows you to have it inside your actual code base and not part of just some script that cron is running. I want to talk a little bit about exceptions now. How many people have seen this? And how many people actually do this? All right, that's very good. So this is called the inline rescue. And what it does is it catches quote unquote any exception and returns nil instead. So if food out bar is nil, and Baz is called on nil, then it'll just set x to nil. Usually that would result in a one nil exception. This is from programming Ruby. A rescue clause with no parameter is treated as if it hit a parameter of standard error. This means that some lower level exceptions will not be caught by a parameterless rescue class. If you want to rescue every exception, use rescue exception e. So this is the Ruby exception hierarchy. You've got exceptions, the base class of all of them. You've got no memory, script error, signal exception, which is for interrupts, system exit, system stack error. This is the stuff that's actually rescued when you do just rescue without specifying the actual exception. So that only rescues about half the exceptions that can actually happen. This will rescue all of them. In a Rails application, for example, if you do that, they will not see the 500 page, they will just see a something went wrong with this application page. So it's very important whenever you rescue, not only to not use the inline rescue because it promotes bad coding habits, but also not to use any rescues that don't explicitly say what exception you want to catch. And finally, exceptions should be exceptional. Exceptions are slow and they cut through the object-oriented principles. But more importantly, exceptions say to other programmers who are working on your application that this is an error case. If you start using exceptions to replace branching and conditionals, if you start using exceptions as part of the business logic, that's just very confusing to the other programmers. Well, I finished a little bit early. It's a, you've got about 10 more minutes here. So like I said, I'm with Thoughtbot. My name is Tamer. This is actually going to be part of what we're talking about or writing about in a book that we're going to be releasing in a, on Safari for Addison Wesley in a couple of weeks called Rails Anti-Patterns. I'm writing that with Chad Pytel. So it's going to be in the beta books in just a couple of weeks. And if anybody wants to look up some of the references that we used, they're all on this slide. So does anybody have any questions? Alright, I got a couple. You? You had a section which actually went through user.h and was actually doing user.table. You mentioned that if you had an exception happening that you had problem users saved, but not, what is the best practice in that situation? In that situation, so what he said was, I had the slide earlier that went through a list of users and then called, like changed each record called save on it with the bang. And I was saying the problem with that is that it stops halfway through the list of users and some of them are saved, some of them are not. And you can wrap that in a transaction so that the whole thing happens or the whole thing is rolled back, definitely would do that in that situation. Personally I would rather be able to show, I would rather be able to display to the end user all of the problems that happened if possible so they can address them all before they try and do that action again. So the third code example is depending on the situation what I would go with. But yes, you can wrap the whole thing in a transaction, usually pushing it down in the model layer and some sort of callback. Somebody back there had a question? Yeah? Yeah, so the question was in the Kron nightly file, every line was doing a output or it was redirecting standard out and standard error to a log file and he was saying in the Kron tab itself why didn't I do that redirect there. That is a good idea and I should have done that. I still want to keep the Kron tab itself as small as possible and that comes from my system in days have seen so many problems with a malformed Kron tab where it just doesn't do exactly what you think it's going to do. Yeah? I was just curious, is there any particular reason in that nightly Kron job when you're doing the kind of synchronization, the beginning, the she-bang, the load in the profile, whatever, you're not defining bash with an e, like with the dash e option. It seems like that would kind of fall into what you're talking about, which is fail early. So if any one of those lines would immediately pick out. Right, that's a good point. In bash scripts, if you have the she-bang line with bash dash e, any command that does not execute, any command that returns a non-zero exit code will stop the entire script and that falls with the fail early. Unfortunately, that doesn't also fall into the fail loudly, I don't think. Does it print out an error message at that point? Kron will actually generally email you if any output is sent to standard out. Okay. You could kind of put the two together. Yeah, it's usually a logging work for that to happen, but definitely that falls in the fail early. Any other questions out there? I've had to keep with the rescue exception. People, especially the library writers, are doing it thinking that they're being helpful just because they're making sure that there's anything that happens in their blog is rescued. But I found that makes their libraries actually not suitable to use the programs that have any signaling for them because they're catching the signals and they're also making sure that they're catching the system so they can't actually kill the rest of them. So I have to audit all the libraries that are used to make sure that they're not actually catching exception for rescuing them. So it's important to know when it's appropriate to use it. Yeah, that's exactly true. It's important to know when you should be rescuing. Well, more importantly, you should just be very aware of whatever you're going to be rescuing. And I think for library writers, for example with the HTTP exceptions that I listed out, I can't tell you how many times I wish that the person who wrote that thought about the sub-exceptions that were common, like timeout, and rescued those and returned them as, and then raised master exception, or just defined an exception that included all those modules. That would have done the same thing.  It's going to rescue that when you don't want it to. Were there any other questions? I see one over here. Nope. All right, well, thank you very much.


Welcome to my lecture on managing time in a simulation. You recall, time is one of the major elements that distinguishes discrete event simulation models from other kinds of models and other kinds of simulation models. In discrete event simulations, we have randomness as part of the simulation model. We've got time, which we're doing now, and we have issues related to the collection of output data because these are models that move over time. There are two basic ways of moving time in a simulation program. The simplest one, the first blush one, let's say, is the one they fixed time advanced method where we have a simulation moving over time. We have a simulation clock. Maybe the units are minutes, right? So we have a loop in our program that advances the clock one minute, looks around and says, is anything new happening? Did anything new happen between now and last minute? Did a new customer come into the system? Did anything change? Did a server go off duty? And if the answer is yes, you take care of it. If the answer is no, you increment again, and now you're another minute later. So we moved, let's say, from three minutes to four minutes to five minutes. And you keep on looking around to see what has to be done now that you've advanced the clock one minute. This has issues, clearly, mainly because there could be a lot of iterations, a lot of iterations traveling around this loop when nothing happens. So it kind of seems like a waste of time. And why don't we just look at the next thing that's supposed to happen because we know that events preschedule other events, right? Why don't we look for the next thing that's supposed to happen and just advance the simulation clock to that? And that's exactly what the next method, the variable time method, does. Clearly, most simulation models are going to be using this variable time method, the next event time advanced method to moving time. As long as you have one event in your system, all the other events can be booted up. So the clock will simply jump ahead to whatever the next event is that's supposed to occur. Of course, this means we have to keep track of events that are going to occur, and we have to keep track of them in order by time to occur. I guess we don't have to. It could do a search, but that's a waste. We might as well store these things in the first place in a particular order, in time order. How is all of this done? All of this is managed by something called the timing routine. Which is separate from, let's say, an arrival event routine where an arrival event routine might be done by the simulationist. What happens when a new entity arrives in the system, right? The timing routine is more likely to be done by whoever developed the software tool, assuming that it's a specialized simulation software tool. If this is a simulation in a general purpose language, that timing routine might be part of the library. We don't want to reinvent the wheel. We want to be able to build on what other people have done. This is to remind you of something you already learned in the lecture called simulation programming. We just selected some of the terminology that applies to time advance. We know what an event is. An event is the point in time when something happens to change the state of the system. The clock is the simulation clock, and it's a variable that includes the simulated time whenever we want to look at the system. One of the state variables is going to be time. What time is it right now? The event notice is a ticket. It's in programming terminology. It might be a record where you've got everything that you need in order to take care of that event. What's in the event notice? The type of event, maybe the ID internally to the event. What customer are we talking about? At the very least, they have to have those two items. Finally, the event list is a way we store these events. If we're talking about future events, because we're interested in the timing routine right now, there's something called the future events list, FEL. The event notices for events that have not yet occurred but have been pre-scheduled are stored on that list while the simulation is running in order of time to occur. Once they're stored in the right place, in the right order, all the timing routine has to do is take the first one off the list and say, okay, I'll move time up now to whatever the time is on this event notice, and that's the next time advance method. We're going to take a couple of minutes here and look under the hood. Not everyone is interested in this, I know. Not everyone is a programmer. Not everyone wants to know. When you drive a car, if something's wrong, you may not want to look under the hood. You may want to just go find the nearest gas station or service facility. But we'll take a quick look and see what the timing routine does and how the timing routine works. If you look at the flow chart coming in, it's coming in from the beginning of the program. It's left open just in case some housekeeping has to be done at the beginning of the program. The first thing you see is that the statistics we're collecting have to be initialized and two events are scheduled. So before even getting into the timing routine, two events are scheduled. When is the first arrival and when is the closing? When does the simulation start and when does the simulation end? Okay, now that A is going to be important on the next slide. Basically, once we've finished everything we can see and we have nothing left to do, there are no events that are in process that we have to work on. We come back here and say, okay, when's the next time something will happen? Any events remaining? Either that's a yes or a no. If there are no events remaining, it's presumably because it was end of day. The closing has appeared because at the closing we remove any events that might otherwise be waiting to happen. If you close the door, you're not taking in any new arrivals, even if one was pre-scheduled. So if there are no remaining events, the event list is empty. That's the end of the program. We go and collect our statistics. We report our statistics. If there are events remaining, if that's a yes, okay, let's get the next event off the list. And it's going to be the next event to occur. We look at it. We say, what kind of event is it? And let's move on to the next slide. So we're looking at this event that was just taken off the front of the list. We're saying, what kind of event is it? If it's a typical very small queuing simulation, it might either be an arrival event or it might be an end of service event. It could also be the closing event, remember, that was scheduled at the beginning before anything else happened. But we can ignore that pretty much. If it's an arrival event, you think about it, what happens when a customer arrives in a queuing simulation or in a queuing system? What happens? Either the customer is going to get into the service or the customer is going to get into the queue. If you're keeping track of the number of customers in the system, there should also be a flowchart element there that says, increment the number of entities, the number of customers in the system. And you may even need to keep that customer's arrival time so that when that customer is finished, you can compute time and system. But we're not worried about things like that right now because that's programmed inside the actual arrival routine. And we're really more interested right now in how the timing routine works, not in the details of what happens at each type of event. But in a macro level, on a larger level, yes, if we have an arrival, the arrival wants to know, can I go into service right away? Yes or no? If yes, we can schedule end of service for this customer and decrease the number of idle tellers. If there's only one, then the number of idle tellers is zero. On the other side, if the teller is not free, the customer has to be put into a queue at the back of the line if we're using a LIFO queue, rather a FIFO queue, first in, first out. And then when the queue is to move, when the teller is free, the person at the front of the queue will be taken into service. But before we finish with the arrivals, we have to schedule the next arrival. Because the only way we know that a next arrival can be scheduled at a certain time is by the fact that we have an arrival right now and we can generate a value from the inter-arrival time distribution. On the other hand, what kind of event, if it's an end of service, well, again, this is a discrete event simulation. What happens at this event when a customer finishes service, leaves the system? We can calculate time and system then, assuming we kept track of arrival. The customer member that has entities have attributes, so a customer would have an arrival time. And then we would ask, well, wait, maybe now that the customer went out of service, either the clerk is now going to be idle or another customer can go into service. So that's what that next bit is about. Is the queue empty? Okay, if it is, increment the number of idle tellers. If the queue is not empty, then we have to take the first person from the front of the queue, put them into service, schedule an end of service and calculate the time that that person has waited in the queue has been delayed without being served. In either case, if we've just had an arrival event or an end of service event, we want to go back to point A where we're advancing time because there's nothing else left to do. There are no more choices. Of course, if the event was a closing event, then we have to take care of some housekeeping bits that are related to the end of the simulation. This very brief lecture looked only at the aspect of a simulation model implementation that has to do with managing time. The read event simulations move over time. How is it done? We took a brief look under the hood to see what happens in the timing routine that must be built into any specialized simulation software tool. Thank you for joining this lecture.