a little introduction into who I am and how I come to be a vegan activist animal rights activist I haven't always been this way haven't always been um a good boy I went down the wrong track for many years like many years a decade and I had an epiphany when I was imprisoned part of that epiphany was becoming sober realizing the error of my ways and I started to right the wrongs of my past okay so I've been living in amends ever since and part of that is helping those who can't help themselves I always wanted to help people and that was a I thought that was a noble thing to do but then I realized there was a group of beings who needed my help more and they couldn't speak for themselves they were screaming and no one was listening so I decided to help animals become vegan after a series of events really a bizarre series of events and it was mainly due to my clear mind and pulling myself away from the environment that I was in so that's a short story it went for a lot longer than that but we don't have much time when you talk about this subject with people you are met with opposition that opposition stems from conditioning we've been taught a certain way for many years whenever I've mentioned a vegan to non-vegans always angry or laugh or just make fun of you my mum went vegan a year ago instead of failing liver fatty foods and actually cured it and I made a status about that and I still had people I've grown up with attack me so I was wondering why you think that is why why is it yeah we've been taught we need meat for we need milk for that something humane happens in a slaughterhouse we've been taught all these things and we're fed lies you look at a milk carton you see a green pasture and you think that's the be all and end all the dairy industry they don't show you what happens in between if the right person talked to them they wouldn't think it was very funny if they seen a pig screaming for their life in a gas chamber yeah no but they just don't see that so like you have to look at it from like their perspective okay people ridicule things they don't understand and what can happen when you bring these subjects up to people is they have cognitive dissonance cognitive dissonance is the feeling associated with contradictory belief systems she gets mad at you yeah yeah I think because like she might feel like I don't know maybe she feels attacked or something like that so she might get angry but she just probably doesn't understand like so give her some time so your belief if your beliefs are contradicting your actions you get an uncomfortable feeling in your tummy doesn't feel good feels a bit frustrating feels like wait a second these beliefs about animals you're talking to 99% of society who agree animals should be treated morally well because of the conditioning right and because people just don't understand what veganism actually is yeah it's about not stabbing animals for burgers the core principle is about exploitation and where exploitation leads okay individuals who would like seeing a dog be butchered in front of their eyes or even a pig you know they like to they like to it to remain behind closed doors but when you bring this up to them many excuses come up and it's almost like everyone has the same ones but it's weird like you might not even even know any any of these people okay that might they might be in america and you're over here in adelaide and they'll say exactly the same things to excuse the abuse that goes into their burger as the person in adelaide does and it's almost it's very bizarre the best way through that is to ask some questions get them thinking yeah like how has everyone been taught the same thing what is the number one excuse you hear someone shouted out protein that's the number one i'd probably say that's up there number one too because that's how they marketed it for so long meat for protein you have to eat meat to get protein you can't get protein without eating meat it's just impossible you will die you will die five years ago stopped eating meat not dead yet and i think like the thousands of vegan bodybuilders would beg to differ uh protein where does it originally come from it originally comes from plants all protein originally comes from plants now the lion eats the deer you might say well the lion ate the deer got their protein from the where the deer get the protein from exactly it all stems from plants all the nutrients you need so it's basically the same argument what about iron well you eat cows to get iron where did the cow get the iron from plants all nutrients nearly all nutrients if the vegetables and vegetables weren't sterilized and the water wasn't chlorinated b12 would be on these fruits and vegetables and it'd be in the water supply you can supplement with b12 i think it's it's important that everyone does the animals are injected with it but nutrients all the all the nutrients we need come originally from plants do you think it's moral to stab an individual to death to get the protein out of their flesh do you think it's moral to murder someone to get the iron out of their blood we're drinking the blood of innocent beings to get iron and there's no way around that's the truth and i speak the truth it's harsh it sounds really like come on mate that's a bit militant no it's not it's the truth where do you think you're getting the iron from the blood of innocent beings so the question would be do you think it's more to stab someone to get iron and all animals are stabbed you should tell me an animal that doesn't get stabbed actually maybe male baby chicks in the egg industry you don't eat those male baby chicks though but fish get stabbed in the throat cows get stabbed in the throat pigs get stabbed in the throat okay they're gas chambered first or they're shot in the head first or they're electrocuted electrocuted first but they're all stabbed in the throat why to drain them of their blood so they're all being stabbed in the throat okay now people go to me joey you're being animated and you're trying to you know over exaggerate my words cannot over exaggerate what happens to animals you watch the footage watch the footage my words don't do it justice or even come close to doing it justice it's an absolute abomination i could say well you know there's iron in my blood do you think it's more to stab me for the iron in my blood and they could say well no because you're a human okay okay here we are humans and animals there must be some massive difference between us that makes it more to stab a cow and not moral to stab a human being what is that difference we could say okay well joey like you know humans are clearly more intelligent than cows cows don't have iPhones we could say well not all humans are intelligent are they some human beings are born with a disability aren't they do we treat them immorally no we don't we protect them with human rights okay just because a cow might not be able to drive a car or use an iPhone or you might think that you can do mathematics better than the cow does not morally justify stabbing the cow to get iron because you would not apply that justification for stabbing me to get the iron out of my blood you would call it an injustice you would call it murder but for some reason we've made a distinction between cows and humans and we've said well even though cows are the same in all the ways that matter aren't they think of the ways that matter sentience what is sentience they are self aware they are conscious beings there's someone inside of there an individual with a personality experiencing their reality subjectively through their own eyes through their own lens okay just like there's someone inside of you who gets scared who gets hungry who gets tired escapes danger avoids pain you know welcomes well-being all animals want to experience well-being they want to avoid pain and suffering okay we have that in common with cows pigs fish chicken you name the animal okay yeah there are differences there are i'm not going to say we're all the same there's differences between human beings as well it doesn't justify treating one human differently from another you can say animals there are different species they look different to us you know cows they look different to you know imagine if we use that type of discriminatory mindset against each other we have passed and we still do today and it's what separates us speciesism okay it's like racism except it's to do with discriminating based on species and it's usually human supremacy human supremacy to the point where we're like we think we're that much better than animals that we can steal their children off of them forcibly impregnate them stab them to death and eat their body parts and use their skin as a sweater okay that's what human supremacy does to animals what does racial supremacy do to other humans gas chambers horrible stuff we put pigs in gas chambers up here at marie bridge i don't know if anyone's been to marie bridge uh to hear the pigs scream for their lives and beg for mercy inside of a gas chamber it is absolutely heart wrenching and you can't do nothing do you know why because it's legal what we do to pigs in gas chambers is legal if someone comes up to you guys you ever do any protein after everything i just said then we discriminate against animals certain animals based on species okay it's usually human supremacy but not always because how many people have a dog at home nearly everyone has got a cat you got some companion animal a bird maybe you're rescued a bird maybe you know most people have a dog i always use dog because i've always been around dogs you know we all know the character of dogs if anyone hurts a dog around australia kill the bloke kill them and i've and that's not that is not me saying that you go to any facebook video of someone abusing a dog go through the comment section kill them skin them alive do exactly what he did to that dog to him true are they all vegans of course not of course not they're just compassionate people and they don't see that they're applying one moral standard to dogs that they completely disregard when it comes to cows pigs fish chicken lambs that are on their plate that died were murdered they didn't just die naturally they were murdered that their life robbed from them in a slaughterhouse disgusting place a slaughterhouse so we discriminate based on species because of cultural conditioning okay you go to yule and china dogs are food okay dogs are i don't think dogs are food i don't think pigs are food either okay see what culture does it it conditions people to believe certain animals don't matter and the root of all evil the idea that some lives matter less we can just stick let's just stick on this intelligence thing because it's a really important point for everyone even if you're if you're not vegan if you are vegan it doesn't matter this is a really important point children would you say a four year old child is as intelligent as your average 30 year old human of course not okay they're very vulnerable to children aren't they vulnerable they need to be protected defended if anyone touched a child abused the child it would be on they'd be in prison or you know god help them god help them animals pigs let's just say pigs they're around a three that they're comparative with their intelligence around a three year old child let's just say this is science speaking i don't know if it's true let's just say for argument's sake they've got about their medical capacity of a three year old child they might be more intelligent might have different intelligence i don't know we treat pigs like the worst criminals we treat we treat pigs worse than the child abuser and they did nothing wrong pigs have done nothing wrong to any of us okay and we treat them worse than the worst criminals on earth horrible it's a really tough topic to talk about because this is the basically the absolute raw truth of it you need to know how to debate these topics you know when people start going oh we're smarter than animals what are you gonna say like well i'm smarter than four-year-olds should i go around killing four-year-olds and eating their bodies of course not like who would who would say who would even suggest that why does all logic go out the window when we start justifying animal abuse you know why because they taste so good animals taste good i get it i do get it but like meat tastes good they would usually say not people like to separate meat from the animal it's easier for them it's just the way they just look at meat as meat as some inanimate product that just appeared in the supermarket so they say meat tastes good and i always correct them and say animals you're saying animals taste good the flesh of an animal that who had their life stolen them tastes good taste is a sensory pleasure sensory response basically like okay i happened to my tongue the sweet salty there might be a little bit of fragrance that might have used plants to flavor the flesh they might say well it well it tastes good and i'll get that a lot who gets that a lot get that a lot tastes good okay fair enough i'm not saying that i quit eating animal products because i hate the taste of bacon double cheeseburgers okay that's not why i thought it tastes good too but would it taste good if it was torn off the animal uh draw i don't know a bit of fur and bit of tendon and maybe if you had to kill the animal yourself and watch the blood drain out of them would would you still be hungry i don't know i don't know if that would taste very good that'll actually leave a bad taste in your mouth but taste using sensory pleasure to justify an immoral act where else does this happen sensory pleasure oh that made me feel good but there's a victim involved okay there's a victim involved and the attacker gains sensory pleasure from it now i'm not saying there's they're a conscious attacker because that's not true not all people that consume animals are conscious animal abusers but when you present them with some information and you might show them what's happening inside a slaughterhouse like we do with anonymous for the voiceless which i recommend everyone get involved with you show them and then they say but it tastes good they've seen the violence they know that there's blood on their hands because the consumer pays for the violence to happen without the consumer's dollar the violence goes away and then they use taste to justify it they then become a conscious animal abuser sorry that's the truth you are there's the second hand obviously you're not abusing going around abusing animals yourself you pay someone else to do your dirty work but like i did for 26 years i mean like i'm not like devoid none of us i don't know who's been digging the whole life okay none of us have okay we're all guilty of paying for someone to abuse animals but a rapist i hate saying that word sorry if it triggered anyone but it's true a rapist will get sensory pleasure from an immoral act now you might go Joey oh my god meat eating isn't the same as rape i'm not saying that if you think i'm saying that you're not listening to me an immoral act where you gain sensory pleasure boom an immoral act where you gain sensory pleasure boom that's the justification sensory pleasure taste for doing something horrible and i'm sure like a human being's flesh with the right seasoning would taste really good too mince them up into a burger you know put some herbs in their salt pepper garlic powder you know some cheese on top you know maybe made from the breast milk of a human being you know you could make a human burger tastes really good too it wouldn't just you know genociding human beings for your taste preference and you could say again joey will what was you know humans aren't animals we went through that what is the difference between us what is the distinction what is the moral distinction between us that justifies what we do to them i've been searching for one come on come at me where is this one i've been i've been five years searching for the moral justification for what we do to the most defenseless vulnerable beings on earth still gets fine one we can go through something though here's one personal choice who's got this one it's my personal choice to eat animals joey leave me alone leave me alone stop forcing your beliefs down my throat okay if i was speaking up against child abuse would you still say joey stop forcing your beliefs down that child abuse's throat no me eat his aunt child abuse is not what i'm saying okay don't twist what i'm saying but if i'm speaking up against animal abuse that's what i understand veganism to be it's not some health journey for me it was at the start you know i lost a lot of weight doing juice fasting found out about the power of plant-based foods the ethics is what turns you vegan and usually when you stop consuming the flesh of you know animals who suffered and you know all that fear something wakes i don't know if this is just conjecture but something sort of clicks and you understand the ethics personal choice it's my personal choice um yeah it is it's it it's a choice i'll say that i'll say that much it's a choice so if someone says to you whoever it may be it's my personal choice stop forcing your opinions on me you know you could say well your choice has a victim so it ceases to be personal basically you know yeah it's a choice we have many choices in life you can choose to exploit and abuse animals with your food choices or you could choose a vegan burger and there's many around okay now your health is a personal choice eat vegan chocolate eat the vegan junk food i couldn't care less if you smoke vegan cigarettes okay as long as you know but actually you might if you're health you know you probably want to be around to see your kids as long as you're not harming anyone else by harming yourself you know that's fine with me a real personal choice not one like hey you know i'm going to go buy some bacon this pig's going to be gas chambered six month old six months old these pigs little children screaming terrified scared covered in their own feces screaming for death inside a dungeon filled with gas you might say well it's sleeping gas they just fall asleep no that you know a few years ago that you might have been able to get away with that until some brave activists cameras down there and we're seeing just how gentle that sleeping gas really was horrible horrible what it does it burns inside their eyes uh the co2 carbonic acid it's called when it reacts with mucous membranes inside their lungs inside their mouth and it burns you have a cracker can of coke in your eye get that gas in there think about that even if it didn't hurt though you know if it was gentle gas we wouldn't put humans and gently gas them to sleep irrelevant how gentle the gas is but it's still horrific to hear them scream and suffer suffering is bad using animals is the problem though personal choice okay so i mean you might you might actually use that excuse yourself which you know you might think you know people are infringing on my personal choice that's not freedom they're taking away my freedom by saying i can't eat my meat you know but you know that that's great from your own point of view but we're asking people to be altruistic and see it from the animal's point of view where's their choice their choice has been robbed from them you know everything their children have been robbed from them their choice to bear their own children and to live in in peace and harmony is being robbed from them this one is really common who can guess what it is no close it's on par with the food chain lions lions there's many different ways of explaining how people will say or lions eat other animals other animals eat other animals in nature the spider eats the fly this is what i got when i was on the good morning britain anyone see the good morning britain show okay the celebrity chef goes the cat eats the mouse the spider eats the flyer that's just the way it is the food chain animals eat other animals in nature and quite simply if you were going to navigate your morality by the actions of the animals in nature you'd be doing all sorts of crazy things and we could be justifying all types of crazy things couldn't we i mean because animals kill each other in nature they're in a very different scenario to us to us they're in a survival situation we are not okay we are not we have plant foods we can manufacture all of our food out of plants got plant agriculture that's fine the lions aren't in the same situation they they do it out of necessity like look we could justify killing each other because lions you know kill each other or they have fights and they claw each other's face off or they they go and you know hunt down an antelope we could use that same justification to hunt down human beings who we might deem as prey absolutely ridiculous it's called basically it's a logical fallacy it's an appeal it's a simple logical fallacy you can look these logical fallacies up it's one of the most common it's an appeal to nature fallacy you are saying basically that because it happens in nature that it's moral or that it's even good there there's good things that happen in nature there's also horrific things that happen in nature so you can't go nature justifies my my moral behavior it's crazy it's actually quite crazy when you think about it think about what other animals do to each other without consent you know they don't ask for permission before they start humping each other they don't act in a civilized way we came to be civilized human beings civilized compassionate you know sensible you know but it all goes out the window when we start trying to justify our abuse of animals for cheeseburgers what would you say like if someone goes well you know joey like our ancestors have been eating meat for millions of years you know what i mean like ancestors though like and if you don't know you just well that's correct well there there's science against it there's science to support it i think the majority of science supports that we we're eating you know meat for millions of years you can't deny that can you oh i don't think it's wise to deny they we have to be truthful but you know our ancestors were doing a lot of crazy stuff and what is an ancestor really what was 200 years ago as an ancestor well are you 100 years ago century ago as an ancestor ancestors in world war two gas chambering people well like how much of what our ancestors did do we want to morally justify or use to morally justify our behavior i mean if you're going to use one you have to use it all you can't apply that logic you can't say okay ancestors ate animals so therefore it's moral for me to do it today or therefore it justifies me doing it today ancestors were committing rape you know war crimes murdering each other i'm not going to use that to justify rape war crime and murdering each other today though because that's just crazy you're crazy no you're going to use ancestors as a justification for your actions you either take everything they did or nothing they did you can't use it you cannot use it it's a it's a logical contradiction you can't use it so yeah i mean it's also it's all about supply and demand it's great to tell people about supply and demand if you're talking to them because a lot of people just they they they might have learned it in school but they might have forgotten it these industries only exist because of the consumer period that is that that sentence right there i mean people go joey i'm going to go turn this farmer vegan so he turns his farm vegan look if that farmer turns his cattle farm where he's ranching cattle for beef into a vegetable farm the demand for beef still exists it's done nothing to the demand you want to turn the farmer vegan because then he'll stop contributing to the other beef farms that's great but you know what's going to happen if he cuts shuts down his beef farm the beef farm next door it's going to get double the business that's how it works you shut down not oh my god this slaughterhouse i've seen horrific slaughterhouse we need to shut it down you know what the horrific slaughterhouse next door there's no no such thing as a good slaughterhouse okay no such thing as a good slaughterhouse next door is going to get double the business we target demand that's how things change the consumer here we go this is another one what is what am i going to like how am i going to make a difference like if i stop eating animals that's all good and well but that's not going to change anything imagine if everyone on earth had that same mentality seven billion people all like oh what what what what it's it's called an appeal to futility it's also a logical fallacy i learned a lot of these online ask yourself hey there's a these are very important to know appealing to futility it's it's futile it'll never happen so why should i change why should i stop committing a conscious act of animal abuse because other people are always going to commit conscious acts of animal abuse why should i not abuse that child people are always going to abuse children doesn't matter if i don't apply the same logic it's absolutely insane when you apply it in a different context think about that i say people are always going to murder each other in war too people are always going to be raping you know each other and those horrible things always going to be happening but you don't do it do you you don't do it because of there's you know you have your own you know moral code that sort of and and you will have your own victims everyone has their own victims i had my own victims 26 years not just animals human victims i was going down a very violent path okay i realized that i stopped you know but imagine if my mentality was like no i'm not going to get in these bar brawls and stop bottling people because there's always going to be bar brawls like everyone has their own body count and it's about minimizing that as far as you practically so if someone goes vegan and they can stop you know a thousand animals let's just say they stop 10 god i mean 10 10 animals being tortured abused bred into existence i mean if a thousand people did that so that's the appeal to futility okay this one here i think we'll spend a little bit of time on um because it's my baby i love this one not i hate it it's the worst one it is the worst literally the worst one if someone dared justify you know kicking a small child and said well don't you know mate like why are you so upset the carrots that you eat fill pain too imagine that imagine if someone got a cigarette lighter and started burning a dog on the face you know doing something horrific to a dog which people do do that sick people do sick things to animals let's just use a dog and you know when you pulled him up and like you might have pushed him off and said what the hell are you doing and he said plants fill pain too what's your problem imagine that imagine the uproar imagine you'd be in every single newspaper on earth so that i think that that's on par with the worst i'm going to say like um comparing like a cow a sentient cow beautiful beautiful animals they are like they are so loving so intelligent they really peaceful majestic who's been to a sanctuary who's met a cow many people met a cow not many not many people have met a cow beautiful or a bull a male female cow bulls a male really majestic quiet like they're really timid shy beautiful animals it's like something there's someone in there and it's really it's a beautiful experience comparing a someone to a bag of rice or you know a pot plant saying oh you know that pot plant you know feels pain too so therefore it justifies us holocausting trillions of animals every year ripping them out of the ocean clawing their face like with a massive hook and just you know drap sometimes it gets him in the side of the head they stay suffer on the side of a boat you know suffocate in a big bath full of ice this is what we do to see animals horrible horrible and then people go well plants feel pain too don't don't you get off my back now a big reason people say this which is like it's basically a misinterpretation of the science um and everyone's heard about you know plants being intelligent really smart plants are they're intelligent they're not intelligent like a cow is intelligent but they do possess their own intelligence and i learned a lot about plant intelligence and i think it's important as vegans as advocates not to dismiss how incredible the plant kingdom is amazing what plants can do trees communicating with each other okay they communicate some type of electronic pulse communicating with each other letting each other that there's no there's danger they might harden their bark to avoid being attacked they spray some type of pheromone in the air to avoid being eaten they sense when they're being eaten they might release some type of poison all of these amazing reactions to stimuli in the environment now plants have been evolving for thousands and that longer than i think longer than animal life i'd suggest i mean plants can even learn okay so some some leaves might have like a mechanism where they might close up when they're touched they might be a drop of water touching on the leaf i learned this the other day i thought it was amazing okay and after a period of time the drop drop drop the leaf recognizes that the drop of water isn't harmful so it stops reacting to it amazing right does that mean that the tree is a sentient being with wants desires and needs they want to experience well-being avoid pain and suffering there's an individual inside of there having a subjective experience with a personality it doesn't mean that at all it doesn't mean that at all trees are having intelligent reactions to the stimulus in the environment that's it they're like big unconscious biological computers that's what they are okay there's amazing things that your phone can do too if you touch your phone screen as you know it senses your feet you could call you could talk to siri and siri will answer your phone is an sentient being okay you might say well plants are alive irrelevant there's not a scientist alive that believe that believes that that trees are having a subjective experience like there's someone in there it's absolutely ridiculous to suggest and it's it's it's insane to put plant life on the same level as a cow a pot plant no one goes into rescue a pot plant first from the fire but they might rescue the dog if the if the human beings are safe i think we need to remember to draw the distinction between sentience and intelligence okay a sentience is really easy to explain because you are sentient okay you experience your reality okay if plants did feel pain imagine if they did they felt it and they were like oh my god that hurts this person is hurting me and i need to escape they're not going to get far are they they haven't evolved to avoid pain so why would it make sense for them to be able to subjectively suffer it just doesn't it doesn't make any sense at all and the only people who will say that they're there are some supernatural plants that are having these conscious they're just it's all sort of woo woo science there's no you know real it's just basically misinterpretation of the actual science okay so i like to say is stabbing a puppy dog in the throat the same as cutting up a carrot of course it's not if they see me stab a puppy dog they'd probably punch me in the face i would punch me in the face too if they see me cutting up a carrot they'd say what are you cooking so they don't even apply their own logic they probably drive on grass and you know if they've seen a dog on the middle of the road and there was a we all know the one where there's the lawn and the dog would just swerve to hit the lawn or would you run over the dog if plants feel pain they wouldn't even be a distinction between the dog and the plants and yes you can say also that you know the the animals they eat consume a lot more plants but that's sort of playing into it i think you can say well if you care about plant life so much you know animals that you're eating a eating a lot more plants it's like 16 kilograms of plant food for one kilogram of beef or something like that i don't like to play into that because plants do not have moral value okay plants do not have intrinsic value the only value plants have is the value it gives to the sentient life on earth okay the only reason the rainforest matters is because of the sentient life the rainforest supports okay you take the sentient life off earth there's no capacity to experience well-being there's no reason to worry about suffering no one can suffer there's rocks and there's plants okay plant life matters because of the sentient animals on earth humans and other animals we wouldn't go to court and say you know you're on i'm sorry i just massacred about 30 people and i don't know why you're giving me a hard time your sandwich feels pain as well or the plants in your sandwich screams to death it's just an insane an insane justification


Now, let's hear from Kevin Gilpin how AppLand provides innovation to better visualize your code structure. As I said, this could be quite handy in conjunction with S-bombs that we discussed earlier, but could also be a collaboration tool to help Dev and Sec get on the same page. From AppLand, I'm here today to talk about how we build our understanding of code, how we share that knowledge with other people, and how to use new tools for guidance and navigation as we create, fix, and improve code. When we make structural changes to code that affect how things work and fit together, it's important to just pause for a minute and confirm our assumptions before we start changing things. Getting extra context, getting it oriented is important when making performance changes, refactoring, or fixing tough bugs because the actual behavior of code becomes less apparent when making these types of complex changes. Helping people collaborate and better communicate in order to build good software is my favorite kind of problem to work on. And this is particularly relevant in DevSecOps because security has specific skill sets and values. Bringing Sec into DevSecOps requires everyone to learn more about people and adjacent roles and learn a bit of their language and value system in order to collaborate and share context efficiently. I love making tools that help people who are doing different jobs to work together, and I've been working to bring developers, security, and operators closer together since 2012. To get specific about communicating about code, I'll step into an example which comes up all the time in practical development work. It's a basic communication process that happens every day between three different people in different roles. The first person in my example is someone who's reporting a bug. It could be another developer, a QA tester, or a security tester. It's someone who sees improper app behavior and wants to report the problem. The second person is the developer who fixes the problem, and the third person is the code reviewer. So there are two handoff stages from the bug finder to the developer and from the coder to the code reviewer. At each stage there's a need for knowledge transfer between people who have a very different level of experience with the code in question. In fact, it's possible that none of these people really know this particular area of the code very well. But they all need to work together to get a code change written, reviewed, and approved. The bug finder knows that the dev team wants as much descriptive information about the bug as they can get. What the tester was doing, what they typed in, what buttons they pushed, what they saw. This description can be accompanied by some screenshots. For UI bugs, this works great. Screenshots usually make it evident what went wrong. But what about bugs in application behavior, where it's backend that's misbehaving? Maybe the user is presented with inaccurate information or data belonging to someone else, or they expect to go to one page but end up on another. So what then? As a developer, wouldn't it be helpful if the bug finder could send along the equivalent of a screenshot but of the backend internals? How about a map of code paths including all the dynamic and complex stuff, like HTTP requests, caching, the user, session, security, and SQL? This is the code map concept. And when I say code map, I mean some kind of visual presentation of the code other than the code as text that makes a design aspect of the code easier to understand. Making code maps is possible with an open source tool called app map, which makes runtime recordings of code. It works equally well on large and small projects, web applications, and microservices. It captures all the information I described above and bundles it into a portable JSON format. It's easy to write programs that process, analyze, and display the data. The code maps are an effective way to transfer information about bugs from testers to developers and then to code reviewers. So let me show you an example of how it works. This is the Rails sample app, which is a Twitter clone. Even when you're not logged in, you can see the feed of any user. Right now I'm logged in as example user and I'm following users like user19. I can go visit user19's own page. If I log out and put that URL back in the address bar, I can still see it. I'm going to report this as a bug and request that login be required to see any user page to prevent the data from being scraped by malicious actors or anonymous bots. So I'll start by opening this new issue, require login to view user. We've talked about code maps and how they can help developers, so I'll enhance this issue by adding app maps and I can make them by recording the app while I use it. I'll start by turning on app map recording using the app map browser extension, reload the page to activate the behavior I want to fix, and then go back here to stop recording. When I stop it, an app map is created and uploaded to app map cloud. If I don't want to use app map cloud, I can record app maps using the app map extension for VS Code or JetBrains and keep everything locally. So I'll add the link to this app map to my bug report. Notice that I don't need to know much at all about Rails or how the solution to this problem will be implemented. I'm just recording some relevant aspects of the app, what I was doing and sending them to the developer. So adding an app map is like including a screenshot, but for the back end, I'm intentionally not digging into what's in the app maps because as a bug finder, I don't really need to know. I've learned from developers that this information is helpful to them. Now, I will switch roles and become the developer who's working on this issue. So I'm in VS Code with the app map extension for VS Code, and I've pulled down this app map user page not logged in into my code editor. And I'll be using this app map to implement my solution. Each app map shows a specific end to end code and data flow. In this case, this one URL request. So everything I see and all the relationships are relevant to the bug, and it opens to a dependency map, which is our first code map. So from this app map, as I mentioned, I can see that the URL route is get a user page. And that way I know exactly where the user was when they were using the app, and so creating a test case will be easy. I can also see that the page was not redirected, it was rendered by this 200 status code. Furthermore, I can see that the page was handled by this user's controller. So that is probably where the login check will need to be implemented, and I can open the source code of user's controller easily. If I want to, I can see any function like user's controller show in the trace view. I can see the function call in context of the call tree. I can see also things like SQL. And so this trace view is our second code map. So now that I've seen how the app is behaving now, I need to figure out how I'm going to implement the fix. So here in this application, this repo has an architecture.md document. The purpose of this document is to lay out some high level concepts of the architecture. So here's a section on login and session management. Requires a login user. So requiring a login user is enforced by a before action and it's labeled security.requireLogin. This is a link to an app map that I can open up to get the details about that. I will search for security.requireLogin. And with that, I can jump right to the logged in helper function, which unless the user's logged in, it will store their location, set a flash message, and then redirect to the login URL. That method is as promised in a before action. So now I can go over to my user's controller, look for the before action, and I can see that logged in users applied to a bunch of different methods, but not to show. So I'll add that there. Now I can go back to the user interface, reload this page after the code change, and I'll be redirected to the login screen. So that's a good indication that I'm on the right track. The next thing I need to do is run and update the tests. And since I've changed the behavior of a controller, I can expect there may be a test failure here. I'm running the test using this command bundle exact rate app map, which runs just, it's a smart command that runs just the test cases that need to be run in response to the code changes that I've made. And I can see that in fact this test expected a 200 response from an anonymous user visiting a user page, and that's no longer the behavior. So I'll change that to a redirect. And I'll also add another test here where I'll log in as the user first and then I should see the 200 status and the appropriate data. So I can come back down here to my break app map command and rerun the tests again. This time everything should pass. When I update the app maps, a swagger description of the web services is automatically updated. So up here in my diff view, I see the change to the test. I see the change to the controller. But I also see this open API underscore stable, which is a swagger file. And if you're not familiar with it, swagger is another type of code map, the third one in this example. It's a concise but complete description of web services and it makes it obvious what's changed in the web services. So I'll commit this file. And when the reviewer comes, they'll see the new 302 status code added to the user page. So swagger diff gives the reviewer a ton of information about what the new code does. And because the swagger is generated, not written, it always represents the real behavior of the app because it's recorded from code, from code runtime and execution. So with all this context, the swagger diff, the visual diff, the app maps, the reviewer will have a lot of information about the code change and it will be easy for them to review the change, hit the approve button and merge this code. So that's a quick tour of using code maps to accelerate code understanding and improve communication. If you want to try this yourself, you'll install app map for VS code or JetBrains. You'll install and configure the app map client agent for Ruby Python or Java. Follow a quick start guide to create app maps and then commit and push your config changes so that everyone on your team can make app maps for the repo. If you want more information, check out these links and all the client code for app map including language agents and code editor extensions is all open source MIT license. Thanks for watching the talk and I'm looking forward to your comments and questions.


It's DDK and I'm back today with another app. I'm back today with another app, baby. In today's video, we are going to be doing an app called Metro V. I have had some orders on here before, but I've never done it. And guess what? With this app, you can make up to $1,200 a week.  Now, in this video, we are going to be doing a laundry pickup. We're picking up four orders, delivering alls, and they're returning the old orders back to the laundry man. We're about to get to this money. No cap. Let's go. And just like that, we are here at the laundry man, baby. I don't know where to go. What to do? Hello. How are you guys doing? I have an order to pick up a laundry gopher order. I want you. I haven't seen you before. This is my first time, so I don't know what I'm doing. All right. So if I mess up, don't. No, I like it. Okay. This is William Jibs. That's the first order. Okay. This whole thing is the first order. Yeah. Okay. Body has finished. There's two, the gray one and the red one. So the gray one and the red one is the second order. This is the second order. Okay. It's going to be three bucks. This one and this one and this one. Okay. One, two, three. I'll pick two. Yes. If you can match that, it's the blue one. Okay. So first order, one, two, three, second order and third order. Yeah. Kelly, Kelly, is this original? Okay. This too. Yeah. And that's it. Okay. As you guys can see, y'all see what's going on, baby. We got everything locked in. We about to go ahead and get in. Our business partner had to help me look this. Join in here, baby. Because she said that they might have this much or more stuff at this stop, baby. So we got everything in there, baby. We got these. So that's number one right here. This is number two, these three bags right here. This one is number three and these two is number four. It's time for us to school. Let's go. And we are here to drop off stop number one.  So I'm going to put all the stuff right here, the clean stuff, and then it's a room right here where I got to pick up all the dirty stuff and take it back. You know what I'm talking about? We had to find this stuff in the alley. And it said, go to the back though. So let's go to the back, though.  They got a decent amount of stuff. I think they're maybe like a hotel or something. I don't know what it is. They got a lot of stuff. So I have to take two pictures. First picture I had to take is of this stuff that I dropped off. And then I also had to take a picture of the stuff that I picked up as well. So I'm going to hit it with the photo. You already know, smack! We got that already opened this door. So now we got to fill this joint up. Now we got to step back here with the photo. You already know those, smack! Just like that. We gone. Let's go. And we are here at stop number two. As you guys can see, I got the cart, baby. I got the cart, baby. I'm putting these joints in here. That's the reason why I didn't fill this up back up with the bags. Because I want to be able to use the cart again. So we can go ahead and get these dividends. And we don't know how many bags we have to bring back, baby. So close this joint. I also had to open this lock box and get this key out so I can open the gym door so we can score. So we got to go to the gym. So this possibly might have a lot of towels and stuff in here. See, there's a lock box right there. That's it. Lock box right there. Got that. Got these keys in my pocket. Hopefully it's doing it open. So I ain't got no... There we go. Dang, that ain't work. That ain't work. I don't know which ones I used and which ones I didn't use. But there we go. I'm getting the game, coach. Now it does have some instructions on here on what I need to do. It said the dirty towels are going to be by the reception or they're going to be... Let me read this joint.  I'll come in here and get right. Box is located on the restroom. Dirty towels will be by reception or at back room. Last but not least, bag four. Let's dump that in there. Let me get here with the photo two times. And there we go. Slide. Y'all some light. Hit it with the photo. Y'all notice. Then we're going to hit this with the photo right here. That won't be filled up. Now we have to lock this joint up. Make sure to join locked. I don't know which key it is. Why didn't you put 13 keys on here if only one worked? That joint's locked. Put this joint back in the lock box. Here. Close that. And we gone. Let's go. We are here, baby. Drop off this order to get an order. We're downtown Chicago. I heard you're trying to get it in and we need to give it in. I gotta go up. I don't know. I gotta take to the apartment. Thank you. I don't even know where I'm supposed to go. Hello. How you doing? I have a drop off. A laundry drop off for 11.21. I'm not sure if I'm supposed to go up or... Yeah, you take another raise right there. Okay. All right. Thank you. 21. We're here. How you guys doing? I have a drop off. Do I have to pick up anything or... Okay. So just leave it where here or take a picture real quick. Thank you very much. You have a good one. All right.  And look, we weren't supposed to be here to get into 11.30. It's now 10.30. We was going to have to wait an hour and 10 minutes. But guess what? We text them when they open the door so we can go. That's what I'm talking about, baby. So we can be done. Yeah. And get on the run and get these funds. Step back into the photo. Yarnados. Got that. And we are gone. I got some hidden photo with this too. And with the photos, let's go. That we are back at the laundromat, baby. You know what I'm talking about? I'm glad we have this wagon. Green wagon. We have this wagon. So we can make it nice and easy. I don't know if I got to put all this stuff there, but we're going to find out, baby. And with the photo of Yarnados. Got the picture. And we are good to go. Let's go. The route is not bad. I think the payout should be better. Because you have to use a cargo van in order to do the route. There's no way to do it in a mini van because it's so much stuff. Bringing the stuff there shouldn't be a problem. Because I probably took maybe 11 or 12 bags altogether. But when you have to bring everything back, you're probably going to bring back 20 or 25 bags. So if I were to drove an SUV, I wouldn't be able to complete the order. So other than that, everything else was pretty straightforward. If the payout was higher, I would do it again. And just like that, it is the end of the video. I hope you guys enjoyed the content. Let's talk about it, baby. Let's talk about it. You guys heard what we just talked about on the phone. Actually, I like that Metro B called me after I did that order and asked me, did I like doing it? What do I think about it? So that's a good thing they are doing. Now, my whole thing is, I do think that Metro B is a great app to add to the repertoire, baby.  Now, I do believe that they should pay a little bit more. I think that that order should have been worth about a hot on a low end, like a low $85 or something. Oh, I did it for the $85. I did it for the $69. So it wasn't bad at all. Everything was very straightforward. They tell you exactly what to do. You just got to read the direction. They'll tell you exactly where to go, what to do. Some of them, they did have codes. I had to type in G14 classified codes. I also had a lock box order. So I did get to store it for the lock box. But all in all, I definitely, definitely recommend that you guys go ahead and sign up for Metro B. And if you want a video on how to sign up for Metro B, come up below and let me know so we can go out there and go. Just so you guys know, another thing, they do have a lot of different other orders you can do. So they have the laundry mat orders. They have something called healthy organic kids. So I guess you can maybe drop it off to schools or something. They also have a food delivery drop-off. They have a lot of different stuff, baby. So make sure you sign up.  I'm glad you guys are with me. I hope you guys enjoyed this video. Again, if you're not subscribed, go and subscribe and give me a thumbs up. And do not skip those ads. Since you're staying in this video, I'm going to tell you right now. Yeah, you thought I wasn't going to tell you. How much did we make on that order? We made $69 on that order and we drove 16 miles. I'm glad you stuck around to stay down. If you're in the conversation right now, ask them.  I'm going to tell you it's in the video. Put me on a big screen like video. I hope you guys enjoyed the video. I'll see you guys on the next one. We're going, we're going before you already know the DDK and I'm on my way.


Good afternoon everyone, I am Bhavin and I work with in ProCloud Technologies. My work basically includes Kubernetes, containers and in this talk we will be discussing about what is tracing and how you can implement that in a function as a service platform. So let us see. So when we say we have been seeing this trend of using microservices, so when we say function as a service or serverless, those are nothing but way to implement microservices. Those are basically one more abstraction you get which makes your life easier. So when we say microservices, we basically treat our service as a product. So we divide our one application as multiple services and each team works on their own service and they keep the compatibility and all things. So this makes it easier to manage. Also when you do this exercise or you divide your application, there are some things which get complicated but those work the efforts. So a typical small application might look something like this. So at some scale you will, you want to have some way to trace things, want to find out what is going on inside your application. So let us see what is the monitoring thing and what is the black box monitoring, what we have been seeing so far. So what we do is we just keep checking if the service is running and we just keep checking that and we find that service is not working. It's giving 404 or 503 some error codes, we basically page people or send out notifications. But when it comes to microservices, does that are microservices up for 100 percent time? So when we say we have microservices, we have multiple replicas of our own application. So let's say I have one image service and it has 100 replicas. So in that case, you might have containers to run those 100 replicas. At any point of time, you might have some containers which are still getting up, which are still going to be in ready state. Some of them will be in upstate, some of them will have some issues but still your service will be running, but that basically means the microservices are never 100 percent up in terms of the number of users that you have. So nines don't matter if users aren't happy. So if you are doing black box monitoring on this setup now and you might see like you have 99.9 percent uptime for your all the services, but still there might be cases that your monitoring setup is saying services up, but your users are facing some issues. How you will be able to get into this? So there is this term called observability, which basically means you get the whole view of your system. So at any point of time, I want to go to my system and say what is the situation right now? What is the things users are facing right now? What is the latency at some place? How an application is performing? And what can be the trend after some time? You want this to be a system where you go and check, not the system will come and give you alerts about your system is down. So basically it is not about just disaster stuff, you can, you basically use observability as a tool to improve your applications as well. So this is a code from Kelsey Hightower. He says stop reverse engineering applications and start monitoring from inside. So basically you do one operation called instrumentation and you modify your application code such a way that you have insights from your application. We will see more about this later. So right now these are considered as three pillars of observability. One is logging, second is matrix monitoring and third one is tracing. So there are talks, people are discussing about what else we can do as a observability. So let's start with logging. When we have our applications running and each of the replica will be logging stuff like errors it faced, all the events, all the STDP request and anything the application has done, it will be logged. So there is still limitation of this logging. So what happens is, let's say and we know what things to log. So basically the developers and architects will basically decide that which things we are going to log and we will log those. But in most of the cases we have more happy parts than failed ones. So this is the signal to noise ratio which is like very less. So noise is more and signal is less. For us signals is exceptions we got errors we received. Those are which we want to look for. And these are the stuff which serves when you have, we already know in advance what can go wrong. So at some scale logs don't scale that much. So let's say you have 100 replicas today, tomorrow you will have 500 replicas of same application. And considering that signal to noise ratio what will happen is you will start getting a lot of logs. And in typical setups what you have all the logs from your containers are sent to some centralized system like elastic or something. This pipeline will get bottlenecked, the network used for sending this log will increase. So next one is metrics monitoring. So now we have logs, we know what events are happening. Now I want to get the insight of over time what is happening inside my application. So this can be number of HTTP requests served by my application, the CPU usage of my application, memory usage of my application. So how this statistics will help you? This will help you to find the trend when and how the application trend is changing and you can predict the behavior based on this. And the next one is tracing. So what the tracing means? Tracing basically means let's consider this scenario you are trying to book a cab on one application, you search for a drive, search for a location and from that point to the booking the cab itself you want to know what all services were called and how was that path all together. So the request might go through hundreds of microservices, 30 or 100. So you want to know what happened in each service and you want to get a very high level view just by looking at that one particular page. So if you say we will do it based on logs. So that solution won't scale that much. Next thing is that's the only thing you can do one is based on logs and another is instrumentation like we say start monitoring from inside. So this helps you to connect the individual components in your request and you also in one particular trace we call it as a trace one path. You can log small details like few log lines or metrics as well. So why tracing in serverless or functions as a service? So when we say we have serverless or function as a service platform it is more abstracted than what you get with other tools and also the short lived nature of functions. These functions are ephemeral. You will add probably at some time you will have more number of invocations of same function. So it helps you to get inside into this very small ephemeral functions and it will help you to debug things and get inside into your call path or whole path. So let's see introducing this greetings as a service application. We will take this as a demo and we will see how the tracing will help us to go forward. So this is nothing but basically we have two functions. One is greeter function and another is image function. And these both are communicating using Kafka queues. So this message queue is there and user puts their input in one queue. It's get processed by one function. It puts the output in another queue. So basically something like this. So you have input queue. It will go to greeter function. It will process the data and it will put again into next queue and image will pick up. And the output will be taken from the output queue. So you can consider it as a some small part of your whole application and we'll see what are all the components when we are trying to implement all this on a Kubernetes cluster itself. So now we are introducing some new tools here. So one is fission and the next one is our tracing backend which is Yeager. And you can see we have greeter and image function. So when there is one input message in the input queue, the fission will get triggered and it will give that message to your greeter function. It will pass the output to fission again and it will be put to the next queue. The next queue will trigger another function and similarly the output will be put in the output queue. This all happens via fission and invoking the functions will be taken care by fission itself. So in the bottom you can see we have something called tracing events and those are being sent to our tracing backend which is Yeager. So what happens is we have instrumented our application code. Now our application knows what to do when it receives one request. It will create some events, we call them tracing events and those will be sent to Yeager backend. So let us see what fission is and then we will get to Yeager as well. So fission is basically built on top of Kubernetes. It uses custom resource definitions which is feature of Kubernetes and you can, you will have everything on Kubernetes cluster itself. So we, moving forward we will be discussing about the specific tools but the things we will be going to learn can be applied to any serverless plus tracing backend. So we can see Kubernetes native as it is and let us see what are all the components which we will be dealing with today. So first one is fission functions. These are nothing but our function code which can be in any language and it will have one entry point. It can have one function which can be one entry point and basically your code will execute from there. Next one is fission function environment. So when you say you have your code you will need something to run your code into. So these are nothing but container images and these are basically STTP servers. So all the request which comes to your function will be STTP request and the response will be passed to your, passed by your function implementation, the code you write. So when you say you have fission function environment your code will be put inside this environment and it will be STTP server which will serve your request. So the next thing is function triggers. So now we have our environments, our code is inside them, how we are going to run that code, how fission knows when to call that function. So there are this thing called triggers. So right now fission supports four types of triggers. So we will be more focusing on STTP triggers and message queue triggers. So the STTP trigger is simple, you get one endpoint and at some path you call that endpoint and that endpoint will eventually trigger your function. Similarly you will have message queue triggers. So fission will keep on listening to that particular queue and when there is a new message in that queue fission will basically take that message and pass on one STTP request to your function. So it will typically look something like this. So you have one pod which is Kubernetes pod where we have our Python environment and we also have our code which is mounted inside that pod. So we have our code, we have our environment ready whenever there is STTP request that code will be mounted inside that pod and the pod will get that request. So this basically happens for first request and for sequential any request after that will basically serve from that same pod. So it is like something which gets invoked at first time and for some period of time it will be serving your request. So now let's get back to our tracing stuff. Now these are the kind of detectives for us. That is the two Yeager and Zipkin are the tracing backends and in center we have open tracing and open telemetry. These are kind of APIs which have defined standards to communicate in between your instrumented code and the tracing backend. So the question why we need tracing backends? The major role is to collect the all traces we call them spans. So these tracing events are called spans and at some place you want to aggregate them. Why it is needed? In order to get complete path in order to link all the spans you must have something which will do this all stuff right. Also there might be cases where your applications are using different type of ways to send this tracing event. So there must be something which serializes those tracing events, stores them in storage and gives you one interface where you can view them. So how to collect this tracing event? Basically instrumenting your code. So there are client libraries which follow some standard. In our case it is open tracing and those libraries will take care of collecting the events at your application side and sending them to tracing backend. So when you configure them you say where is the tracing backend and how to send that to the event. So let us see how we can implement all this in our application where we have two functions. So one way is to instrument each function code. So you go to each function code import the client libraries and you do this stuff. But there is simple way and straight forward way will be to modify the environment itself. So when we say we have fission environment which is basically an container image and it is a HTTP server we can just basically modify that and any request comes to your function will be recorded as a tracing event. So let us see how typical environment looks and we will be considering the python environment in this case which is Flask which is a web framework to implement HTTP server which has server.py and we have some files. So inside the lib directory you can see we have our tracing code and we have server.py. So let us see one of the component from server.py. So whenever there is a new request to your function that environment will be triggered with this endpoint. So let us say you have greeter function and there is new request for that greeter function. One HTTP request will be done to this endpoint and this will basically import your code and save it in the userfunk variable. So this is basically importing your code for first time. At this place what we are doing we are just wrapping our userfunk which is imported inside initialized tracing function. So this is like kind of wrapping over your function code. So let us dive into initialized tracing itself and we will see what all things we are doing. So in python you have something called decorators which is nothing but a way to wrap your function code inside another code. What we are doing here is basically we are using our function which is funk we just pass our function which is imported from the file. Our function will be saved our function will be called as a part of the wrapper and there response will be returned. So the tracing part will be done before the call and after the call of our user's function. So let us dive into this and let us see what is the first step. So the first step is we create a tracer object. So this tracer object will help us to create the tracing events we call them spans and from there we save this tracer in one variable. And the next step is to start the event. So our tracing event is basically we are calling tracer dot start span. As you can see it is inside a with block and whenever that with block ends that span will be closed. So there are two events the start of your request function call and end of your function call. It will be recorded as one span we will see what the span looks like and once we start the span we start it as we specify one name which is span name we give it one name. In our case it will be just function name can be greeter or image. So let us see how you can visualize this let us run our greetings as a service tool application and we will see how the yogurt can visualize it. So as you can see we are listing the available functions and we have our greeter function here and image function. We are also listing our triggers which are nothing but message queue triggers and we have two of them one triggers our greeter function and another triggers our image function. So let us put something in the input queue which is nothing but messages we are starting one producer in the upper side and we are also starting one consumer which is our output queue. So let us try to generate one let us try to pass on one JSON which has specific format which has name image and it has one greeting as well. So as you can see we are passing on this JSON this will be put inside the input queue and after our message travels hold the system we will get output in the output queue which is as you can see here we got the name we got greeting and we have one image as well. So let us see what that image is how many of you know SKCD. So this is the website where you can where there are real nice comics. So let us see how this execution looks in the tracing backend. So right now we have Yeggers this is Yeggers UI as you can see we selected greeter function and when we do find traces we get one span for our greeter function. So this has some tags like who generated that and what were the IP address and version and all. Let us check the image as image function as well it shows how much time it took and similarly we have so let us get back to what we had. So as we saw we have a greeter function span and we also have image function span. So as you can see there is one problem in this as we say you get whole path but right now what we are getting is we are getting a separate span for one function and we are getting separate span for another function. So let us take a look why is that. So in order to get the spans linked together you need to do something called context propagation. So basically you have to tell from where the previous request is coming from and when the request is going outside you have to make sure that that context is passed as a whole request. So that is how the Yegger backend will take care of linking all the spans together. So in case of our implementation we are passing the context as HTTP headers. So when you are doing first request you will create the span you will have some headers and these headers will be passed along the way. So let us see there is one incoming request to function and it has this header which says trace context and it has some string in it. So what we will do we will call this function called tracer.extract which will basically give us one object called span context and once we have the span context as you can see the request came we created one context out of that HTTP header and we are basically starting a new span now. So while starting a new span we specify that this new span is child of the previous span context we have created from that header and whenever we are passing on the response from our function or we are doing some another request which is going to some another system we basically create new headers and we pass those headers. So this is like passing on all the context along the way. In our case while implementing this we are also saving this in a variable called g. In Flask you have one global variable which is g and you can implement it at any point of as your request and you can utilize the variable inside that. So we will see why we are doing that. So this whole workflow looks like this. You got a HTTP request which has trace context header key and you call it extract on it you get a span context. So you can see span context has something called trace ID and it also has span ID. So span ID is something which was the previous request or previous function call and now you start a span which basically says the parent is the previous span ID the trace ID remains the same and you also span ID of your new span and whenever the your response or another request is going out of your code block you will do the inject and you will create the new header which basically has same trace ID but a new span ID. So there is this standard in this is specified how to specify this all things and each of the client library or each of the back end tool might implement it in a way but still the standards will remain same. So let's see how that translates this whole thing translates to actual code. So as you can see we we create the span context from the HTTP headers we received. Now when starting the span we say it is child of the previous span context. We also create something called generated headers and we save this generated headers as well as the current span which is we have created here and we call our user's function code. So basically we are calling this inject and we are prepared to we have prepared this out of the box. So your user don't have to play with this around so they just have to pass the use of generated headers and pass on those headers as a request or response. So now the issue we had so when you are using the efficient message queue trigger what it basically does it creates one HTTP request when there is a new message inside input queue and it doesn't have support for Kafka record header. Kafka also supports record headers and you can pass on extra headers as part of your Kafka message. So the whole workflow looks something like this. There is efficient message queue trigger which is running it will whenever there is new message in the input queue it will take that it will convert it to a HTTP request your function will process it it will create the HTTP response and this response will be translated again to Kafka format. So while this translation is happening there is loss of our headers so even if our function is generating headers and putting them in the HTTP response the message queue trigger is not passing it along the way. So this was the change I made in the Kafka message queue trigger of fission itself now fission supports that so whenever there is HTTP header as a part of response it will be converted to Kafka record header and similarly if there is Kafka record header as a part of message it will be converted to HTTP header. So let's see how that looks now now we have upgraded our fission installation as you can see we are running the upgrade process here and we will run we will send another message now let's put root confune and see what we get as you can see we got the message here as the output and let's get back to tracing back end which is Yeager in our case and we will see how it shows when we see traces for greeter function now as you can see now this is the change now you can see there is greeter function as well as image function and those are now linked together also it has one graph which shows how those are linked you can see those are linked together now so now there is another issue when we are using child of so we said that the new span is child of the previous span so in this case the tracing back end applies something called clock skew adjustment. So let's see as a diagram when you say you have parent child relationship it is expected that the child should finish before the parent span itself so in this case you can see we have parent span then we have child span A also our parent is calling child span B so these both should finish before the parent span so this is how the Gantt chart is represented but in case of something which we have which is asynchronous thing we have message skew in between so we don't wait for the next function or we don't wait for someone to finish their call and get back to us we just process do our work we fire and forget we put our output in some place and that will be picked by someone else so in that case it will look something like this and the tracing back end thinks that this is because of some network latency or it tries to apply some average and calculations and it basically tries to bring that child span inside the parent span but it basically for us it results in wrong timestamps on the UI. So in order to achieve this there is different reference type which is follows from where we don't say this it is a child of previous one it is just follows from that so in that case clock skew adjustments won't be applied the next issue the Yeager's client python wasn't supporting references altogether so you can just do child of reference and this was the change I did in the Yeager client python itself so now you can pass on multiple references or single references and you can specify follows from as well so with the chance we'll see how our server dot tracing dot pi which is a tracing code instrumented code looks like so we still have the span context we are still finding it from the HTTP headers we have now what we are we are creating a span reference yeah so the span reference is of type follows from we pass the span context to it and while starting a new span we say this references to the span reference so this basically says it is not a child of it is basically a reference with this change you get proper timings and you can see here not sure if this is visible there is another way to represent graph in the Yeager UI where you can see self-time so it will show that greater function is taking less time compared to image function which is darker red color so there is thing called there is call which is tracer.close so when we say our application code is sending the tracing events to tracing backend this thing is happening asynchronously so your application will keep doing its work and in the backend the client libraries will keep on sending the data to tracing backend but the issue is the tracer.close is not fully synchronous what I mean by that so let's say you your application has some spans to be sent in the queue it has buffered them and you call tracer.close it will basically close that object it will delete that and the spans which were in the queue which were not sent to the tracing backend yet will be lost so only work around with this issue is you just create the tracer and you never close it so they that issue is still open if someone is interested they can do it but the thing is what happens is when you start your application it will create the tracer object and even in the our fission functions as soon as the function is receiving requests it won't be deleted so your tracer will be there and it will keep sending on the messages and there is something called there is one timeout if there are no requests to one function for five minutes it will then and then only delete that pod delete that code so in those five minutes we are sure that our tracing events will be sent to the tracing backend so let's quickly see only one small video where we can see how we can debug one one issue in this demo so so we do one update to our tool and which has something broken so as you can see we have we are running the upgrade and we send one message which is root confine audience but we sadly we didn't receive any response so we must debug this so when we go to UI we can basically say that there are some specific standard tags you can specify which we will select one service in our case we will we are selecting greeter and we are saying error equal to true so in that case it will go ahead in the image we don't have in the greeter we don't have anything but in the image we can see it shows that there is one error so as we said we can add some small logs and all where here you can see the error kind is none to access and it says fail to fetch the URL so quickly I will go over this make sure you are using 128 bit trace IDs cause 64 bit trace IDs you might run out of those because there is no guarantee that every time you will get unique trace IDs also make sure if you are dealing with asynchronous applications make sure you are using follows from and if you are using something like serverless or something from AWS where you are not sure about the connectivity between your tracing back end and your functions make sure you use TCP or HTTP to send those tracing events yeah any questions yeah you can reach out to me this is my email hello yeah so actually I was actually a little bit curious about the fact that if I introduce this tracing within my microservices now by I mean as it is expected out of microservices they are supposed to finish within a very short time frame right I was curious of the fact that how much of an overhead will this incur yeah so basically the client libraries are designed in such a way that they will impose very minimalistic overhead which is basically equal to none so those are doing that sending of tracing events as a background activity that won't affect your application at all yeah while we do say that is there a way to measure that word itself I mean will will I be able to see that overhead in Yeager as far as I know nope I need to check these are some references I have linked this the slides in the proposal page itself there are there are two books and documentation yeah do we have any other question so basically you mentioned that these events get queued right so they are asynchronous that's why you are saying that we won't wait and it wouldn't cost much but eventually when the event processing happens a microservices are built based on the CPU cycles they take right so that overhead would still be there right yeah overhead will be there but it won't be that much so that's the whole you can say aim or goal of the client libraries are built in taking that in mind that we want very minimum impact on our application


So, yeah, so we'll now walk down this way. But what's interesting about this hallway as well is there's a lot of memorabilia from President Ford. So I believe that is his speech from the Ford School Dedication, which is really interesting. I forgot, it's a pretty moving speech and there are several aspects of it where he talks about what his time at Michigan and how that led him over to his presidency. And then there's a lot of memorabilia down this hall as well. Definitely, and as Alhann mentioned, and we'll see as we're walking back through this way, we have a lot of photos from the Ford administration of key moments and then also like the groundbreaking ceremony and other things about when Ford came to the Ford School when it was named after him.