Ladies and gentlemen boys and girls welcome to skip dictation live. I'm Sherman and in case you're new to the stream This is where you can ride along while I record my skip to shore So today we are going to be doing SCP 3307 title cornacopu ass Content warning today is going to be gross this skip is gross a lot of poop jokes and vomit jokes and scatological humor so If you don't like those kind of jokes if you don't like watching someone pretending to dry heave a lot This is this is gonna be a gross video But that's us near the end that so you can watch the first half and Get to the end of there. I'll warn you before that stuff's coming. The rest of this is pretty simple and As we read along you'll get out. You'll get an idea what we're talking about Starting at the top Let me pull up the live chat so I can see you guys's comments Remember for those who are new. I will check the comments in between takes Just because I have the notifications quieted that way they don't interrupt the recording so Now I can see the live chat SCP 3307 Let's give this a roll Drink drink drink right here. We go item number SCP 3307 object class Euclid special containment procedures SCP I Didn't like the way I said that s voice crack No good We want perfection in our art SCP 3307 is to be contained in a standard humanoid containment cell currently in site 17 The containment chamber for SCP 3307 is modified to allow for transport and disposal of produced materials through a garbage shoot installed on a wall in In order to limit production of unwanted materials Personnel are to avoid line of sight with SCP 3307 when outside of a testing environment if Transportation is necessary SCP 3307 must be rendered unconscious or otherwise made unable to detect the presence of any personnel interacting with it Food items produced by SCP 3307 outside of a testing environment are to be confiscated and destroyed immediately Just got clean with rope It's a bit of a Flemie day Lot of throat clearing grossness Don't want that to interrupt with the sound description SCP 3307 squeaky voice no squeaky voice description SCP So apparently today my kryptonite is starting sentences with the letter s because I try and high-pitched them and My voice does not want to do that today so SCP SCP Sometimes you just got to warm up a little more SCP Wake up voice wake up voice SCP 3307 description SCP 3307 formerly known as agent J Is a human rail a Human rail give that guy a cheeseburger. I'm glad it's a short SCP because I am a failure at reading today Wait, where was I even? J boob is a human male roughly 32 years of age SCP 3307 has no abnormal outward characteristics and is physically healthy However, when in the presence of any other human SCP 3307 will put will put will put its begin to produce food not Will put silly humans when will they learn? Never mind all that then SCP 3307 will begin to produce food or drink inside its body Which is expelled by vomiting or defecation This food forms in the stomach via an unknown process and Travels up the esophagus or down the intestines depending on the type of material created This process does not cause SCP. This process does not cause SCP 3307 SCP 3307 SCP 3307 This process does not cause SCP 3307 any physical distress as SCP 3307's internal organs appear to be able to expand to allow harmless transport of materials But can cause significant psychological distress as SCP 3307 experiences trouble breathing while expelling food through the mouth Since recovery SCP 3307 has not felt the need to eat and has been unable to stomach any food. It has been given Food items produced by SCP 3307 are edible and have roughly the same nutritional value as a normal food item would SCP 3307 is able to prove. I think the number is a tongue twister today For some reason I can't say 3307 SCP 3307 And also the word produce seems to be a problem. I think I see the word produce and I try and say it immediately Even if it's not the next word in line because I keep saying produce, but I keep skipping the words before it I think normal food item would SCP 3307 is able to produce virtually any food or combination of foods The type of food or drink created appears to depend on the individual SCP 3307 has been exposed to and is almost always identified by the individual as a comfort food or favorite food Solid food items are expelled through the mouth or anus in some instances Liquid food items are most often expelled in a manner similar to urination Due to the method by which food and drink items are produced most individuals report feeling disgusted by the process and will not willingly consume poop And will not willingly consume produced items. I wouldn't either It's gross. Hi, my name is agent J. Boop, and I am a human vending machine Disgusted by the process will not willingly consume produced items if exposed to multiple individuals at the same time food production will begin in the order Food production will begin in order of Appearance or something. We'll look in a second Cut and paste cut and paste Food production will begin in order of which individual was perceived first SCP Gosh darn it Got the morning stutters all over the place. All right, here we go SCP 3307 was recovered following a field mission on 11 23 During which Boop members of Mobile Task Force Theta 90 Angle grinders were exposed to a class 2 spatial anomaly Agent J. Boop was for approximately 30 minutes missing in action Having reportedly lost contact with the rest of his team after being pulled into the spatial anomaly I Fumbled the word anomaly there Didn't like it having reportedly lost contact. That's where we're starting up having reportedly lost contact having reportedly lost contact Having reportedly lost contact with the rest of his team after being pulled into the spatial anomaly Following this agent Boop was ejected unharmed along with what appears to be a decorative plastic cornucopia Which has since been confiscated After recovery of agent Boop and subsequent discovery of the anomalous effects and Subsequent discovery of anomalous effects agent Boop was designated SCP 3307 and contained Let's cut that little bit out. Nope not going with that little break Which has since been confiscated? Okay, I was gonna delete all that but that's a lot more good material. I'm just gonna fix that one line Mew everything Which has since been confiscated All right cut and paste that into the line so I don't have a pause in there Go ahead and continue All right, so the testing long is where things get gross so if you want to leave because I'm gonna start having to make vomiting sounds and poop grunts, I guess the best way to describe it then I bid you adieu have a great Afternoon check out my patreon on your way out If not Then it's time for the gross stuff This is the testing log. They're gonna send 2d class in to visit and it's gonna get gross. Oh boy Show testing log 3 307-14 be That ready open that tab 3 13 Personnel tested D 14892 and D 14873 note D 14892 was equipped with a cellular phone modified to only receive text messages from Dr. Reynard who was observing The who was observing Observing is a word. That's a word. You can totally say because it's a real word You're totally not gonna mess that one up who was observing via security camera placed in SCP 3307 containment chamber SCP 3307 was initially unwilling to cooperate and suffered mild Mild I Swear I'm gonna make an update an outtake video one of these days and it's gonna be amazing just cuts of every time I mess up saying things That's gonna be my bread and butter right there everyone's gonna be so happy at the Video of every time I said a word wrong But they were produce a core Was unwilling to cooperate? Yes unwilling to cooperate as was my vocal cords and Suffered mild psychological distress during and following the interview begin log D 14892 and 14873 enter SCP 3307 containment chamber SCP 3307 is sitting at a table with two plates two glasses and cutlery SCP 3307 has closed its eyes and covers its ears Trat All but that last line Alright, I warned you guys. We're getting to the gross part Leave now or whatever you witness is your fault. I mean it's technically mine because I'm recording it, but You're choosing to watch so who's the monster? SCP 3307 has its eyes has closed its eyes SCP 3307 has closed its eyes and is covering its ears So are we having lunch? What was this guy? Beats me. I didn't see any Cell phone beepy noise hold on they're sending me something All right, so I get to decide on the voices of these d class.  Who's this guy? Beats me. I didn't see any. Oh, hold on they're sending me something the message reads approach SCP 3507 Make sure it hears you. D14892 conveys this message to D14873. Wow. Say that once, let alone three times fast. Cut that, lock it up, and let me listen to how those voices were. Close its eyes and cover its ears. Who's this guy? I didn't see any, oh, hold on, they're sending me something. The message reads, approach SCP-3307. Make sure it hears you. D14892 conveys this message to D14873. Last chance. Final line before it gets gross. D14873 is the normal guy. D14892 is the low voice guy. D3 is higher than 2. That's how we're going to remember this. Okay, then. Hey, you hear us? Let's make sure that didn't clip. Alright, let's see if I can amp that down so it doesn't clip. Because I want it to sound like a yell, so take it down a notch. So I get it out of the red. Okay, good, that works. Yes. Alright, and here comes the cursing, yelling, gross sounds. Let's have fun, shall we? Oh, got to get in character as a terribly upset person. How'd that sound? You know what? I don't think it sounded like enough dry-heaving. I think we need to... I'll let that sound again. We'll amp that way down, just like that. And we'll put the stage direction over the sound effects that'll help it a little. Gosh darn. Then I'll just record them all on one track now and I'll layer them later on. I'll do that in editing. I'll fix it in post. Low voice guy. Alright, narration. SCP-3307 begins to dry-heave. D-14892 and 14873 back away quickly. Okay, I gotta go back and listen to what that guy sounds like, because I think I just did a lower voice. I don't think I actually gave him, like, a particular character. Where was he? Who's this guy? I didn't see any. Alright, so I need to make these guys' voices a little different. Thankfully, yelling guy is going to be very different the whole time, because he is vomiting and pooping food and grunting about it the whole time. So he's going to sound very different. But these two guys need to sound different. So are we having lunch? Who's this guy? Beats me. Natural character voices. Natural character voices. Who is this guy? Who is this second guy? Who's this guy? I don't know this guy. I didn't see any. Oh, hold on. There's something. I know what that is. I just gotta keep him low. I just gotta keep him low, register.  Are you okay, man? Beats me. Beats me.  Alright, that's the voice for that guy. I didn't like that take, but I like that voice. So let's pop back a minute. Pop in back. Pop in back. Beats me. Alright, let's mute that. Hit the button. Beats me. I didn't see any. Oh, wait. Hold on. There's something. Nope, didn't like that take. Beats me. I didn't see any. Oh, wait. Hold on. There's something. Alright, now we cut that, paste it over the other one. Now those two should sound different now. Good, they sound different now. Put it at the end.  Are you okay, man?  SCP. Oh, well. That really took a number out of my... You can hear my voice starting to gravel a little bit. That really knocks the wind out of any sails you might have of a... What's the phrase I'm looking for? Doing a nice, proper SCP voice next. Oh, that's gonna be terrible. That's gonna be bad. Gross. Gross. You're gross. You're gross. I can't believe you made this. SCP-3307 expels a small amount of mashed potatoes onto one of the plates and begins to leak gravy from its nostrils. Both of these are extremely runny due to coming in contact with saliva and mucus from SCP-3307. Good. I mean, not good. Gross, but good take.  What is that shit? Continues to expel mashed potatoes for one minute before abruptly straightening up.  Points angrily to D14873. This is your goddamn favorite food. What else? What are you talking about? What else is your favorite food? I can feel it! SCP-3307 straightens up again.  SCP-3... God, damn it. The things we do for art. I must have hit something because I'm getting some, like, really bad popping on that. Gonna have to do that line again.  What is that shit? I'm gonna paste. Alright, we got rid of that flaw. Let's move on. ...for one minute before abruptly straightening up. Continues to expel mashed potatoes for one minute before abruptly straightening up. So abruptly straightening up seems to be like this thing in the stage directions they want to say, but I gotta add an SCP-3307 in there. So... Mute that. SCP-3307. SCP-3307. Continuing on. SCP-3307. Continue. Cut that little break out there while I'm here. Sometimes I make small edits along the way just to quicken up the process. Good, that's clean. Nice. I don't actually think we need that pointing as a stage direction. I think it slows down the flow. That's really sad. God damn. Alright, here we go. Here, here we go. This is gonna be a thing. SCP-330... SCP-3307 begins to defecate two fried chicken legs, taking roughly one minute to complete. Following this, it places the chicken legs on the same plate as the mashed potatoes. Well, the next part of this, I... title. Poopin' Sounds. Angry Poopin' Sounds. Are you ready for Angry Poopin' Sounds? Because it's time for Angry Poopin' Sounds. I'm doing this for you. I hope you're happy. I'm just trying to... find the mental headspace of a man who is currently pooping two chicken wings. Sorry. Legs. Two chicken legs. It's very different shape. It's very important that that distinction is made. Angry man pooping chicken legs. Flowers. Flowers. Those beautiful arts that we're making. I would like to thank the Academy. I'll be awaiting their call. My artistry knows no bounds, apparently. Darn. Darn, darn, darn. Alright, next up is Low Voice Guy.  Let us out of here. Yeah, please. Let us out of here.  Let us out of here. What did you put us in here with? We're gonna amp those down. Hide the yelling. Hide the yelling. Now, like, stack those. That way, they kind of talk over each other. I'm gonna need a text message sound effect. A royalty-free text message sound effect. So earlier it said, Hold on, I'm getting something. The message reads, Beep, beep, beep, do. The message reads, Please remain calm. Return to the table and wait until SCP-3307 has finished expelling food. SCP-3307 expels Cherry Cola into the first glass and gestures to D14892. Alright, you're next. Let's just get this over with. What is it? A cookie cake and beer? This isn't gonna end well.  Over the course of the next three minutes, SCP-3307 vomits a large slice of cookie cake, which is crumpled and covered with icing, and produces beer from its nose. These are placed onto the plate into the second cup, respectively. D14892 and 14873 begin to panic, but calm down once the process has completed. There is a short pause.  Whenever I see or hear someone, this happens.  Why?  I was on a mission, and I slipped up, and ended up falling into some kind of ripping space. A few minutes later, here I am. No idea how this happened. All I remember seeing is something.  Happy Thanksgiving, I guess.  End log. Afterward, following this, D14892 and D14873 were both allowed to leave the containment chamber. Both were emotionally dis... Really, I got through all that, and the word distressed is what kills me. I'm gonna have to backtrack through that real quick, because I need to make sure the amps and no slip-ups. So, let's, uh, prepare to fast forward, preparing to fast forward. Fast forwarding, fast forwarding. As finished expelling food, 307 expels cherry cola into the first glass, and gestures to D14892. I have to get a sound effect of someone peeing into a cup now, because of this SCP. And well... That's how I feel, buddy. That's how I feel. All 07 vomits a large slice of cookie cake, which is crumpled and covered with icing, and produces beer from its nose. These are placed onto the plate and into the second cup, respectively. D14892 and 14873 begin to panic, but calm down once the process has completed. There is a short pause. Whenever I see or hear someone, this happens.  Why? I was on a mission, and I slipped up, ended up falling into some kind of... Even this later, no idea how this happened. All I remember seeing is... something.  I think it meant to give us some sort of gift. Happy Thanksgiving, I guess.  Following this, D14892 and D14873 were both allowed to leave the containment chamber. Alright, we got through that section. It's the last paragraph. Let's lock it down, finish the job. Both were emotionally distressed and were suspicious of any food given to them for roughly two days. Further interviews regarding SCP-3307's perception of its intended purpose may take place in the future. Food items created during the duration of this test were disposed up by use of the garbage chute. Views regarding SCP-3307's perception of its intended purpose may take place in the future. Food items created during the duration of this test were disposed up by use of the garbage chute. Alright, that is the end of that. So... Well, hi. If you stuck around this long, I hope you enjoyed the show. That was SCP-3307, the cornucopia-ass. I'm gonna get to editing this and it shouldn't be up and running. Probably within the hour because then again, this is another nice short one. And these don't take too long to edit, even with a little bit of sound effect work. So, thank you for joining me. I hope you have a good rest of your day and I will see you at the next live stream. Make sure you check out the rest of the videos in the channel as well as my Patreon. Everything is TheSherm, T-H-E-E, SHERM. And this has been Skip Dictations Live. See you guys later. Turning off the camera now.


I wanted to take a moment just to remind you of the power of simply being there when a child or indeed an adult is distressed. I was asked today by someone about how they could help their suicidal teen, their teen doesn't want to talk and they feel helpless and they don't know what to do and when I asked my network for their advice and you're all brilliant and thank you for sharing your ideas. One of the things that came back really quickly was advice from other parents who'd been in a similar situation saying just be there maybe she doesn't want to talk but just be there with her by her side and be in silence with her and this is true not just if you are with a suicidal teen but if you are with anyone who is distressed in any way sometimes we can't fix things sometimes we can't change things but what we can always do is be kind and caring and compassionate and there when we stay physically and emotionally present with a child or an adult who is distressed it's so powerful and it helps them to stay connected and over time it builds that bond builds that trust and will create the kind of place space the connection that's needed for that love to be kind of truly felt and for things to begin to shift a little so even if you can't completely change the situation even if you can't fix things and you have no advice to give sometimes just remaining in the room just being there with those big feelings that someone has just remaining present physically emotionally mentally being available to them and not being scared by their distress sitting with them through it can be hugely hugely powerful what people will find often really powerful and this is particularly true of children and young people or indeed adults who have had perhaps chaotic relationships in the past who might not have formed strong secure attachments with people and might not know that they can rely on others they might find it difficult to trust and to feel safe in the company of others just being there providing unconditional care unconditional love unconditional friendship in the face of their distress sends such a powerful message and even if they are someone who has repeatedly felt let down distance pushed away and then you can begin to help the change that needs to happen happen i could go into the neuroscience of it but basically every single time that someone realizes that you are not going to run away from their distress that you are there that you're going to be consistently there just quietly caring begins to help their brain to rewire essentially and that's a really really powerful thing so just by caring just by being there just by staying in the room you're making so much more difference than you think


This is stock number 20T71A. We are here at Summit Automotive in Fond du Lac, Wisconsin. You're new and used RAM and light duty truck headquarters. Today we are checking out this super clean 2019 RAM 1500 crew cab, six foot four inch box, long horn. This truck has the legendary 5.7 liter V8 Hemi motor. It has been fully safety and inspected by our service shop has a fresh oil and filter change. All the fluids have been checked and topped off and this truck is 100% ready to go. White ivory tricote metallic over mountain brown metallic is the color scheme. We shoot all of our videos in 1080p 60 frames per second so if you have HD capabilities on your computer tablet or smartphone device turn them on right now because it is definitely your best way to check out the quality and condition of the vehicle before seeing it in person. If you'd like to check out all the photos on this truck in the upper right hand part of your screen is a link right to our website click that and check us out there. Comes with the 20 inch painted and polished aluminum rims, wild peak falcon 27560R20 tires with right around half the tread left on them. Front fender is in excellent shape. I didn't see any dents or dings on that. It does come with the LED headlamps, the LED running lights and the LED fog lamps has the front bumper parking sensors. No major dents or dings on that bumper. Front grille is in nice shape and the hood is in nice condition as well. I didn't see any dents or dings on there. Passenger side front fender is in excellent condition as well and the passenger side rim no scuffs or scrapes on that. As you go down this side of the truck, take note of how clean the body is, how reflective and mirror like that paint is. We take these HD videos so if you are far away or even if you're close by and just cannot make the trip down you can still see the truck here, the truck and have confidence in the vehicle that you're looking at before you even get here so that when you do get here there's no surprises. No dents or dings in the box and the cab is in excellent shape. That's why we offer the Summit Auto Fastpass option in the upper right hand part of your screen. A link right to our website where you can apply for financing, get pre-approved, see a payment quote even up for you as a trainer, all from the comfort of your own home. So when you get here all you gotta do is drive the truck, love it and you'll be all set to go, frame it on your body looks really good. And this back rim is in really nice condition as well. You'll know that notice that the inside painted part is the exact same color as the lower fender flares and bottom of the doors there. Back tires have just as much tread as the front tires as we come around to the back of the vehicle, the rear bumpers in really nice shape. I didn't see any dents or dings on that. As the dual exhaust, chrome tipped, full towing package which includes receiver hitch four pin and seven pin wiring and that tailgate is in excellent shape as well. You can really see the metal flake in that paint if you have your HD capabilities or not. It has a shock down assist tailgate, spring and bed liner, bed rail storage system with the tie down cleats and the LED bed lighting. No major dents or anything back here and it does come with a mopar hard fold up tonneau cover. That is in really nice shape as well. As you go down the driver's side just as clean as that passenger side, no dents or dings on the box. And for full disclosure this back rim is in excellent condition as well. It does have the capitalist feel fill which is a really nice feature if you've never used that. You're going to love it. Driver's side door is excellent condition as well.  This one has the entering-go system as well as the power pedals. Inside you get the two-tone mountain brown and light brown leather interior part of the longhorn package. Both these seats are heated cooled and power. Driver's side lumbar, you get the factory all-weather floor mats, auto headlamps and power pedals. Power windows, power locks, power mirrors, power folding mirrors. I always like showing that both sides are working good and you do get this kind of a goldish bronze trim throughout and then the real wood grain trim on the doors there. Auto headlamps, power pedals. As we hop inside here I'm just going to turn the air down just a little bit. You can see that this one has 30,843 miles. You do get the digital speedometer, outside temp and compass display. You get the heated leather wrapped and wood grain trim steering wheel. This one does have all the goodies on it including adaptive cruise control. There's your new normal cruise control, gear selector, Bluetooth and information center controls and then you get audio controls on the back. You do get the 12 inch Uconnect 4C radio, AM FM and Sirius XM radio capabilities. This one has the factory navigation system on it. You can also do android auto and apple carplay to project your cell phone to the screen. This is also where your backup camera and 360 cam are going to show up and you can check out you know basically any camera you want front. That's a wide shot. This is a narrow shot and then you can check out your normal backup camera and then you can plus it to go right over the receiver hitch which is pretty cool as well. So you got all that. You have your lane departure, your perpendicular and parallel park assist. You got that real wood grain trim on the top there, more of that bronzes, gold trim up there as well. You can turn your step bars off, heated cooled seat buttons. There's just a million things you can do with this radio and it's really cool stuff. AM FM and Sirius like I said and then you can do your climate controls as well. Down here you have your factory brake controller, your four-corner air suspension so you can raise or lower the height of the truck, stability control, tow haul, front and rear parking sensors, you can turn those off and on. This one still comes with a CD player, two USBs, two USB C's and an aux jack. You also get the RAM wireless cell phone charge pad, 115 volt 400 watt plug-in and you got your cup holders here.  More wood grain trim throughout, passenger seat and floor mat are in excellent shape. I don't think this truck's ever been smoked in, passenger seat is in great shape and then it does have the power vista roof and that sunshade goes all the way open for the full panoramic roof here. Headliner is in great shape. Up here you get your SOS and assist buttons, map lights, power drop-down tailgate, you do get your home link buttons up there and your auto dimming mirror. Lots and lots of stuff to go over in this truck. We could spend a half hour going over pretty much everything in this one, but we only got 10 minutes so we'll go as fast as possible here. Don't mind the bee that just flew in the truck here. Back seats are heated and cooled as well. You get the power slide rear window with the built-in rear defrost and you got the speakers and the ceiling, part of that Harman Kardon sound system, no rips or tears on the seats back here. You do get the latch child safety system. These seats do fold up for extra storage. You can see you got the nice flat floor back here, in-floor storage on each side with removable containers for easy cleaning. You got the rear saddlebags that are actually strapped in. There you heated and cooled seat buttons for the back seats and then another 115 volt 400 watt plug-in. These seats do recline. You got to have two hands to do it, so I'm going to not do that. Has the child safety locks on the back doors and of course the bottom of the doors all look really good on this truck. Power running boards work really good as well. See they go up nice and smoothly and we'll take a quick look under the hood. I would personally like to thank you for checking out the video today and hopefully from this HD video you'll have been able to tell just how clean this truck is all the way around inside. Under the hood we have the 5.7 liter V8 Hemi motor. Engine base very clean runs, very smooth. This truck has been fully safe and inspected by our service shop. Has a fresh oil and filter change. All the fluids have been checked and topped off and this truck is 100 percent ready to go. See more pictures of this truck or one of our other 450 new and used cars, trucks, SUVs, minivans, wranglers. You name it, we got it.


Why am I so excited for Hocus Pocus 2? Great question. Didn't ask it. Don't care. The witches are back, baby! Betmedler, Kathina Jimmy, Sarah Jessica Parker.  Why? Candy! I love Halloween! Especially watching kids go trick-or-treating. Weird thing to say. I'm excited to watch Hocus Pocus 2 so you can see other kids trick-or-treat in a movie. Not everything needs to be explosions. The costumes, the pageantry, the frights, they're all there. For our delights. Alright, man. Nostalgia. Are you still listing reasons?  Yeah, you might not know this, but Hocus Pocus 2 is the sequel to Hocus Pocus. So you might want to Hocus Focus and remember that little tidbit, Mr. Holland's Opus. Who wouldn't know that? The first movie came out in 1993. Now, almost 30 years later, us real fans get to finally see the sequel we've always wanted. It's just sequels decades later almost never work, especially in comedies. Oh really? Tell that to Dumb and Dumber 2. Tell that to Zoolander 2. Tell that to Coming to America. I think you're making my point for me. Don't get your knickers in a twist. I'm just excited, okay? Fine. What was your favorite part of the first movie? Oh, I've never seen it.


When somebody cooks a meal for you, and they spend a lot of time cooking that meal, it's a way that they are showing their love for you. And I think that when you harvest your own meat and then you cook it for somebody, that's amazing. In my mind, this is like the true organic movement. Pursuing your own food and having the hands-on experience in every step of the process. Harvesting wild meat is one of the healthiest things that you can do. You're out of nature, you're going up and down mountains or swimming in the middle of the ocean. As humans on this earth, we have a relationship with earth. We have a relationship with nature, and you need to give time to nature in order for it to give back to you. My name is Eric Sun, I'm a hunter and a chef. I went to UCLA for college as an English major and I really didn't know what I wanted to do professionally as a career and just fell in love with cooking. You're experimenting, you're learning with different ingredients and different techniques. We met at a restaurant before this one. It was called Angelini Osteria. He had dinner there and he wanted to meet the chef and we had a conversation.  His approach is very different than any other chef and it's because he hunts all these animals and not to over complicate it with too many different flavors, but to let the main ingredient shine. I met Ori and I told him, hey, I'd love to bring you some fish and lobsters for you to experiment with. And so I dove all night. He said that the lobster was the best he's ever tasted. Whatever he puts on the plate is him and when you're yourself, the food tastes much better. Ori's my friend and he wanted to open a restaurant and he was looking for help with funding and so I helped him with some funding. For two years before I opened, we hunted at least three, four times a month. So for me, that was a big thing of knowing how the product is supposed to taste like when it's not farm raised. When I was 12, I was on a boat and I was fishing with my friend and we weren't catching diddly. And then I saw his dad go into the water with scuba tanks and a spear gun and come out with a lot of fish. So I just thought that maybe I should go into the water and be more aggressive. Freediving is really interesting to me because it's the ultimate hunt.  I think in order to be successful spear fishing, you need to become one with the water and you need to learn what's going to attract the fish. And you really need to know the area that you're hunting, whether there's a lot of pressure where the currents are coming from. And you need to know the underwater hunting grounds, if you will. I think that a lot of people grew up fishing, so I think it's easy for people to kill fish. But I think hunting is something that is not as socially accepted because maybe people haven't been exposed to it. I grew up with dogs and rabbits and I love animals. You know, seeing death is not pretty, but I think that if you want to eat meat, I think it's an important part of the process. I'm from California, a lot of people are anti-hunting and maybe they believe that nature should be untouched and people shouldn't hunt. Domesticated livestock has the sole purpose of providing a sustainable constant food source. And they feel that wild animals should possibly, you know, not be hunted as much for food. Some people think they should only be trophy hunted. Other people think they should only be hunted for sustainability and for meat. But I think that hunting itself has a great, you know, choice for people. I like to honor the animal by sharing the food with people that I care about. And I like to honor the animal by cooking it in the best way that I know how. I think that's an important part of food culture today. Yeah, what's next is opening my own restaurants in San Francisco. Eric has been my friend for now like eight years and we cooked a ton of food together. It's going to be a very happy day when he opens his place. I think my hunting and fishing philosophy is transferred to the restaurant in the respect that we're always trying to source the best. Something that tastes like how it should. And I only know that because I've hunted. Hunters and fishermen pour a lot of dollars into making sure we have adequate funding for conservation programs. But I think that with hunting you're able to control the population and to make sure that people are getting healthy meat. But I think that it's the pursuit of food. This is like true organic. What Eric's doing with his restaurant business and with his website and what he promotes is extremely important. This is natural and it is sustainable. I think food is love. I think that when you make food and you harvest the food or you grow the food as a farmer, a lot of dedication and skill goes into it. So I think that's what excites me that it's really the people at the heart of a restaurant is the food and the people and being able to connect with different people over food. I think that's a way to show love through food.


Russia sacrifices 400 soldiers for every square kilometer of Ukrainian land. In approximately two months, Russian invaders lost over 54,000 soldiers in attempts to advance in Ukraine. Kremlin sacrifices about 400 of its soldiers in exchange for one square kilometer of Ukrainian land according to Ukrainian Defense Minister Rustam Umarov. During the 18th meeting of the Contact Group on Defense in the Ramstein format, Rustam Umarov stated that Russia had sent thousands of soldiers to their deaths. On average, they sacrifice 400 soldiers in exchange for one square kilometer of land. Since our last meeting, Russia has lost over 54,000 soldiers. However, the enemy has unlimited mobilization resources, Umarov said. The Minister of Defense also commented on the strategic results of enemy advances, including the situation in Bakhmut and Marienko. It can hardly be considered an achievement that Russia's vast military-industrial complex, the entire army of the aggressor, captured the ruins of two cities, Bakhmut and Marienko for a whole year, he said. However, Umarov noted that the enemy did not cease offensive actions along the entire front and throughout Ukraine. The enemy used six times more artillery shells than Ukrainian forces. Despite its resources and the advantage in weapon production, Russia has not come closer to its strategic goals. The entire Russian military machine is working at full capacity to attack small Ukrainian villages, the Minister said.


Web apps can now communicate with nearby Bluetooth low-energy devices using the web Bluetooth API. Position sticky is back, making it easy to create elements that scroll normally until sticking to the top of the viewport. And HTML5 by default is enabled for all users. I'm Pete LaPage. Let's dive in and see what's new for developers in Chrome 56. Until now, the ability to interact with Bluetooth devices has been possible only for native apps. With Chrome 56, your web app can communicate with nearby Bluetooth low-energy devices in a secure and private manner using the web Bluetooth API. The web Bluetooth API uses the GAP protocol, which enables your app to connect to devices such as light bulbs, toys, heart rate monitors, LED displays, and more with just a few lines of JavaScript. Web Bluetooth can also be combined with physical web beacons to discover and control nearby devices. Francois has a great article on updates, and be sure to check out some of the cool demos that go along with it. Previously, building content headers that scrolled normally until sticking to the top of the viewport required listening to scroll events and switching an element's position from relative to fixed at a specified threshold. It was difficult to synchronize and often resulted in small visual jumps. Chrome now supports CSS position sticky, a new way to position elements. An element that is position sticky starts relative but becomes fixed after the element reaches a certain scroll position. Simply set position sticky and set a threshold for it. Paul Kinlan has an update post about it linked in the description. Last August, we announced that we'd be moving to HTML5 by default to offer a safer and more power efficient experience. This change disables the Adobe Flash Player unless there's a user indication that they want Flash content on specific sites. And eventually all websites will require the user's permission to run Flash. In Chrome 56, HTML5 by default has been enabled for all users, which means that they will be prompted to run Flash on a site-by-site basis for sites that they've never visited before. More details about how and when users will be prompted and recommendations on how to test your Flash site are linked in the description below. Of course, there's plenty more. WebVR is available as an origin trial, the WebGL 2.0 API is now available, and the Payment Request API has a variety of new features. Check the description for more details and links to documentation and specifications. If you want to stay up to date with Chrome and know what's coming, be sure to subscribe and follow ChromiumDev on Twitter. I'm Pete LaPage, and as soon as Chrome 57 is released, I'll be right here to tell you what's new in Chrome.


Welcome everybody to this first server Academy of 2021 and the first online server Academy ever. I think we've got quite a lot of attendees. I think the registered number is up to 70. So this would be quite a, it's going to be quite an interesting one to manage. Let's start off by, first of all, just introducing myself and the program. And we'll talk a bit about the modality. So as well, who am I? My name is Bob. I'll be presenting the sessions for the next two days. I know quite a lot of you on here already, but those don't know me. I went to the University of Oslo in various roles, I suppose, primarily interested in strengthening country server implementations and issues around security and interoperability. I guess I also end up being sort of Chief Troubleshooter when people get into performance issues or other problems on their servers. I'm always reluctant to call myself any kind of expert, certainly not the expert. We've got a lot of people in this group who I know are very competent in various aspects of server administration and other things. There's a few notable folk I'd ask you to look out for on the slack. We've got even Alkaya from Hisp Uganda. Clement Dajo from Hisp, Western Central Africa. Morton, one of the lead developers in Oslo, Haime, who's the main Android developers. Travis from Hisp Nigeria and Tuzo from Hisp Tanzania and others. I just noted a few of the names coming in as I came in. So we've got a lot of participants and that raises some challenges of course, but I think also it's an opportunity to grasp because we can take advantage of the various skills that we have on here and during the course of the program. I hope that people will be able to help each other out as much as possible, rather than sending direct messages to me all of the time. So yeah, this is the first time we've ever tried to do this. It's a bit of a challenge. I've never done it before. I've certainly never done it before. So you'll have to bear with us as we as we make a few mistakes here and there. As a lot of participants, usually we do this Academy over a period of four or five days in a particular location, around about 20 people. It's kind of very intense. People with a virtual server to work on during that. And we have a lot of interaction after hours and things like that. This is going to be quite different. We've got more numbers. I know, even though we tried to make clear that this is not a beginner's introduction to Linux course. It's really a training for people who already experienced with Linux, preferably already managing the DHS to servers to introduce them to to. So maybe some additional ideas, perhaps up the skills, things like that. Yeah, so we decided that the primary means of communication that we're going to use is is slack. And I think Alice Martin should have added you to the to the slack. As part of your registration process. This is what we plan to do. Okay, the full program. We've decided to stretch it out over four weeks. That doesn't mean we got zoom calls every day. We're going to have today and tomorrow. A bit of orientation that's what this is. A couple of presentations and and a lot of a lot of demonstration. And over the next two weeks, then that'll be your opportunity then to practice yourselves on your own virtual server. Talk a little bit about that in a minute. Your opportunity to go through the material and practice yourself. Then we'll have another zoom call. Two weeks time. Where we have the opportunity possible to cover a couple more topics and we also have an opportunity to catch up with where people are with a practical work. Then we'll take a break again for another two weeks. Again, you can be involved in practical work what we usually do with the face to face academy. We suggest a few topics for for small projects which are aimed at kind of different skill levels. People can self select to have a go at doing some slightly more extended practical work. So we'll do that. I think in the in the following two weeks. And then we have an opportunity again for a final final zoom half day where if you notice on the program. I've actually left out the topics to be to be discussed in the first two sessions of that day. We can decide ourselves as a group over the next couple of weeks, which topics people want to go into more depth in. Or to explore further or things maybe we didn't cover sufficiently or run out of time. And we can fit in there. That's basically what we're going to do we're going to have a little bit of this as kind of synchronous presentation webinar kind of thing. But I think most of the actual work is going to be done in the in the time in between. So during that time. Hopefully, people will be able to discuss raise questions raise issues etc over the slack. If I talked a bit about the slack. Okay, we'll get about slack. But first of all, the server. I can see that Steven raised with me this morning already. There's been a rush of questions about about the server what do you need to be able to to do this. So what I've laid out here. What might be able to change this a little bit, but in order to complete the exercise in the same way that I'm, I'm going to run through them myself. A blank server that means with no additional software installed other than will go into 2004 LTS. Ideally, you want four gigabytes of RAM more if you want to play around with with running multiple instances, eight gig is probably more comfortable. It's not so it won't be sufficient to just run this on your laptop. Right, you need to have a public IP address. The reason for that is twofold. Firstly, that's, you're going to be able to set up SSL certificates on your on your server. Now to set up SSL or TLS, you need to, you need to have a public IP address and you also need to have a domain name mapped to it. And so that's a little bit of infrastructure setup that you're going to need to do. The other reason for putting it online is that it also gives us an opportunity to be able to check what you've done. So once you have your server up and running, it's possible for me or others to go in and have a look at it. How do you get yourself online? Well, it depends. I mean, some of you may be working in environments already where you're able to to put yourself up a virtual machine. The easiest way is probably to go is to use a cloud provider of some sort. And many of them probably most of them now because they're all competing with one another will provide you some free starter credit to get going. So I know, for example, Linnode, if you sign up for account on Linnode, they'll give you $100 free startup credit. And to run a four gigabyte RAM server on Linnode will cost you $20 a month. So that would that would basically get you going. I know Google also offers free credit. I think I think digital ocean others. Stephen is the expert on the cheapest possible service. I'm not sure if I'm on table. I know is a favorite of Stephen Kaya SSD nodes. I think it's even cheaper. My personal favorites and one I always recommend I guess is Linnode. Partly because I think it's, it's very reasonable cost per performance. Also, we have a good, we have good contacts. We have an executive fellow by the name of Fred Weston, who has an interest in the in the project and generally is available to help people out when they get stuck. So, yeah, I would suggest if you haven't got yourself a cloud provider of choice. And have a go at the getting started, make yourself an account on Linnode, and you can get yourself a free Linnode for a couple of months to work with. That's also the environment which I'm going to be working with with the demo. Having said that, pretty much any other any other cloud provider would do. It is theoretically possible to, to run it offline. But there's quite a few changes I would need to make to the setup scripts to make that work. Partly because we've tried to create a set of installation scripts which, which are kind of secure by default so to make it easy for people to set up. HTTPS on their server and to make it difficult not to. It was a deliberate design decision before it was, before it was quite difficult to, to, to set up the HTTPS and there were a lot of servers out there who were just running on encrypted on the web. Fortunately, nowadays I think it's far fewer, pretty much most of the servers I come across people have got them configured securely or reasonably securely. There's still a few that you can find but you're not running HTTPS. So there is a channel in the slack. I mean, I'm going to have a look at some of the slack channels in a minute. There is a channel in the slack which we have dedicated to, to questions and information and what have you around server setup. So I'm going to suggest that if people struggle with that, that they raise issues in that channel and so we can all work through it together. Don't panic in the sense that if you don't have your virtual server up and running now, you still have two weeks to complete your assignment. So obviously the sooner you get it up and running the better, but if it takes a couple of days to sort things out, then you still should be able to complete. The DNS record is, is something again, we're kind of hoping the most participants on here are have some Linux networking experience. I hope you know how to create yourself a DNS record. You need to have access to some domain in order to be able to do that. Again, if there are questions and difficulties around that, I think we should talk about them on the on the slack channel. Which comes the next point on here. The other thing you need beside your virtual server is your account on slack. I think Alice or Martin should already have set everybody up. I think that was part of the registration process. And what we're going to try to do is to keep all of the discussion and links to material and things like that on the slack. For that reason, I think Martin has even disabled the zoom chat. When we do chat, we try to keep all the discussion on slack that makes it easier to to look back on to have extended discussions, which last longer than a zoom session, things like that. The other thing that you need will need is some kind of SSH client on your computer. Preferably open SSH. I know a lot of Windows users are fond of something like putty for SSH. Set up with putty. There's certain things with putty which is a little bit tricky to do. I think if you can run open SSH on your on your computer as a client, it'll be a little bit easier to follow what I'm doing because I'm also going to be using open SSH. There are various ways on Windows to do that. You can either probably the easiest thing is to run a Linux virtual machine on Windows and use that as your as your client. You also need to have a pair of SSH keys or public key and a private key so that you can set up access to your server using keys. Let me just break from the slides a little bit and look at slack. This is the slack environment that's been set up for us. And slack has a number of channels and we see we created one here called cloud service. Let's ask if people have particular questions queries problems if they get stuck or suggestions or what have you related to the whole business of getting their server up and running. Put all those questions and discussion in here in this particular channel. I'm told just because of the way that this slack thing works, that people don't necessarily see aren't automatically joined to these channels that they will have to actually browse and join join the channels. So how to join a channel. I think. Let's just see as Alice on this. Bob map shoot something in. Yeah, please do. Yes, above the channels to see there's something called more channels. The three dots above the channel is on the left side. Oh yeah. If you click on that more channels. Yeah, you should be able to see the list of the whole channels. Okay, I think I'm seeing the list of all channels already. I'm seeing the channel browser. Yes. Each of the course can also navigate here and manually join any channel that you missed so far. That's all thank you. Yeah. Okay, thanks Martin. Hopefully everybody got that so when you go to that if you go to the captain you don't see all these same channels that I'm seeing. We're there to the three dots on more than you can find the different channels. So we have this one which we should find, particularly if you're having issues with your cloud server. Then for each of the presentations or sessions. We've decided to make a separate channel for each one so this morning, besides this little overview will be talking a bit about overall architecture. And so questions about this morning's presentation, ongoing discussion, etc. Link to the slides put into this particular channel afterwards this morning we're going to be talking about LXD so we made a separate channel for that. And then afterwards this morning we're going to talk about the installation. So this is the, this is the pattern we're going to try to follow. See how well it works. We know by the end of the day if it's a disaster or not we may have to change our approach. You can see quite a lot of people are sending have sent me direct messages already. Please bear in mind that there's quite a lot of people and probably not going to be able to answer all of my direct messages. So, yeah, as much as possible, make use of the channels for discussion. So I think the introduce yourself channel a lot of people have already discovered and have started introducing themselves. That's great. I know quite a lot of you already quite a lot of you I don't. I'm going to read through the introduce yourself channel this afternoon get a better idea.


If you feel peeved, you feel angry or annoyed. So, does pet peeve mean you are annoyed at your pet? I'm sorry, Anna. Can you not do that? Whistling is a pet peeve of mine, and I'm trying to read. Dan, do you know what my pet peeve is? Someone who needs complete quiet when they're reading.


I promise to statement, I have a statement. Today's meetings have been extremely productive. There's a strong sense of unity in the alliance as reflecting the statement on conventionally imbalanced in Europe. This document is a major step forward for the alliance. The most direct threat to our security and to stability in Europe lies in the Soviet Union's massive military presence at a level far exceeding its defense needs. First, effective defenses are vital. We are determined to ensure that the alliance's defenses remain strong. We'll continue to cooperate on better and more efficient ways to maintain our defenses. Second, we also seek to strengthen stability through effective and verifiable conventional arms reduction. Large asymmetrical reductions in the Warsaw Pact tanks of artillery, which pose the greatest threat to peace are essential to meeting this goal. But arms reduction is not enough. Arms are only the symptom, not the cause, of the political division of Europe between free and unfree societies. In addition to arms reductions, we also look for greater respect for the human rights and fundamental freedoms on which lasting security and stability in Europe ultimately depend. During my meetings in Brussels, I have kept close watch on the situation in the Middle East. Secretary Schultz briefed me fully on his negotiating efforts, and it's clear all countries in the region believe it is useful for the United States to remain engaged in this process. We'll spare no effort in our search for a comprehensive peace settlement. I have directed Secretary Schultz to return to the Middle East tomorrow to continue his discussions. Mr. President, if I asked you earlier, some critics are saying that it's just some of your papering over some of the real differences within NATO about burden sharing and what to do about modernizing the short-range nuclear routers. Well, I have to say, Chris, that is, that's the only question I'm going to get. That's where it's warm now, but that's the only question that actually there's no foundation for the questions. There are no great fundamental differences there. I have never seen such fundamental issues togetherness as we have. And all of the statements that were made today and every head of state had an opportunity to speak, you know, all of the supporting of what's going on and what we're doing. Well, Mr. President, did you agree about anything, all those hours? Here's the conventional arms, uh... Mr. Secretary, I need a job to handle this. Mr. President, did you agree about anything, though, sir? No. No. Mr. President, what do you think that the Secretary can accomplish by going back to the Middle East when, in fact, he returned here last night with no concrete sign of progress there? Participate in what was going on here today, and now he's going back. Mr. Secretary, will you meet with a group of Palestinians while you're in the Middle East this time? Mr. President? I hope you're in the middle.


I would like to introduce Andrew Svetloff, and yeah, I think you know what he's talking about better than me because you are here, I'm just here for the next talk, but I'm very interested. Okay, thank you. Okay, guys. I'll try to make a simple enough introduction for IRGDP. I am Andrew Svetloff, I'm a Python Core Developer, use Python for 16 years and Core Developer for last four months. I took part in ICN-CIO development as a committer, and now I'm a maintainer for IRGDP, and after all, there are other libraries under IRGDP, and they are like Postgres driver, several IRGDP extensions, Redis driver, well, Redis is not 100% Python, Kafka, whatever. So, trust me, I know something how to work with ICN-CIO code. Why do we need a synchronous code at all? That's very easy. Now is the age of microservices, right? And let's imagine a classic situation. We have a client, it's a browser or client which goes through API, we have a front side and front side communicates with a lot of microservices, internal microservices and external services like Twitter, GitHub, Facebook, whatever. And this architecture, we usually should perform many parallel HTTP requests from our front side to microservices, collect data back, transform it and return to user. And we can use threads and we can use asynchronous code. These threads, casual machine can support about 1,000 threads, but with ICN-CIO, with lightweight threads, amount increases to 1,000,000. The server may support more than 1,000 threads, maybe 10,000, 100,000, that's top limit. But it's still low limitation. With ICN-CIO and any asynchronous network, it allows to scale more, it allows to do more parallel work and only if your parallel threads are your bound, it does help with CPU bound, CPU heavy tasks, but it helps very well. So HTTP is a library dedicated to work with web, HTTP from both side, server and client. It supports persistent connection, web circuits out of the box and many, many other things. I'll describe later. Zalabry has three years long story. At very, very beginning it was part of ICN-CIO, in the last time it was called Tulip. But we were asked to rip it out, we instructed it into a new project, HTTP, and it was a good decision because HTTP was very young on those days, it changes quickly. And we released 22 releases so far, it's much faster than IO-HTTP release cycle. It has 150 contributors, good coverage, so it's much enough library. Client API. Client API, some hard looks like request. It's not a total API copy, but it's part of it. Well, I believe everybody knows how requests work, maybe the most popular third party library for Python. We make requests, get call, get response back, ask for response status code, get response body, as text, as JSON, as binary files, streaming and so on. I'll translate it in IO-HTTP, no way, sorry. That's because in IO-HTTP we don't want to encourage bad usage practice. We had, you know, it's still work, I can write it but it's deprecated. Let's go further. Request has a session concept. Session is a container for cookie storage and for connection pool. And you can perform, get request session, return response back and ask for response text. Session supports cookie, keep alive for free, may make your system, I don't know how, three, five, seven times faster, depends on your networking and how long your server is from client. I highly recommend to use session requests every time. Unfortunately, the first page which user, documentation page, which user look when request documentation, don't encourage session usage. So the most part of request code, which operates with request, is not optimal from my experience. Now we have HTTP client code, we have a session, HTTP session, we have a get response but you see, we use async with, async contacts manager for handling resources, for aggressively closing all open resources, open connection, open response, everything. And it's async because it works in async. And we have a response here. For reading response body, you should use await syntax. Again because usually you have header, response header, immediately. And reading the whole response time or response body or reading by chunk takes time. It requires input out communication with server. So we require await here. Now I want to say couple words about coroutines. Relative complex concept, but for casual user, it can be divided into very simple rules. How to use it? So coroutine is function which is not def but async def. If you see async def, it means you have deal with coroutine. If you have to call coroutine, put await before the call, like await sleep or await function. And if your function contains await inside, it should be coroutine itself. So the function itself should be async def also. That's it. Next thing, the power of asynchronous approach, asynchronous way for making programs. If we need to fetch several resources in parallel, we can create several tasks. Task is a lightweight thread and execute it in parallel, wait for all tasks together, for all results, or use another async IO API for getting results as they are complete, completion order. And our fetcher will try to fetch both Google Chrome and Python or home pages in parallel. What does it mean in time? Point of view. Synchronous code, execute three fetches one by one in sync, in sequence. And obviously it's long. If we start three real threads in Python, thanks to Gil and other applications, the threads executed in parallel, but gray part of this graph is a waiting state, program does work, but waiting for switch, for Gil releasing and other things. Async code, execute everything in the same thread, usually it's the main thread. But switch, micro thread, switch between tasks, and it does it very quickly without need for operation system context switch, and thanks to it, it supports million, billion tasks easily. Next thing, what you should know when you work with client API is time out. Why? Because every request, every try to acquire data from server may hands for very long period, 10 minutes, 30 minutes, without disconnection, exception, without any information, any suggestion what target server is done. Very often you get exception quickly, but sometimes you can, why? Because internet works in this way, we cannot so change internet protocol. But we can wrap our calls under time out, context manager, and it's safe. I recommend to use time outs everywhere, and context manager is very convenient for this. Web sockets, this is very simple example how to use web sockets, instead of saying session gate or session post, you use session web socket connect, pointer, web socket endpoint, web socket object, iterate our messages in web socket, I think for is asynchronous iteration. It may wait for next message, if still not available, and on waiting, I think your loop will switch to other tasks, pending tasks. When message is ready, we check for message content, if it's query for closing, we close web socket, and also we do something like ping-porn communication. This is very basic pattern, and all web sockets client code looks like this. That's it for client side, now server, it's about server. I believe everybody knows how to write hello world in Django, in Django, you have a view, it's a function which accepts request and return response. You file URL map, which maps for URL to view function, and execute it while Django manage command. In HTTP, we have almost the same, when we develop HTTP web server, high-level web API, we try to be very close to Django, Flask, or Battle to classic VSI frameworks, only with one exception. Our code is asynchronous, so we have also view, it's called web handler in HTTP documentation, which accepts request, return response, we have an application, register, route for view, run everything, but see, our index is not a function, it's corkin, which means we can do asynchronous work inside corkin, and the most obvious way is we can request another resources via client API, we can do web socket communications, and we, in opposite to classic Vizgi framework, we shouldn't return answer as quick as possible, we can wait. Lead user, client, obviously, will not see an answer quickly, but it does have a server, waiting inside our web handler, does stop other handlers if they have something to do, it's the main and the biggest difference between IOHCP and all other Vizgi frameworks. I don't know how many Vizgi frameworks there are, but many dozens, at least. Tornado, Tornado is also a synchronous framework, as well as Vizgi, but Tornado built on another concept, and Tornado, you have a request handler, and user should derive from it and override that method, or post method, it works. I don't prefer this way, but can live with it, but we found that utilizing a view web handler concept is much easier for understanding for end users. That's why we built asynchronous IO code in this way, not in Tornado. Web sockets for server looks almost the same as client looks like. The only difference, we should create web socket response, prepare it from request, and iterate our messages from web socket response, almost the same. The only thing that you should keep in mind is, like all other network communications, you have to have some mechanism for handling timeouts, because web sockets can stop working without any notification for long time, and programmatic ping and ping-pong communication can prevent these hands, inform server quickly that client is connected. What I suggest for how to develop asynchronous IO programs effectively, at first, run test or create your development environment as a single process. After creating your code, after debugging, testing, you can deploy it in different containers, in different process, on different nodes, hidden all under, say, NGINX in reverse proxy mode. But for development, it's much, much easier to put everything into the same process. Wow. Sorry. I didn't expect it. It's a big fail. No, it's not suspended. Sorry for this. So HTTP code does require tools like Celery. You just can create a long-running task for new thread inside your program. It's much more easier. Sometimes you need persistent pending tasks, which will be restarted if task execution has failed, but it's a red situation. In the most case, you can just create new tasks in the server and that's it. And you can do very long communication inside WebHandler. It's very convenient. Next simple thing. If you forgot to close gracefully your response or do something with stuff, you will get an exception like, it's not exception, it's actually warning. Future exception was never tried. It's wrong. It's programming error. You see runtime error as what exception was pushed into future before getting result. But I have no idea where in code it was happening. So run our program with Python, I think your debug environment flag and you will see trace back to the point where bad code was created, where object was created. Also, I highly recommend to you pass loop everywhere or don't pass it at all. Why it's important? It's important because easy to write test with explicit loop. I told about client session, use it for sharing state and for keeping open connection for supporting keep alive network pattern. We have one session. We have several tasks for features. We wait for all these tasks completion. That's it. How to write tests? Easy. But create new loop for every test in setup. Disable default loop and enter down close the loop. Also, test function in test framework should be regular function, not corking. So this trick can help very well. In HTTP, we have a decorator which does this call run until complete. But for understanding, we should have coroutine inside regular function and run this coroutine. Why it's important to disable global loop? Because with global loop enabled, we can start a task in one test, finish test successfully. Execute more tests 2 or 10. And on 12 tests execution, your task from the first test may fail. Because they share the same loop. Disabling default loop makes tests really separate. And that's why important to pass loop everywhere. Don't clash between two different tests. This is example how it works with PyTest framework. Honestly, I prefer PyTest nowadays. I tried unit test for long, for about decade. But switch to PyTest finally. We have PyTest HTTP plugin and everything looks easy and short. We have application, we have test client with get, post method and other. And you see, we create application, pass and handler in it. And perform test request to our test server. Analyze result back. It's very, very easy and very, very convenient to have tested and testing coroutines in the same trade. You don't have to start separate trade for starting application or separate process. You have all together. You can easily insert import PDB, PDB set trace or whatever you prefer for debugging your failure. I found it's very convenient. And the last one, what I want to mention. It's from Stackartflow question asked yesterday. A guy created code like this. This is Mongo client, MongoDB client. And it works manual run. But when he started to write unit test for this, test hands. I was handing. What, why? Just because I think I'm a motor client. Accept loop. And it was copied to event loop, default event loop. First test finished. Second test started. Created another loop. But asking for finding data using motor client. Completed to old, not used anymore loop. Bad idea. It has. But what to do? Request has app. It's an application. Application is a deep like object. You can push everything into this name space. And it's safe. When create an application, we create Mongo client. Push it into our application name space. Register clean up for graceful shutdown. Connection to Mongo. This is the same you can do with databases, with everything. It's very good. Register clean up on clean up signal. And that's it. So, let's give this section. It's not very interesting actually. Questions? Are there any questions or comments? I can react that disabling global event loop, main event loop, makes execution not a sync anymore for testing. So, so that test platform will be executed one by one and not sharing the same thread, not sharing the main thread, just to simplify debugging. There are ways to use another approach. You can create event loop and register the new event loop as default every time for every test. Default event loop will be new instance. But I found it's error problem. Sorry. Maybe it's the heaviest way, but the most safe way to pass loop everywhere. Maybe error, sorry. But it's my opinion and my experience. Okay, we have another question here. So, I was doing benchmarking of a service on a synchronous framework and on AO HTTP. And what I've noticed is that I can have a 16 millisecond latency on each request for, like, say, 20,000 requests a second. And when I double the load, so 40,000 requests a second, it's still the same latency. So, what happened? Well, it's a piece that, you know, it was still free CPU earlier, but, you know, I've doubled the load, but it's still the same latency. Did you observe something like that, or no? I don't know. I need to take a look on this benchmark more carefully. Sorry. Okay, so I will talk to you later. I hope. Thanks. More questions? Here. Yeah, I mean, just a question. Had a few other questions. Just a question from a previous question, though. Was the latency actually, was it in async.io, or was it a network latency or in the network stack? Just a question. Very interesting talk. I do quite a bit of web apps. Python has a great story in terms of writing. Web apps are really easy to write a web app, and an absolute payment act to deploy them. So, you can write an app very simply in Flask and Django in any other of the frameworks, and then once you deploy it, you have to start configuring engine X, you have to start, you know, celery for your long-running tasks, and you have Redis for your temporary, your caching, and you have lots of different components with fragile connections between them, so the whole thing becomes a bit of a nightmare and very fragile and hard to debug. So, async.io looks like it can simplify the whole thing a great deal. You mentioned getting rid of celery because you can do the long-running tasks using the async framework. That's great, but I'm just wondering why you suggested deploying async.io in the same way that you're doing behind engine X. Can't we just use the async HTTP server as a production server? So, that's one question. Another question is HTTP2 support. Okay. HTTP can be used as just a web server as much proxy, but for production, I recommend to push it behind engine X. Why? First, you usually have to have static files. If it's a requirement, engine X do it much better than Python. We have static file support, so it's a real performance use engine X. And another point, much more important, engine X has a very long story for preventing malvirus, for preventing attacking code. It's done by limiting buffer size and it has very good experience in this area. We tried the best, but I don't have evidence, but I'm not 100% sure we have no holes for attackers. About HTTP2, we have plans, but have nothing ready yet. There is a pull request, but it's still not ready. We have one more question here. Hi. Thank you for the talk. So, my question is a bit more like, do you have any big features in mind to add to the library, meaning that if there is a roadmap or these kinds of things? Well, we are not so formalized to have roadmaps, but HTTP is hosted on GitHub. We have issues and that's it. Any other questions? In our targets are HTTP2 support, performance and nested applications and fixing our bugs. You'll find it, of course. Any other question? If this is not the case, thank you again, Andrew.


Chris here, and this is Sunday sharing. I'm here to share with you three main sketching techniques you need to know. Number one, scribbling. It's an excellent for capturing your core ideas and it gives you a holistic view of UI components. The second, layering. Layering focuses on the importance of the hierarchy before progressively building layers and elements and details. And finally, interactions. Interactions help you define the interaction in one sketch. You can easily change the placement of each interactive element without having to redraw everything.


This trustee August is hotter than ever at Appalachian Wireless as they are slashing all normal contract pricing on all smartphones by 50% when you sign up for service better service bigger saving serving you for the last 25 years at Appalachian Wireless Billy's had had a few run-ins with the law I've had some dealings with him You know, I don't know what exactly his record is in there that He actually ran for sheriff a few years ago. I only have three paid deputies. I've got three certified deputies and You know, so we we work a lot together spend a lot of time together Cover a lot of shifts together And it's it makes it tough. It makes it tough when when you see one of yours hurt And you know this day and time you have police officers being killed, you know, pretty much weekly You know, we take this very serious, you know, we We never know when it could be us next You