We teamed up with Team Cricut to make this giant six foot wide farmhouse sign where we made our own subway tiles. We made the herringbone pattern, we created this chippy paint and we did it all with one long continuous image. And we'll show you how we did it right now. What is up? Welcome back. Do you like to do a build or make it? So do we. And we have a new video each week. This week we partnered with Cricut to make our own subway tile herringbone six foot wide 16 inches tall farmhouse sign. Yes, we are so excited. Cricut sent us the Cricut Maker 3. As you know, it now has the smart vinyl. So we're so looking forward to using that smart vinyl showing you how long you can make your cuts up to 12 feet wide. ours is only six foot, but we really want to showcase some of that functionality. We're really excited about it. And we're making our own tiles out of some shims and doing a herringbone pattern. We have never done any of that. So out of our comfort zone this week. Good luck. Step one, we're going to gather all of our supplies. We needed three six foot long one by twos. We needed some underlayment because that was the cheapest plywood we could find. We got some wooden shims. This is how we're making our tiles. We have some wax paper and glue some finishing paste wax. This is going to be for the chippy paint method some steam and our country chic paint. I'm using crinoline. We also needed some permanent vinyl. This is the smart vinyl so I don't need a mat and we needed some transfer tape. I think that is it. For our tools we needed more than normal so they get their own shout out. We have a miter saw, pocket saw. We needed a router, the Cricut Maker 3, so we don't need our mat, and Brad, our Brad nailer. Step two, we're going to cut our backern. We cheated. We used this underlayment, this 1 eighth inch underlayment, and we asked Home Depot to cut it for us. They did a wonderful job, much better than I could have done. It was pretty affordable so at the time we're filming this, we purchased this full 4x8 sheet of underlayment for $22. That wasn't too bad and I'm only using a third of it, not quite even because I chopped off some of the end, a third of it for our sign backer. So that's doable. We'll use it for something. Oh, we'll be making more signs with it, so those are the farmers market. Step three, we're going to make our tiles. We're going to use these shims. Yeah, so we were looking for, I knew I wanted to do a herringbone pattern. I wanted to make a farmhouse sign with a real rustic farmhouse background. I wanted to do a herringbone pattern with wood, but the trick was finding the wood and then finding it somewhat affordable because right now you've heard us talk about how the prices of wood are so high. So we looked at using these 1x2s, but one they were too thick, it was going to be too heavy. So we went over to the trim section and we were looking at this quarter inch flat piece of trim that essentially looks like this. That was like $12 for 8 foot was the cheapest we can find. So it was pretty expensive too. And then as we were just strolling on down the trim aisle looking for options, we came across these shims and I was like, well, what if we could glue them together and bring them back to a full piece of wood? And we thought, well, we could try it. And we noticed that each shim was just cut in half. It is its other half. So we're just going to glue them back together. Yeah, I think this is going to be, it's going to give this because these are pretty, I don't know, what is it, like roughly trimmed? They're not very neat, which I did, like I said, I wanted that farmhouse look. So this is going to have that rough texture to it. And then I think it's going to be pretty simple to glue them together. And then I think we could, these are 12 inches. I think they have a smaller, a smaller size, but I want six inches. So I think I can just cut this right in half, glue it, cut it in half. And these are going to be our tiles for the farmhouse sign back. And I think it's going to give it that, it's good texture. I'm excited about it. I think it will work because each one is a little bit unique. It is a little bit unique. So we're just going to lay these out slowly. Make sure you keep it with its partner though. Yeah, that's the trick. You don't want to, you don't want to lose its friend. You're going to keep your partners. Everybody stay with your partner. Buddy, buddy system. Just going to brush the glue on each one of these little shims. Whoa. Oh no, my top broke. I didn't have to play the glue over there. Well, because I was just going to get it started and then my top fell off. All right. It's always something. I'm going to spread the glue around on this half. And then I'm going to put that half back over top. We're going to use our wax paper and kind of accordion them together to clamp them. The wax paper will keep them from gluing to each other. We only want them glue into there. They're soulmate. Yes. They're soulmate. Some of them have a little more glue on the insides than others. So when you clamp it, it's going to ooze out a little bit. And this will keep it from sticking to its neighbor. Yeah. The precision here I didn't realize was involved. Yeah. I didn't know it. Look at this. Oh my goodness. The sheet. That was a sniggity snap. Look at that. Yeah. Perfect. Like the perfect size. Somebody knows what they're doing. Say my first rodeo. I'm going to clamp it on the ends now. And just push that up in there. All right. Stay with your buddy. Stay with your buddy. Stay with your buddy. How many field trips do you think Garrett spent on? A lot. I've been on a lot of field trips. How many field trips do you think I've been on? I've had six kids. Leave your answer in the comments below. How many field trips has Garrett been on? Wait. How many field trips has Garrett been on? Or actually chaperoned? Sometimes I was allowed to come along. But it wasn't allowed to chaperone. I'm going to use this plank. This plank. And this hammer. Just to kind of knock them all down. Keep them all even. Hold your ears a bit. It's good and beaten. How long will that have to dry? I don't say like. Let's give it an hour. We'll be back in an hour. Well, we have like three other packs to do. It was dry. I'm slipping out of it. Do you have to cut all of these in half? Not too bad, right? Can't you do multiples at one time? This is just one pack. Oh yeah. I guess we're going to do multiples at one time. I guess we're going to make all of our cuts with pocket saw. He's back. Now to make sure that all of these are exactly the same size at five and three-quarter inches. I'm going to use a stop block at five and three-quarter inches. So everything should be identical. It did not be. How could it not be? I'm just going to know. Look at that pretty dead on. Look at that. Oh, dead eye. I'll just do a couple at a time. Safety first, Fred. Safety first. Just going to start with like five at a time. Try it out. Give her your old test. All of these, I don't even know how many they are. Hundreds. Thousands of these little tiles. Well, 42 times three. Times four. Oh, times four. 84, 168. 168 tiles. Times two. What was the times two? Three hundred and thirty-six. Three thousand, seven hundred. Something like that. First we're going to find center. We're going to find where the eight inches is and run it down the middle of the board. That way we'll be able to line all the tiles up. And while he's doing that, the idea for this video actually came from one of our patrons. Helen, thank you so much for this idea. I'm excited about it because I really did want to showcase what this Cricut Maker 3 can do with a long, a long cut. And so I think this is the perfect project to do that. And Helen showed us the Toasty Flannel. She actually shows how she does the chippy paint technique. So I'm excited to show you guys that here when we get to that step. So those are my shout-outs while you're measuring. I'm measuring shout-outs. Alright, that's about the center. Yeah, that's good. That's good. I mean it doesn't have to be perfect. I just want to make sure that we've done a little test here. And for the herringbone pattern it ends up being what, four? I don't have it right right now. It's four, four. What are these tiles across? So I want to make sure that the center of the four tiles lines up with the center of the board so the pattern looks symmetrical. Now we stain. Well, now Kim's staying. She's going to use this gel stain. It's supposed to stay where you put it. Yeah, in coffee, right? Because there's coffee. The purpose of this is to really put that dark base on this. So with this chippy paint technique I'm going to stain this a really dark color and then I'm going to add wax and put paint over it and then chip the wax off so that you can see the dark through it. So you're going to stain it. Then you're going to wax on.   But right now you're just going to stain this and the frame. And the frame. I'm going to go ahead and stain the frame at the same time. Alright, I'll stay stain-free. Alright, you just stand back. Step six. We're going to use this router with this flush trim bit and trim up all the edges. Get rid of all the little corners and riff-raff. It's just a lot. I don't know about that. We've never done this before. First time using this kind of bit and a router. Have we used a router yet? No, only for our X-Carve. So routers are new for us. Yeah, new.  So as we continue the pattern, we could see that there were going to be little tiny triangles of the back are showing. So when we trim the edges, we use the little triangle pieces that we trim to fill in the little pieces that we're missing on the other side. So if you were going to make this, maybe sixteen is a little too deep. Maybe go fourteen or something. And I think the shims with the mentions that they are will fit right in between the back are and not leave those little triangles. Step seven. And now we give it some waxing. We have all of our shims glued. All the space is filled, stained. And now we're going to apply some dabs all over this board, all over this backer of this wax. Now I would have used clear wax, but they didn't have any. So we're going to just use this. Now I wouldn't get too chunky. It looks chunky. OK. We're going to use this. What's special dark? So you just want like clump. OK, looks like we smeared fudge brownie over this whole thing. It does. Looks like some kind of chocolate. Yes, it does look like some sort of chocolate. OK, so we're going to give this wax about fifteen minutes to dry. And then we're going to coat it with paint. All right. Now we paint. So the wax is dry. And we're going to put the white crinoline. We're using crinoline. Yes. And we're going to do the same thing now. And I'm going to thin it out a little bit. So we got a little spray bottle. Put a little paint in this. Put a little water in the paint. Yeah, we put some paint in there. Paint tray. Now I'm going to mix it with a little water. We're just doing strokes. Yeah. I would test that brush first. Looks like there's a little paint on it. There is definitely some unicorn spit on it. On the wood. It's definitely pink. It's definitely getting on the wood. I don't know why you would try it on the wood. I thought it... It's definitely won't come off. Thick coat of paint on here. So we need to let this dry. That's going to take maybe an hour. I don't know. I'm going to go get a fan for real. Set it up. See if we can speed this up. All right. Speed it up. Speed it up. Step eight. Now we scraped. I'm not going to throw this thing. So it's been under the two fans for about an hour. There's some dark spots. It looks like the wax is holding some moisture. But Kim's ready to try it. So we're going to... Throw it at me. The paint is dry. The paint is dry. I don't really need the wax to be dry. I just need to... Yeah, let's do it. Preparation for the vinyl. We're going to give this board a coat of the polycrylic. In order to give it some sort of a coating. That will hopefully help that vinyl stick better. Because this is kind of chalky. And waxy. And waxy. So this polycrylic will help. Step nine. We're going to cut our design. And talk about today's sponsor. Cricut and the Maker 3. Yes. I'm really excited. The Maker 3. This machine is the same size as the previous maker. But it does come in this new blue color. And all of these new smart materials. The great thing about the Cricut Maker 3. Is that you can use smart vinyl. And you do not have to use a mat. You can still use a mat. But you don't have to use a mat.  Because they always become unsticky. Well, ours do. We can't seem to get that figured out. I watched them. I watched YouTube videos. We can't get it figured out. Anyway, some of our smart materials. For the Cricut Maker 3. Would be smart HTV. Which comes in this holographic. Glitter.  Also. Your smart vinyl comes in longer rolls. So the great thing about this Cricut Maker 3. It now has this tray. Where you can put your roll of vinyl in here. With incident feed. Well, up to 12 feet. It will cut up to 12 feet long. Even point 7 inches wide. So just slightly wider than the previous maker. But it does come in these longer rolls. So you can get rolls up to 75 feet. 75 feet. How heavy is a roll that is 75 feet? We know that. We've had vinyl that's been in those big HT rolls. But this one. What you see in here right now. Is 21 feet. This is what our local craft store had. And then we have. What is this one? 12 feet. Is your typical roll. And the thing about this new smart vinyl. Is it comes in a 13 inch width now. So. They did start creating. Cricut is now making a 13 inch trimmer. And the HTV. Is also 13 inches. And then the other thing. That's another smart material. That we haven't had the opportunity to try yet. But I'm really looking forward to it. Is the smart card stock. Sticker card stock. So you'll cut this. No mat.  And it's already a sticker. Yeah. And it comes in all of these colors. I think there's a different variety packs. That's how we should be making our price tags. This is a good idea. Because it still uses all the same tools. As the previous makers. So there are. Up to 13 different tools. 300 different types of materials. I'm checking all my notes. To make sure I've got it right. This Cricut Maker 3. Does cut 2 times faster. Than the original Cricut Maker. And it is 10 times the force. Of the Cricut Air. Explore Air 2. So you can cut deeper. Or score deeper. Yeah. Deeper. Thicker heavy materials. And your leathers. It's just stronger. And you can make so many passes on leather. Yeah. That's what I'm thinking. Alright. So we're going to cut our vinyl. To put on our farmhouse sign. Hey what's this? Is this a cutter on the thing? Yes. So this tray. I'm going to show you right now. It's a good segue into the next step. So in theory. I could just use this as my cutter right? I don't even need that other cutter. Well. You can't measure it. You don't know how long your piece is. Well. I would just cut my piece. And then cut it. So this little tray has grooves underneath. And it sits right here on the the door of the maker. Your vinyl does slide up under. And right into the grooves. See that? And then when you're done. You just slice it right here. Pretty cool. We're going in right now. Well. You'll hit unload. What will that do? I don't know. We'll have to see. I'll hit unload. I'm afraid unload was going to push it back. Let's see. No. Right here. The vinyl feels still. That's because you don't need a mat. Oh man. We have to weed that thing. Don't you love it when he realizes stuff like that through the project? No. Now you guys get to watch us figure out how to add the transfer tape to an image this long. Well. We'll give you some lessons later. Lesson learned. Don't do it so long. So now I only have one. I don't know. About six inches exposed. And I'm going to lay that down after we center our transfer tape on here. That looks pretty good to me. Looks good. Looks good here too. All right. Well. We're in now. So now going back. Now we'll pull from underneath. I got you. We got you. We're getting squirrely. All right. I'm back in. Oh look at that. It's fashionable. Yep. Look at this. We just went in for the long pull. I am surprised. That went so well. Yeah. Step 10. We're going to lay down our design. Uh. This is where I'm dreading this part. You scared of it? I am scared. We're starting from who's end. I don't think we should do both. Okay. Go for it. Man. Using that heat gun to get the vinyl to stick down. I'm not sure if you can't tell if that's paint or vinyl. It really got in those cracks. Look at that. It looks so good. It looks so good. I'm so excited. Step 11. Now we're going to add the frame. We have these one by twos that we have at six foot. That's great because this is a six foot sign. So we're just going to pin these to the top and bottom. Then we'll measure for the sides. We're going to glue them down and then hit them with a one and a quarter inch brad. The nail. And chippy paint method and our six foot long vinyl piece. I think it looks great. So a little bit of a labor of love. It took some work. It wasn't as bad as I thought it was going to be. I thought it would be a lot more paint in the butt. Multiple steps. This one had a lot of steps in it. A lot of steps. Man, I think it looks great. It turned out exactly like I wanted it to. Exactly like I envisioned it. Heating up the vinyl really made it hug the board and almost looks painted on. I want to say thank you one more time to Cricut, our sponsor for this week's video. We're loving that Cricut Maker 3 and our vinyl. I love that there's no maps. At a time, so if you're not joining us for the patron after show we will see you next week where we'll do a building and make it again. Don't even think about it. Oh yeah, I'm going in. No, you're not. Ready? Ready? Ready. And move your hand. Just go. And we're in. We're in. We're in. I'm away. I'm away. That was a workout.


In this demo, we present a unique technology named Colobot, a system for personalized summarization of group chat in the workplace. I am a team lead in my company and just came back after a few days out of the office at a conference. Let's look at what has been going on in my group chat collaboration tool, IBM Watson Workspace, while I was away. Oh my God, how can I catch up? So much has been going on. I cannot understand who is talking to whom, what are they talking about and do I really care about it, and all the conversations are interleaved and create a mess. Luckily, my IBM personal assistant created a summary personally tailored for me. It shows the most relevant topics, colleagues and conversations. Let's see what was discussed during my absence. I see that out of the hundreds of messages, only those few relevant to me were selected. Let's see what they were about. I see many people were talking about our group's mission and some were talking about our tools. There were a lot of discussions about GitHub. Let's first take a short look at the most important messages on the mission. I see that Shiri posted a really good list of the group's main tasks. And now I understand why this topic was presented to me. I care about this topic and also I work closely with Ellen and Shiri. Now, let's deep dive into what people were talking about regarding GitHub. I see there were five conversations here. Nice, they are summarized and the title helps me understand what was going on. Okay, that was a productive catch up. I can now go on with my day.


Hi, my name is Rashi Mithil Naya and I'm the co-founder of VOOP, which stands for Women of Opinion. We help identify and recognize top advocates for brands. Tips that I would love to share with fellow entrepreneurs are primarily three. The first one would be to actually make sure you're building a really, really good work culture in your team. It's very important that you're hiring right, that you're keeping the team motivated and you're building a culture which allows for everyone to be themselves and grow. At VOOP, we have no office timings, we have a lot of fun at work, the work-life balance is something we make sure we focus on. It's the small everyday things that allow people to give their best that really, really come. So that would be my first tip. The other factor that's really important as an entrepreneur is to always focus on progress instead of perfection. And 80% now is much better than 100% much, much, much later. So actually in praise failure, understand that it's okay. At VOOP, we understand that people make mistakes and we completely understand that. And then we own up to it and we say, hey, sorry, we made a mistake. And then we learn from it and we move on. And that's really the culture that we want to build. The last tip that I think is extremely crucial for a business is to make sure that your team and your organization are set for a much larger goal and a much larger purpose. At VOOP, while we help the brands, we work on our marketing, we never forget that our larger purpose of really being who we are is to help girl children go to school.  And everybody on the team doesn't have targets in terms of sales. They have targets in terms of school days that they need to individually help achieve. So just having that sense of purpose, meeting the schoolgirl that we're helping on an ongoing basis, helps create positive energy within the team and even sends off a little cycle of good karma. Because the better that you do for society at large, the better that your business will grow as well.


Mutta katsotaisi, että olet katsottamassa, ja olet katsottamassa. Koska olet katsottamassa, olet katsottamassa. Ja peikkoja on the same asia, olet katsottamassa ja olet katsottamassa. Minun formula1-karii aloittaa 1991. Seuraavaan formula1-karii oli osa. Ja minulla oli todella ympäristöinen. Minulla on semmoinen. Ja tämän formulaan, kun ymmärtää, minulla on enää ympäristö. Minulla on semmoinen, että ihmisiä ympäristössä. Minulla on semmoinen, että ihmisiä ympäristössä. Money cannot always buy these people. You have to work hard with your connections, with your relationship, with your own personality to get these people together and bring these people the feeling that way we make the success together. We win together. What was interesting early in my career one of my mentors was James Hunt. Every time when I left after discussions with him he said, Mika, remember to have fun and enjoy what you do. And I said, yeah, yeah, yeah. I'm here driving 350 kilometers pro and trying to win and have fun. But then years went by and I really started to understand it that way. You know, you need to have fun what you do. But it's just a complete package what matters. And everything has to be in the right place and then you can be a winner.  I want to improve with my family, with the business. I want to win more.


Well, hello and welcome again to another OpenShift Commons briefing. Today, we have a really interesting new open source project that we probably haven't heard about, Yeager. You probably have heard about Uber, and we're really pleased to have Yuri with us, who's one of the core contributors to Yeager, and he's going to tell us about how all this works with OpenTracing, and Prometheus, and lots of other aspects of distributed tracing today. And we also have with us from Red Hat, Gary Brown, who's another one of the contributors to the project, and we're just hoping to build some awareness around Yeager and get more of you involved in the community, and so the format we're going to use for today is we're going to let Yuri and Gary do their presentation. You can ask questions in the chat, and we'll have an open live Q&A at the end, and all of this is being recorded, so don't try and scribble notes fast. There will be all the links at the end to the references for all of the stuff that we're talking about, and with that, I'm going to let Yuri take it away and introduce himself, and I'm looking forward to the discussion afterwards. Thank you, Dan. So just a few words about myself. I'm an engineer at Uber. We have an observability team in New York City, which does things like metrics, login, and tracing, and other observability-related applications, and I have been attacking it for Yeager project at Uber for about two years, and we've open sourced that project back in April this year. I also was involved in the OpenTracing project from the beginning, and one of the co-oppers, and I'm also a member of the Specification Council for OpenTracing. And so today, what I'm going to talk about is really to demonstrate why OpenTracing and tracing in Daniel is a big deal in the microservice world, and I will do a quick intro into what distributed tracing is, assuming some people may not know exactly what it is. I will also show you a demo of, like, really demonstrate why it's useful on an example application, and that's pretty much it. And so basically what distributed tracing is, the way I tend to think about it is a new way of monitoring for microservices, and so we can ask why do we need a new way, why, like, the old ways don't work, and to answer that question, I want to kind of show you're rendering by an artist of the microservices versus a managed application, and so what microservice is really, the biggest difference, obviously, is that the pieces of the previous big application are now individual pieces that work independently of each other, and so when we were monitoring, like, a monolithic application, we would put, like, some probe on it. It could be metrics, it could be some stream of standard logs out, and we can see what's going on in that application, and things are pretty simple there. But in microservices, how you do the same thing is not that obvious. So you can definitely put a thermometer on every one of those guys, but they don't give you the whole picture of what's going on with the whole system. And more importantly, if we think about another aspect specifically the concurrency, so we, like, the old application started the single threaded where you would process one request at a time, then it became more complex with multithreading where multiple requests like being processed in parallel, but still one request per thread, and then we went into asynchronous programming where a single request can actually jump between different threads during this life cycle. And finally, in the microservices world, we took that asynchronous picture and split it across many different processes boundaries, and the picture would be broken. And so what we really want to see here when we monitor that system is to be able to track a single request as it goes not only between multiple threads, but between multiple process boundaries. And that's what distributed tracing really provides. It is the ability to trace a single transaction throughout your architecture and throughout process boundaries, threads, whatever continuations, asynchronous calls and all these things. And conceptually, the way it works is that fairly straightforward. There is a concept of context propagation where we say if we have a microservice architecture with this five microservices and the first service receives a request, we create a unique ID for that request and we stick it in a so-called context, which is like a virtual container which is associated with that request. And that context is propagated by whatever means throughout every single call downstream as part of processing that request. And when we do that, it allows us to stitch together all those independent pieces of execution across the call graph and build a timeline of that same request where we can see, well, the whole request took that much time in a series A, then series A equals series B, B equals C and D, et cetera. And so that view is a typical view that tracing systems provide based on the tracking of the request that they have. So, but why should you care? Like why is that a good idea to actually do these things? And now I want to jump into the demo. And so I will demonstrate the demo based on the on the Yeager as an open source tracing system and plus inside that repository, there's an application called Hot Rod, which is a sample microservices application that I will be using here. So first I want to start the Yeager backend. So I have, where am I? In a github uber.yager, this is our main repository. So I can start the kind of Yeager backend with a single command go. And I'll just give it a second. So one thing it shows here is that it started Yeager query service at this port, right? So that's the Yeager UI that we'll be using later. And then I'm gonna, again, this is the same repository, but the subdirectory examples Hot Rod. So I can start the, this application as well. And I want to pay attention to the logs here because one thing that it says, it says it's starting a whole bunch of services like a root service, front-end customer and driver service. So just by looking at these logs, we kind of can get a sense that this is a apparently microservices based application because it's starting a whole bunch of things. And so, but the front-end is obviously the entry point. So let's go to that, to the UI of that application. I can make it a bit bigger like this. So just as a quick enter intro, this sample application is like a mock rides on demand thing where you have these customers and you click a button. And the back-end kind of finds the car which is closest to that customer and says, okay, well, the car will arrive in two minutes. And it gives you the license plate number. This is like the New York license plate numbers. And it also gives a few things that will be useful later in the demo. So one thing is like when I loaded this application, there was this client request ID, which is just a stable session ID for my page. Like if I reload that page, I'll get a new ID. There's also every time there's a request made from this application, the front-end, JavaScript front-end assigns it like a unique ID, like request number one. And then it also prints the latency, which we'll see it's useful later on. How long it took from the point of view of the front-end, right? So now that we see, well, okay, well, this application kind of apparently like dispatch the car to us. But how do we actually see what the architecture of the application? So we saw from the logs that apparently there are certain microservices involved. But maybe the logs lie, we don't really know. So what we're going to do is we're going to go to Yeager UI. And we will take a look at what Yeager UI out of the box provided. So remember that we execute that one request so far with that application for this car, right? And so that already provided certain data to Yeager backend. And we can go and we can see that data, for example, in this format. So by observing traces that, really it's a single trace. By observing that interaction of microservice, we can actually see what happened within that service. So there's a front-end service which called three downstream services. And two of those called apparently some storage backends like Redis and MySQL. And we also see that the counts, how many times. So just for the single web request, there are apparently over like 25, 27 RPC calls that happened within that microservice-based application. So that kind of gives us an architecture overview of the application. But it doesn't tell us what the actual workflow and the data flow was. Which services was called first and how long it took. And for that we can go back to the main page of Yeager. And then because the services like emitted tracing data to the backend, we already have this information. For example, all the services kind of presented and known to the Yeager UI. So if we search for a trace, we see that this is the one trace that was executed by the system. And it says that there are like 51 spans. I will go into that a bit later. And then there's all the services that are involved. And how long it took? It took 743 milliseconds. So notice that this is a bit shorter than 750 milliseconds reported by the UI, which isn't surprising because UI is measuring it from its point of view where the Yeager measures from the backend point of view. So there's some network delay between the UI and the backend, which is responsible for the discrepancy here. And so when I go to that trace, I now see that picture that I showed in a slide before. So it's a timeline view of the trace. So which means that this is a time and this every horizontal bar represents like a unit of work performed by a certain service. In particular, we can see from the top that the very first request was for the front-end service and endpoint called dispatch. And then in order, that service called like if you go down kind of a parent-child relationship, we can see that this front-end service called the customer service with a customer endpoint. Then the customer did some MySQL operation. Then the front-end called driver service. And then the driver service did a whole bunch of other calls apparently to Redis, like first find driver IDs and then a whole bunch of get driver requests apparently to like retrieve driver information. And then some of them we can see fail. Like they are marked by the exclamation point. So they took longer and then most of them have succeeded. And finally in the end, the front-end service, like after the driver call, the front-end did a whole bunch of requests to the root service. And so again, we don't really know how and what's the business logic here, but at least we see the data flow of this application. And then once that all these root requests were executed, in the end, the front-end produced result and the front-end display, the UI display. So this is kind of a very simple walkthrough of the workflow application just by looking at the single trace, right? It gives us a lot of context of what happened in this micros, like four, seven, whatever microservices in this application. Now, just a bit more details about this trace. So distributed tracing kind of allows you not only to see that information, but also drill down into individual pieces of every span. And again, span is just a unit of work within the application which was instrumented with a particular kind of annotation. And so we can, for example, like in the MySQL, we can expand that MySQL span and we can see, oh, there was this, we can see that the actual SQL statement was this that's executed. We also see the request ID from the, remember that request ID in the UI, this guy. And we also see something in the log which is associated with that span. So this information kind of allows you to, if there's an error, in particular, let's look at this, the error cases where we see radius calls fail. So if we drill down into that, we can see that, especially in the logs, that apparently it was a timeout basically on the radius which caused that request to fail and then the back-end, oh, sorry, the driver service retried it with another request. So this is kind of, again, just like a quick walk-through through the capabilities of the tracing system. This is very common functionality, one sec. So however, we still don't quite know what the actual business logic within the application. For example, why did the front-end call the customer service, right? And so to understand that, we can actually turn again to logging and try to understand the behavior of the application based on the logs. But before we do that in a trace, let's take a look at the logs here. So, and look, it's like, I'm scrolling, this was one single request, right? So there's like several pages of logs that were written to standard out by this application. So we can probably figure out what happened in this request by like reading very carefully, especially if you're like the guy on the brunette. But I find this very difficult to actually follow for exception traces. And remember that we only did one single request so far. Like if this was a real production service and it was serving like 100 requests per second, these logs will be a complete mess. Everything would be interleaved and there was no way to tell what actually is happening, what's the logic of the application. So instead of looking at the logs, we can actually look at the logs in the tracing system. And specifically, if we look at the front end service, the very top span, we can see that it has 17 logs. And if we expand that, now all those requests that we saw in the standard out, they're kind of the same logs, but they're now very contextualized to say, okay, well, I only see in logs from this particular span, like some other spans like my SPL, it had its own logs. The radius calls, they had its own log. So they were like in the log output, they would be all mixed up. Here, I'm only seeing what's relevant to the span. So that's what we call contextualized logging that tracing provided. It kind of allows you to narrow down the behavior of a particular execution very closely. And by looking at the log, we can now actually understand the actual business logic that the application is doing. So once it received the request, it says, I'm gonna load the customer information by customer ID, which was sent by the UI. Then I'm gonna find the nearest drivers to that customer. I'm loading all the information for those drivers. And then I'm gonna find routes for each of those drivers. And then finally, pick the shortest and dispatch it back to the front end. So again, the main point here is that the logs are very contextualized to every individual span. They're not mixed up with anything else. And also, we can see that, are we showing like logs and tags? This is like a standard feature in open tracing. Tags are really the things that you want to assign to the whole span, kind of a description of the span. For example, it's like, I'm calling my SPL service. The span kind is that I'm a client of my SPL service. Whereas logs are really things with a timestamp. So if you're meeting something at the point in time, then it's a log. Otherwise, if it's the whole descriptor of the attribute of a span, then it's a tag. So that's like the standard terminology in open tracing. And finally, the last kind of, I guess, not the least important thing of tracing is that we can see the overall latency of this request and what was on the critical path and what was taken basically 750 milliseconds to execute this request. So we can see that my SPL query took over 300 milliseconds. So something to look into. Then another thing we can see is that the loading of the drivers took another 200 milliseconds. And by looking at this kind of staircase pattern in the trace, we can understand that, oh, all these drivers were requested from radius sequentially. So another potential optimization for this application saying, maybe you could just call them all in parallel and just reduce it to just a few milliseconds instead of 200. And finally, the request to the root service. This is interesting. We see that they are actually concurrent. So we see a whole bunch of concurrent requests, but they're not all concurrent. So actually, in fact, there is at most three concurrent requests going on to the root service. And then as soon as one of them stops, like first stop, another one started. This stopped another one started. So it looks like there is some executor pool which is bounded by the three threads. And so the parallelism of this whole segment of the trace is limited by three. And so again, potentially another optimization point to improve the application latency. So now let's see how this application actually performs if we start doing a lot more requests. If I start clicking many times here. And so we can see that the latency is starting to climb. Essentially, the more requests, the longer it takes. And notice that request IDs keep like incremented, as I mentioned before. So how can we use tracing to investigate it? So I'm going to pick this driver ID or license plate ID and then try to search for trace with this ID. And tracing allows you to, I think it's like driver ID is no space. So we can find, oops, let's see what the syntax is. Just a driver, OK. So I'm looking at this thing. It says driver equals license plate. So I can search by the tag. So no driver ID, but just driver. OK. So now I get this trace. And we see it's the one that was actually very long, like almost 200 milliseconds. So this one is saying 182 close enough, right? So when we look at this trace, immediately we see, oh, my SQL is taking an enormous amount of time here. 1.4 seconds. So clearly, there is something wrong with that application. There is some bottleneck. And let's actually use the login feature of the tracing. If we jump into the logs, we can see, oh, this request is actually blocked by four other transactions. And it was waiting for almost like a second until it acquired that log and allowed to proceed to query my SQL. What that means is in practice, this is obviously a mock application. But it simulates a real environment where you only have one connection to the database instead of using a connection pool. But what's another interesting thing, though, here is that not only we see that how many transactions are blocking us, we also see the actual request and the ideas of those transactions. So imagine that you were in this scenario where there is some resource which has a queue in front of it.  And suddenly you see this kind of pattern where, oh, you got stuck for a long time in the queue. And then when you look into this thing, you could say, oh, this is all the requests that are blocking me. What if I go and look for those requests and see which one was actually the longest and caused this all this blocking in the queue? And that allows you to do that. But what's interesting is that if we look at the customer service, there is this HTTP request that was executed. It says nothing about request ID. It only says, well, give me a customer information. So request ID came all the way from the front end, from the JavaScript UI. But it wasn't passed as a request parameter to the service. So how did this guy know about all these transaction IDs, right? And the answer is because it's another feature of Open Tracing API called Baggage. And Baggage is essentially, remember I would talk about context propagation where tracing is using context propagation to pass around trace ID, but context propagation itself is a more general concept. You can essentially pass anything. And so Baggage is this kind of anything key value store which is passed around the whole architecture as part of the request. And so this request ID that UI creates for every request is actually injected into the Baggage. And then it becomes available at every level of the call graph. So every microservice can actually get access to that ID without having to change any of the APIs of that service, right? Which is very important. Like if you have multiple levels of microservices and you wanna pass something from the top to the storage layer, for example, having to go and change all the APIs of the services in between is usually very like difficult work. Whereas Baggage allows you to do that almost for free. So we figured out that, okay, my SPL is kind of the culprit. What we can do is we can go and fix that, we can go and fix like this locking contention. And I don't know if I have time to actually do that. So I may, well, let me try to do that. You've got time. Go for it. Yeah. So I'll go to the code for the application. Okay, yes. So, and this was in the customer service, so in the database. And so finally enough, right? We see that there's this log that we saw the log about it. And so the reason this log is here, like I said, this is a mock application. So it simulates like a single connection thread pool. So simplest way is let's just comment it out and not block on this one transaction. And then the actual transaction to the database is simulated by this sleep statement, which has a certain delay, right? And so I also want to, they're just for demonstration purposes, I want to go and reduce that delay to make it a bit shorter and see how this small change really affects the behavior of the application. So we'll start it again, reload this page, note my session ID change now. And so again, I do a whole bunch of requests. So what we see now is that latency is still kind of going above the first one, but it's not as dramatic anymore as it used to be, right? It doesn't go to two seconds. And so if I pick again the latest, like, sorry, the longest trace and try to search for it, we'll see how that change in the code that we just made affects the trace shape. So here I change it to 100 milliseconds. So that's what roughly we get now. And so the whole shape of the trace change significantly. It's still long. I mean, it's like over a second, but this segment became shorter. The call to the driver is still the same 200 milliseconds because I really haven't optimized this thing, but notice how this segment change now. So remember, we used to see three at a time, but instead we're actually seeing sometimes one, sometimes not even less than one request being executed. So my whole request has been blocked, like we can see it in the minimap. There's this gaps in the execution where my request is actually not doing anything, it's just waiting on the resources, right? And again, as I mentioned, this front end, the root service has some sort of a thread pool inside it. And that thread pool is bound by three executors. And so when I execute a lot of requests, then obviously there's a contention on that resource and we can easily see the impact of that contention on the trace. And so what if we go and fix it as well? So, and it's happened to be like very close to in the same configuration. So, and this is a goal routine. So the cheap I'm gonna go 200. And again, let's see the impact of that change. I swear my laptop is usually faster. It's the video that's slowing down. Okay, so we got this application started reloaded again.  So you see like how requests are coming back immediately. So like, and they're all way shorter than before. And like, so if I pick the longest one, just to see what actually is happening with it now. Okay, notice that there's lots of more errors for some reason. I don't know why that is interesting. The air is actually random and it's so like, it's kind of surprising why there are more errors. But like we can see actually this, the impact of that last change that, so we have 10 drivers being requested or like a 10 roots being requested from the root service. And now we can see that they all executed in parallel because we have essentially removed the contention on the resource pool, on a thread pool. So this again, this is, I guess, I hope like this is a demonstration of the tracing functionality and like how tracing can help you quickly narrow down what the problems are in individual components of your architecture, individual services and how you can try to optimize this by looking at either relationship in the calls, critical paths, like here, if we look at this whole trace now, then obviously the critical path is going through this segment and this is the longest segment and the most obvious optimization here is to try to parallelize this thing, right? Instead of doing sequential. But I'm not gonna do that in this demo. It's like an exercise if you want to do it yourself. Okay, so, and the final thing that I want to show here is that, so I mentioned baggage. I want to show another use case for baggage and this application actually emits a whole bunch of metrics. So if I go to this, yes, this, I mean, it's another port that this application exposes. So we can see a whole bunch of metrics emitted. By the way, some of them are, I think if I search for, oh, I actually don't have metrics from the tracer itself. So it's probably not configured. Normally the tracer itself emits metrics about how many spans it starts or stops. And instead what's configured here is the RPC metric. So we can see that all the services and all their endpoints are actually being measured by Yeager and emitted as metrics. So like tracing in general does a heavy sampling of the requests. We don't capture every single trace in the storage, but metrics work for all requests. And so you can get very, very pretty accurate picture of how your application behaving by looking at the metrics. And this is something that Gary will talk in a second segment of this presentation. But what I wanted to really show here is this part. So notice that this is a metric which says how much time the root service, calculation in the root service spent in seconds on behalf of individual customer or on behalf of individual web session. And remember that this my web session idea is this one, right? And so well, it's kind of not look at the root service. Let me collapse this thing. So pick any request to the root service and look at its HTTP request itself. Again, there is no mentioning of either the customer or of the web session idea in the request because well, they don't belong to the API of the root service. It really cares only about where we start and where we drop off. So just like two coordinates, all it needs. And yet it is able to produce this metrics by the customer and by the session ID which are the identifiers which are only available at the very top of the application. Essentially, the front end service knows that but it doesn't pass it explicitly to the root service. So I'm kind of repeating this myself but I just want to make sure that this is very important and like powerful feature of open tracing where baggage propagation can allow you to do a lot of smart stuff by kind of this implicit propagation of the data that you can use at the lower stack of your application and let's say the resource attribution. I can say, well, I can maybe do a chargeback to my customer saying, oh, you used so much computer resources from my application by like all the requests going to your customer. So this is something that essentially distributed context propagation allows you to do. And finally, one other thing that I want to go over in this presentation is really, so I hope that you like this few functionality and you think tracing is great. So great, like how difficult is it actually to instrument that application to get all this data and all these places? And the answer is it's actually not that hard. And in fact, if we look at the source code for this application, they will be surprisingly very little information, very little instrumentation for tracing explicitly. And the reason for that is because open tracing API is an open source API that any framework can use to instrument itself. In particular, any RPC framework can use to instrument itself. And as a result, if we look at the source code for any of the services, let's say we look at the front end service. So when we create in a server, we see that there is this, like one mentioning of a tracing for instrumentation, which really just creates a wrapper around the server. And then once that's done, all the requests through that server are automatically traced. You don't need to do anything special. Similarly, there is another service here. I forgot which one. I think it's a root service. So when it starts, this one is not based on HTTP, or it is actually, maybe it's a driver. So the driver server. Yes, so the driver server is not based on HTTP. It uses a T-channel, which is another RPC framework, open source RPC framework. And that framework is instrumented with tracing by itself, with open tracing. And so what we can see here in the code is that when I'm creating this new channel, the only thing I'm passing it is the tracer. And that's it. There's no more instrumentation anywhere in this service to actually enable tracing. In fact, if we look at the handler, so this is the handler function, which is being called by the server. There is no mention enough of tracing here anywhere, right? It just gets a context object, which is the common way for tracing to propagate data inside the application. And then tracing kind of happens behind the scenes automatically. Again, because open tracing is an open API that anyone can use, if you are writing your RPC framework or you're writing your, I don't know, Redis driver in particular language, you can write open tracing instrumentation either into your driver directly or provide like a wrapper, which what happens with the HTTP. Like there are standard libraries and open tracing contributor space, which allow you to wrap HTTP clients and servers and not really worry about tracing. However, if you do want to trace explicitly, then obviously open tracing allows you to do that. And there are examples in this application, like Redis, for example, this is not a real Redis, this is a simulation of Redis. And so to actually simulate that we're making some sort of RPC request, there is explicit instrumentation for open tracing. We're saying, okay, start a new span here representing the call to Redis. And we're saying that this is a RPC client kind of span, right? So those are the tags that we've seen in a tracing example. And this is the only really place in this code where open tracing instrumentation is done explicitly, simply because there is no real Redis server. If there was that, you probably could get away without explicit instrumentation for that. And finally, another thing I want to mention is, so we've seen how logs go both to standard out and the same logs appear in a tracing.  So we can see an example of the log statement here. So it looks pretty normal, right? So info, this is a kind of a key value login framework that zap as a login framework which allows you structured login. So rather than formatting a string with a like a format or you provide key value pairs explicitly and it's a lot more efficient and go with no memory allocations and it's easy to suppress. However, the really difficult difference here from normal login is this part, right? So instead of just calling logger info, if we did that then we wouldn't be able to associate logs with the actual context because they would just go to standard out. And this is just a little trick in this application where the logger isn't really the normal logger but it's a wrap around logger which allows you two methods. Either you can get a background logger which doesn't require context and can log your standard like lifecycle application messages or if you have something that is request specific, in this case, it's obviously a scope to this particular request find nearest car. So we get a different type of logger for that context and as soon as we do that, there is a magic is that you can look in the source code how it's actually the same log is forked into both standard out and into a tracing span. And that's why I am able to show it in the UI but when it's associated with a span you get contextualized login versus like a standard loud mess. So I'm just checking that, oh yes. That's the end of my end just like the very final point is open tracing doesn't bind you to any particular tracing optimization, right? So here we used Yeager but if we look at how tracing is actually initialized this is the only single place in this whole application which is specific to Yeager. We're saying config is the project from Yeager this one I guess, yeah. So it's a, we can see that Yeager client that's the only place where it is actually specific to Yeager, right? So we instantiate Yeager tracer and from that point on the rest of the application is not aware that there is anything to do with Yeager. If you want to swap it for Zipkin or for LightStep or for any other open tracing compliant tracer, this is the place to do it and it will work just well. Yeah, UI will be different obviously but the actual instrumentation doesn't need to change. So that I think is the end of my demo. So let me see. Yeah, so as a recap, what we've done is I showed that instrumentation itself is pretty much off the shelf. I didn't have to change a lot of stuff in my application. I can swap another tracer. So there's a vendor neutrality to the whole open tracing API and tracing allows the two monies of transactions across multiple microservices and process boundaries and different threads as well. We can definitely do things like latency, measuring latency operations, finding a critical path, analyzing root cause of some errors or delays in the execution. We can get contextualized login, very highly contextualized login with tracing. We talked about baggage propagation, how it's a very powerful techniques. In fact, at Uber we have a number of projects which are built strictly on top of baggage propagation. They really don't even have to be anything with tracing but they rely on Yeager instrumentation because they need baggage propagation. And I showed quickly the RPC metrics but that's something that Gary will talk more in the next session. And just a few words about Yeager. So Yeager is a distributed tracing system. We open sourced it in April this year. It's open tracing inside. So it's like built from open tracing from the beginning. It can be used as a drop in replacement for Zipkin if you want to just replace the backend. It's the backend is all in go. We support several backend storages and this is the main URL for Yeager. And we'll come to that slide after Gary's presentation. I'll stop sharing now. All right, we'll get Gary to share his screen and pick off his bit. Hi, can you see my screen? It's coming soon. You've got your sharing screen. So click into your Yeager browser. There you go. Okay. Right, I'll try to get through this demo fairly quickly. Thanks for the demo, Yuri. So what I'm going to do is just show how we can use an open tracing system like Yeager but also capture application metrics and integrate with something like Prometheus and have that all running on OpenShift. This example also runs on Kubernetes and there's a GitHub repository located here where you can find the example and the instructions for running on both. So the main name of this short demo is to show how we can sort of capture the metrics along with the tracing just by instrumenting the application with the open tracing standard. And as Yuri pointed out, there are ways in which we can make the instrumentation of the applications non-intrusive by instrumenting a number of the popular frameworks. And the benefit of capturing the tracing and application metrics information separately is we can report them to our preferred back-end systems and the sort of metrics we're going to be capturing isn't constrained by the particular tracing sampling policy that we want to use because application metrics is useful to be able to capture for the application invocations and have learning mechanisms to detect situations. But the tracing information is useful when you want to dive into more information about a particular invocation of the application. There's also on the cards some adaptive sampling mechanisms that we're looking to put into Yeager, which for example, if you get an alert on a particular area of your system, that could potentially be used to automatically increase the tracing information that's been captured in advance of somebody being able to investigate the problem. So in terms of the example I'm showing, it's very simple, Spring Boot application consisting two services, an order manager and an account manager. The order manager has a couple of rest endpoints for buying and selling and one to generate an exception, basically, as it tries to invoke a missing endpoint. And then the account manager just has a simple account endpoint. So both of the services are using the Open Tracing API, which in terms of the trace that we're using Yeager, but we're also decorating the tracer with a new component in the Open Tracing Contrib GitHub organization that basically intercepts the tracing information and extracts relevant metrics. And these have been reported in this case to Prometheus. Okay, so there's also a blog on the Red Hat developer program that explains how to run this on Kubernetes. There's a GitHub organization called Yeager Tracing where you can find the templates for deploying Yeager onto Kubernetes in OpenShift. And as I mentioned, there's the Java metrics component that decorates the tracer can be found in this organization here in this repo. Okay, so what I've done is I've already deployed the example. So there's the account manager and the order manager. I'm using Prometheus operator, which is an extension project to Prometheus, which is able to identify services that have been deployed and if there's multiple instances of the services and be able to update the configuration in Prometheus to scrape the metrics from those services. And of course we've got Yeager deployed as well. Before viewing the demo, I'll just quickly go through the application. So as I said, this is a Spring Boot application. The main application itself, as you can see, there's no tracing specific code added here for the account manager and same for the control of the REST endpoint itself. So this is basically just introducing a bit of a delay to make the metrics more interesting and then randomly creating an exception saying if I failed to find an account. The configuration of Prometheus is pretty straightforward. The metrics are being reported using a serverlet. A bridge is exposed at this endpoint here. And the tracing configuration is basically using a component of the open tracing project called the Tracer Resolver. So in this case, what we're doing is we're obtaining the Tracer based on configuration information. So in the same way that Yuri was pointing out, you could just change the code in one place. If you're using the Tracer Resolver and the tracing implementation supports it, then it can be done without any code change at all. But in this case, we're decorating the Tracer before it gets returned using this component here with a Prometheus metrics reporter. With Prometheus, the metrics are reported with a set of labels. So in a standard way, what we're doing is we're using labels to represent things like the service name, the operation, and various other fields that can then be used to categorize the metrics. But through this mechanism, you can also customize and add to your own labels as well. So in this case, what I'm doing is adding a baggage label. So this is using the mechanism that Yuri talked about where application-specific information can be propagated with the tracing context through a chain of the services that are being invoked. So what this one is doing is it's adding a transaction name. So this could be a business transaction. And the second parameter is just a default value. So in this case, if a baggage item with that name hasn't been provided, then we just use this value. The other thing in terms of the Tracer configuration is we need to tell it to ignore the rest endpoint slash metrics. So what we're doing is to scrape the Prometheus metrics. I'll just show you the order manager because this is slightly different. The application itself, again, has no tracing-specific code. But the controller does include or injects the Tracer. And this is purely just to be able to set the baggage item. So what we do is if the buy-in point is called, then we set the baggage item of transaction to be buy and same for the sell. And that information would then get propagated through to the account manager service. So this is the other UI for this particular application. So you can see there's some transactions. So we've got the order manager, which has the buy-in point invoked. And that's invoking the account manager. So that's a simple invocation. And this one's showing an example of an error. So if I look at the account manager, if I have a look at the logs, then you can see that they've failed to find account as being reported. But because Yuri's done an in-depth demo of Jager, what I'm going to do is focus more on Prometheus. So this is using the Prometheus user-in-face and I've set up some queries already. So this first one, what it's focusing on, is a metric called span count. So that's just the number of spans that have been created at a particular point in the business process. So if we have a look down here, you can see that there's a metric that's created for the operation cell in the service order manager and the span kind of server. So that's the server endpoint for that operation and that service. There's a number of labels that we're ignoring to simplify the information. So for example, you can view information based on pods, instance, job, namespace, the transaction field that we added ourselves, the transaction label, and also errors. For the moment, we're just aggregating over those particular fields. There's also, I've got a graph here representing the duration associated with each of those spans. So it's looking at an aggregated view of those particular fields. And for example, if we're interested in a particular transaction, we could add a filter. So if we're just interested in the cell transaction. So what this does is it cuts through all of the services and it's only focusing on the metrics being reported for that particular transaction type. So for example, if you wanted to find out what the bottlenecks were with a particular business transaction, this would be a good way to be able to focus in on that. And similarly, you could, if you're interested in what's executing in a particular part of your infrastructure, you can focus on the pods. So because the pod also includes a service name that's quite useful so you can see what services are running on that particular pod. But again, it helps you to locate if there's particular problems in your infrastructure. And then finally, I've got a graph that's basically looking at the error ratio between the, for the different services. So again, you can see whether a particular service is starting to generate more than the usual number of errors. And you can set up alerts that would be triggered if certain thresholds were exceeded. Okay, so that's just a quick demo. So just to recap, this is, this demo is primarily to demonstrate the integration of the open tracing technologies with something like Comedius for capturing application metrics. But within the context of a Kubernetes or OpenShift environment where you can also capture information implicitly about where those services are running. Okay. All right. Up into Yuri's last slide, so we have the resources slides up there. And I just want to say, really, thank you for this. This is wonderful to see sort of the interplay of all these different open source projects and how they all interrelate. And there's a lot of them in here. And this has been very, very good way to showcase that lots of different things. The open tracing project, Yeager, Comedius, Spring Boot even, it's pretty cool. I think you've done a pretty awesome job with this presentation because I'm not seeing any questions yet from any of the many folks that are following along. Is there any feedback that you want to add in, Yuri, now that Gary's finished his bit? Yeah, people probably lost. I had to go pretty fast. I just want to mention that. So a couple of, like a few links here. So for the open tracing project itself is opentracing.io. And then there's a Gitter chat room if you have questions or want to discuss things and this is the link. And then this is the link for Yeager for the main repository. We also have a chat room for questions and so on. And these demos that we've given, they actually have blog posts that essentially describe what's happening and in particular like Hot Rod has a very detailed walkthrough blog post that kind of talks about the same thing that I talked about, but with more examples and at a slower pace, obviously. And Gary's blog post that he showed is also here. So if people want to check them out later and actually go to the repositories and look at the codes, these are the links. All right. Well, there are a couple of questions now that I've put people on the spot. Jethro is asking, the sampling in Yeager tracing, is it span level or trace level? It is head-based or tail-based sampling? Yeah, I can answer that. So definitely an expert asking that. So sampling is trace-based. Once a trace is sampled, it essentially remains sampled throughout the whole architecture. And it is head-based. So the sampling decision is made at the very beginning and when the trace ID is generated first time. That's the only way for us to actually ensure consistent sampling across all microservices. But having said that, we actually have various work in progress that are trying to add other ways of sampling things. And that was Jethro, who's from the MassOpen Cloud that's actually using Yeager today. So hopefully we can get some feedback from you guys soon. There's another question from Vikas. Did you measure any performance impact after implementation? So this is kind of very interesting and very detailed question if we really want to go into that. The short answer is yes and no. Because the actual performance impact cannot be measured in isolation just based on the tracing itself. It really has to be measured within a particular service, in a particular traffic pattern because it's highly dependent. So we usually at Uber at least run tracing with a fairly low sampling rate because we have very high volume, very high traffic. And so because of the very low sampling rate our performance impact from tracing is completely negligible. There's like nothing to talk about even. But if you crank up the sampling rate much higher then you will start seeing definitely some performance impact. The reason why that question is actually very difficult to answer is because that performance impact is itself very hard to measure because it's not just like how much CPU time or CPU load you add to the service. There's all kinds of other applications like how much memory pressure you create, how much throughput is affected because trace collection happens in a critical part of the application of the request themselves but trace reporting happens in the background and yet that background work is somewhat expensive if you sample a lot of data and so that starts affecting your application throughput and latency. And that's why you really have to try it out. I mean with a low sampling rate you're not going to have any performance impact but if you want to go to very high sampling rate then you definitely need to try it out and see what happens. So Narayanan is asking actually a good question can we enable on-demand tracing with this if performance is a concern? Gary's come back with a little bit of an answer. Gary, you want to try? Yeah, it is probably better if your answers but I believe we were working on an adaptive sampling mechanism that we would address that so you would be able to switch off the tracing and enable it for certain scenarios when a problem occurs. Yeah, I can add to that. So there are two parts here. First of all, it solves the problem of having very low throughput endpoints which would be affected if you have very low sampling rate in a tracer then some of your endpoints may be sampled and some others may never be sampled because of they're just very low QPS. So adaptive sampling takes care of that and guarantees certain throughput of traces for any endpoint. And the second feature of adaptive sampling is what Gary mentioned is that it actually dynamically adjusts to the traffic from your endpoint and it can either increase or decrease the sampling rate based on certain throughput that desired throughput into the storage. But I think what this question was really about is on-demand sampling and that's possible via two ways. One way is you can do that programmatically. Open tracing has a standard tag called sampling priority. If you set it on a span with a non-zero value Yeager interpreted as a signal that you want to kind of turn that trace into a debug trace and it's going to be guaranteed sampled across the stack and it also bypasses any down sampling that may be happening in a collection layer. So that's one way or if you don't want to do it programmatically Yeager also supports, Yeager clients support a special header I think it's called like Yeager-debug you can pass a sort of correlation ID as part of that header and then it will also trigger the debug functionality for a trace and then you can go and find that trace by that correlation ID that you provide in the header. So that's useful if you want to like send the curl request into your application from outside and just saying I want to trace this curl request where obviously you cannot set programmatically anything because it's a curl that is not instrumented open tracing. But header allows you to do that. Does Jerry is asking does the adaptive sampling idea use the circuit breaker pattern? Not quite sure about Yeah, I'm not sure what that means, but yeah it's basically adaptive sampling works at the central collection tier and it measures all the traffic that's coming from a particular endpoint of a particular service and it has a target and if we see like oh we want 100 traces per second started by this endpoint and if we see a thousand then we're gonna reduce the sampling probability by 10 times. So that's how it works. So I guess it's like kind of a circuit breaking. And we have one last question I think we can sneak in here Jeff Rose again asking granting and merging are not captured right? It is by design not in the dapper model. It might be just a yes. I think there's potential for the open tracing model to support it because it has it can handle multiple parent references which the dapper model is a single parent approach but I don't know if I think more work may be required in the standard just to maybe define additional references with reference types. Yes, yeah, exactly. I mean the references mechanism and open tracing does allow you to have multiple parents but there hasn't been like a lot of work put on that reference type defined for that use case currently but there are open issues that if you want to provide an opinion there's definitely an issue about that and other similar situations where you want to there's a related issues like when you want to link to different traces then you can also use the reference mechanism to link them. So that is really all we have time for and I really appreciate Yuri and Gary for taking the time out today to do this. If you guys are interested in Jaeger or open tracing I know like Yuri just mentioned there's a lot of issues on the Uber Jaeger GitHub repo that you can weigh in on and give feedback on we'd love to hear from you all and stay tuned for lots of new things coming with Jaeger and we'll probably get these guys back on again sometimes soon with sort of a roadmap where we're going from here kind of talk and then hopefully some of you have mentioned that you're using it in production on your POCs can also talk about some of the work that you're doing to implement this and the benefits or whatever at your facility so if you'd like to also be part of this just give us a shout and again thank you all for joining us today and this will be up on the OpenShift blog post and a few other places within the next day or so so thank you again for joining us. Thank you.


Everybody not here for late in sports cards ripping six boxes of 2022 bow and chrome baseball choice. These are for MOD. Good luck Exercise 10-4 I to I'm a letter Kenny fan. We're actually just talking about that in the break room this morning Such a good show you seem letter Kenny It's great. And here we go.  Lots of color in that box Yeah Blue mojo auto to 150 John Rhodes. That is first woman auto. Yeah, we Rojas That is base auto Benjamin Cole's or Cowles box three is refractor auto Alexander Suarez to 499 Juan Guerrero base auto back. This is Esteban Machado base auto boxes to go Shiny on top here. Do you nice yellow refractor auto Gavin Tonkle to 75 ray wave auto That is Dale and Lyle to 150. That is Willie Faunas Base auto right two boxes to go. Let's see something crazy. Nice color coming Hopefully it's Hopefully it's a big name. That is refractor auto to 499 Evan Lee and base auto Ryan Wreckley gold shimmer auto Jackson Meryl 30 of 50 Awesome hit. Congrats ammo. There you go gold shimmer 30 of 50. Mag that one for you All right, let's see if we can top it here last box Easy to top that one, but might as well try right is blue mojo auto to 150 Nathan Hickey 19 of 150 nice base auto Jonathan Mahia you go ammo Did he really that's nuts Last hit is base auto Esteban Machado. I don't know they're asking if Hickey was your catcher. Yeah, that's my boy I just sent him a picture. Yeah, he just sent him a picture of the card All right, ammo that'll do it for your boxes appreciate the purchase Congrats on that Merrill. We'll get these right out to you


beautiful to be here this morning. It does. Thank you. When James got here it just felt like an instant recognition, you know, and it happens quite often when people find their way out here. It's a bit of a pilgrimage just getting to the monastery. We're about, I don't know, 10 miles down a dirt road in a very remote canyon in eastern Utah. Very beautiful and secluded and remote and peaceful and all those things that help us drop down into the truth of who we are and let go of those obstacles and distractions of the world. So when you got here it was just like, it was so, you know, heartfelt. So beautiful having you here. Thank you.  They used to show this in old movies where there'd be, at a fair or something, there would be a hot air balloon with the basket and it would be tied down and it would be just off the ground but it would not be able to fly and it would be tied with these ropes and that's what perception is and we we're always tied down by our thoughts and our ideas and our concepts and coming here I know that for the first little while I could I could actually feel them. That's the beautiful thing about an environment like this is that you can feel those ropes and the chains that that hold our consciousness. But then if you're just gentle with yourself it's like beginning to untie those and one gets untied than another and then before long you're flying. The balloon has let go and you're able just to soar and that's what an environment like this and the beautiful monastery like this is for me and it's in that pause where the miracle happens. Absolutely. Yeah, I mean it's all about mind, right? It's not about what's going on out here. You can have that stillness wherever you are but here it's the because the stillness is amplified so is the opportunity. Yeah, it's like the like in nature you know a lot of people feel this this connection this deeper connection in nature because you know the trees aren't trying to be better trees you know the the chipmunks aren't trying to be better than the other chipmunks and there's so there's a naturalness here that is very much the way that the mind actually is but there's so many distractions in the world that you almost think it's normal to have those tethers, right? And like you said you don't have to come and live in a place like this but to be able to come and have a space where you can come and just start to get in touch with those tethers and and let them go and then carry it back out you know carry it back out into whatever whatever you're doing and we just recently opened this up for people to come it's been a pretty well used property for deep mind training based in the course of miracles really using the mirroring of relationships and undoing the blocks to the presence of love and so it's been it's been beautifully used and now it's it's kind of like this wonderful support for the silence we're dropping more and more into the silence ourselves and we just have this beautiful heart opening for people who have that desire because there's not really a lot of places that you can go to to find that you know so yeah we're very very inspired for people to be able to come and just let go just let go you know and and just be without an agenda we're not teaching anything here we're just a living demonstration the peace is possible and it is our natural state you know so it just it's it's new to us to be able to have others from from the world come in and just stay no matter what tradition they practice whether they practice anything at all because the presence is the presence it's not it's not a certain way and if you are a student of a course of miracles this is a really special because it is such a living embodiment of that vortex and I always like to think of the course as a vortex because when it pulls you in it doesn't let you out and this is a place where that can really happen once again in the pause you get away from all of those tethers all of those ideas and thoughts and so-called responsibilities and could just be present here this is a place where the course can really sink its hooks into you and that is a good thing and to have people like yourself and the others who are living demonstrations of that we're here for no other reason no other reason and and it's that focus the focus on that one thing yeah like the course says to be in the kingdom of heaven you must focus your full attention on it and to be able to just let everything go and and let that which loves you find you you know but it like it has to fight you have to have the spaciousness in the mind for it to come into awareness open your heart you know this is this is the most important thing really and we just really love it we we're very grateful for it it's all given by the spirit you know there's no efforting to try to make anything happen it's just natural and when you come into that naturalness of the forgiven mind yeah then everything is added unto you that's right so it's just and last night we had a beautiful joining with David and and we did a movie session just so deep and profound yes I'm just sitting there going wow you know this is this is the happy dream you know sitting here with James you know heard about you for years and it's just such an honor to to be able to share some space with you you know and it's it's like a lifelong it's like we just know each other so lifelong relationship and so that's how it is with the mind when it clears yeah there's only happiness available so that's all that stuff everything else is falling away it's amazing actually to watch the healing that occurs in the silence you know I think everybody has done so many retreats and they're all very valuable but I've seen the immense healing that happens just because it's all about this interconnection and so to be able to have that is just a real gift to the mind and a lot of people wouldn't probably think that you know that if I just go and be quiet you know because we're so used to process work different types of things which have all been helpful but eventually it comes right down to the self and this this deep deep prayer you know like the Course in Miracle says prayer is the medium of the miracle so without that prayer that's right it's a process you know and without that true healing it's just management trying to manage and trying you know we don't say it's an illusion very often here because it's not helpful yes that's that's eventually you'll have that experience but that purification has to take place so you know and silence is David Hoffmeister always says silence and relationships are the fast track to awakening yes you're faced with yourself you know yeah so it has been a deep immersion in the mysticism of the Course through the music and that has made it come to life yeah the mysticism and that's really really what we're about here is the direct experience we go through many years of perhaps studying the Course and just you know for me trying to figure out what is this really saying and then it's like oh my gosh this is really about a direct experience of who I am and that's really what the monastery is about is it's about this direct experience and you know the conceptual ideas are important for a while and then it's like you just keep dropping don't you it's like you said it's a vortex and it it takes you down and then about halfway down you're going oh my god what is this really saying oh I have to let go of myself it's always just being so open to receive the message however it's going to come and don't decide on how that's going to be you know just be like open-mindedness you know the last attribute of a teacher of God nothing like open-mindedness there's nothing like open-mindedness it's like the best it's like you're just like okay you know you open to that that quantum field you know the forgiven mind so it's simple you know everything is really very simple I used to not think that but now it's like it is my experience yes sweet yes it is thank you so welcome thank you for just hosting me for a couple of days it's all it really took but I have a feeling I'll be back for more yeah so how about singing this I really want beyond this word there is a word that I want


Next question is from coach dad CT. I don't drink alcohol, but my thing is Dr. Pepper. If I have three to five cans on the weekend, am I better off with the natural sugar and calories in the regular one or the diet one with artificial sweeteners? I like this question because I think it was Sal who got me to kind of really reevaluate this. I think I've openly admitted on this podcast that I've had this like diet coke thing, and I still occasionally have these. Now it's like, you know, once a month or once every other month, one finds its way in there. If I'm enjoying the other day we had in and out burger and I like a diet coke with my in and out burger and I'm there, right? I don't have my Hanson natural sugar option while I'm there. So what I've done though is to eliminate pretty much drinking diet codes completely is, you know, just say, Hey, I'm going to have an Hanson is a product that I really like. It's a brand that I were not sponsored by them or anything, but they're they have natural sugar and the calories are still pretty minimum. I think it's 130 calories or so for the for the drink. And what I've noticed is that instead of drinking diet codes and saying, Oh, it's zero calories. So allowing myself the freedom to have it every day or twice a day, saying, you know what, I'm going to make the choice of having something with sugar and knowing that it has 130 calories, I tend to make a better choice. Plus, I notice the way I retain water in my gut. So when I'm when I'm doing diet cokes, I definitely get this kind of like inflammation. And I definitely feel like I'm holding water, especially in my gut. And when I do natural real sugars, I don't get that. Now it could also be because when I drink a natural sugar drink, I tend to have one and I have one maybe every other day. If I have diet cokes, I could watch myself go from one every other day to one a day to even allowing myself to have two in a day really quickly. And maybe it's the overconsumption of it that is causing that. Yeah, the problem with this discussion is always that we don't consider the total context. Okay, so is it better to eat to have the sugar drink or the artificial sweet and drink? I don't know. I need to look at the rest of your life. I need to look at your behaviors. Here's the main challenges that I see with artificially flavored drinks. Now forget the whole debate about whether or not the artificial sweeteners are healthier or bad for you. I'm going to let's just assume that there's no risk with them. Although I think that's baloney, let's just assume no risk. It just makes your drink taste sweet. And so there's no calories in it. Studies show consistently that when people include artificially flavored drinks into their diet or replace sugar drinks with it, and they're left to their own devices, they don't lose any weight. Now why is that? Is it because the artificially flavored drinks cause them to gain weight? No, it's because they make up for it by eating other food. Behaviorally speaking, it doesn't cause weight loss. Now if you track everything perfectly and then you cut out sugar and replace it with artificial sweeteners, you'll lose weight because you're going from calories to no calories. But here's the behavior issues I see with artificially flavored drinks. This is what Adam is talking about. Drinks that have calories and sugar, those have a natural barrier. What I mean by that is there's something that people tend to consider when they drink those sodas. There's a consequence. It's on the can, 130 calories, 30 grams of sugar. That's my consequence. People's behaviors when they do that, especially health conscious people, they tend to limit the drinks or have a few. And that's it. When you have a can of soda that has zero calories, you have eliminated the perception of the consequence.  Now, what's bad with that? Well, we know that it doesn't reduce your food intake. You end up making up for it. It definitely throws off how you perceive food. So now things that are sweet, naturally, don't taste nearly as sweet. Compare a diet Coke to a regular Coke. And a diet Coke is sweeter. Much sweeter. That's the biggest thing that I've noticed. And if I get in a pattern of drinking, even something like that has like a stavia or something I consider to be like a better option in terms of, you know, a sweetener, just like they make up for the fact that the calories aren't in there by, you know, really turning up that that sweetness. So your body kind of responds like, ooh, that's nice. But then that affects the decisions I make later on in terms of like what I'm craving or what, you know, might find its way into my into my food and like having desserts and things like that. Like it's just my my palate starts to then kind of crave that sweetness in other directions. This is exactly what I found what I've and this is this is the read like someone's probably listening going like, oh, well, how can't you why can't you discipline yourself to have the the one diet Coke every other day or few days the same way you do with the handsome. And that is why it's because what ends up happening is I have this, you know, artificial sweetened drink that is like superpower tasting sugar and changes my palate. Now when I have a handful of grapes or I bought into an apple, I don't get that same satisfaction as rewarding. It's not. And so I don't get that same pleasure signal in my brain as I was getting from that Diet Coke. So then it makes me want more of them. And so I keep chasing that. And so I have and I really didn't test that this this behavior like this until we had brought this up on the podcast. The way I kind of looked at it was like, ah, you know, I'm very aware of my behaviors. If I start to see myself go from the Diet Coke occasionally to the Diet Coke every other day to the Diet Coke every day, then all of a sudden I allow myself and it's always like if I caught myself doing two Diet Cokes in a day, I know I've worked my way up.  But I never really thought, Oh, what if I just allow myself to have a sugar drink when I want it? And will it be easier for me? And you brought that up when this discussion came up before. And I actually applied that and it's been unbelievable. Like I I don't feel I need the Diet Coke. So I don't get caught up in that. When I have a Hanson drink that and I tell you what, another reason I wanted to bring this this question up is because I had been on I've been in search of a brand like Hanson that I really like. And I found one that's even healthier and even better and has even more flavors that I like that I cannot wait to introduce to our audience because we've been going back and forth for a few months. Oh, those are the ones that we tried? Yes. And so that's getting sealed up right now. So we have a new partner in that space that I'm super pumped about. Because this definitely this is a brand that really speaks to me because that has been a long time battle for me is always wanting to go revert back to Diet Coke. And I feel like this is something that's going to completely eliminate that. Yeah, one of the problem is big problem that we do in the fitness space is we look at all everything from a mechanistic point of view. Oh, look, no calories. Therefore, it's okay. But we don't look at our game. We don't look at the big picture. Look, artificial sweeteners have existed now for decades. And we still have obesity. It hasn't solved anything. So what's what happens? Well, it actually encourages tends to encourage, I should say, a bad relationship with food. Here's a good relationship with food. I want something sweet. Okay, there's some calories in it. That's okay. Because right now I think I'll enjoy this. A bad relationship with food is consequence free pleasure seeking. Okay, apply that to anything else in your life consequence free pleasure seeking. There's always a consequence. You think there's no consequence, but there's always a consequence and your body does become desensitized. When you do this often, this is with everything this could happen with anything that gives you pleasure.  Same thing with food. So look, I've been training people, we've all been training people for a long time. I've never seen somebody fix their nutrition issues by replacing sugar with artificial sweeteners. In my experience, it's never not only is it not fixed, it usually causes more problems.