What's up everybody jason for jazzy's case breaks calm 2021 panini prism basketball just dropped today This is a three box hobby break pick your teams number two again all-card ship Hottick's product of the year Let's do it guys. So again, we have three stacks here of three boxes one two three Here's a customer name. So if you have a little character sign means you want that a little filler There you go. Good luck everybody So again, I'm a roll of die if I roll a one two two here it'll be for the first one three four middle five six right side And it is a four so one two three four. We'll do the middle For the next pick your team that sold out number three It'll be these three boxes again, and we'll choose which one it'll be for number three after I said, don't even remember we've done a couple of random teams and figure team, but I Know we hit a Zion Mojo autograph. I think I think that was random team out of 25 precious George Hill Jared Culver Kenyon Martin Obi-Pop in Jeff Green in a downtown D little silver. Oh, we hit a D little hollow retro. That's what I remember now in a Think the last random team and we got Tim Duncan at a two ninety nine for the spurs Very nice nice color D little silver Zion retro Nick Richards hyper Wiggins and a jammer ants Flashback New Orleans Noel and we got out of ten gold Patrick Beverly For the Clippers Chris bright Gold the craziest player, but Nine out of ten gold Silver, New Orleans Noel or hyper I should say Josh Jackson ice and Anthony Edwards autograph very nice out of 175 Memphis Grizzlies and Anthony Edwards autograph, but there's like a print line on the back. You guys see that Like a crease line But an autograph though T-Wolves TD Williams with the T-Wolves Obi-Tab and silver and what is this a? Wow, what a break for the Clippers two out of ten down town gold Paul George Clippers with Chris bright. Yeah, it was like that too with the mosaic as well The top and silver is not bad Nick's going to George Yandere Jordan and fireworks Paul George the metal ball base design Wilmson second-year Paul Mills have Jordan Clarkson for the Utah Jazz downtown John Morant silver Has been a green box You know Maladon Doug McDermott silver Davis Bertens Yeah, hi, there you go first box two golds and an Anthony Edwards autograph Trey young Victor Lodipo to 175 John Morant Trey Jones Wow And we got a hyper retro flashback of Jason Tatum 2012-13 Prism Celtics going to Franklin. That is awesome. Oh LeBron It also has like a little line on top of it little crease line or something But these actually are selling for a couple hundred bucks Joseph Matthews Pritchard Tomas Santoranski Alfred Payton Westbrook Savon Lee D Wade and Devonte Graham Charlotte Hornets to 99 Malachi Drollin bead and Payton Pritchard for the Celtics Rookie signatures Franklin there you go man Pro duck right there man Drollin bead red Son's gonna Josh Bruce Bruglopas yana time to the combo for the Milwaukee Bucks Bama de bio and Santoranski to 175 for the Bulls Rui Donovan Mitchell Silver Patrick Beverly and fireworks Jimmy Butler Maxie Call Anthony for the magic hyper Jeremy S John Tim Murray Jason Tatum so dig bay Coral Tyrell Terry Red for the Dallas Mavericks and We got a 25 a little mojo Duran Williams Utah Jazz when a David Chan Nyeka KBJ and a pain Pritchard what a break for the Celtics Ruby wave sort of been a great person a great Pikachu for me if I would have bought the Celtics All right guys one more box Something that happens Joshua. It just finally affected you, but No need to worry man. Your boxes will eventually get there Back when this pandemic first started Joshua We had a customer They hit a the NTRPA of Kyler Murray back last year April April May I think it was and Some of the facility fulfillment centers got shut down and he waited three and a half months For his Kyler Kyler Murray RPA And he was so frustrated, but we told him there's nothing really we can do it's just it just got stuck in transit because of COVID and Finally showed up some it will be delays When it says like two-day delivery three-day delivery priority, it's most likely gonna be a week It's gotta be a little patient, but it'll definitely get to you at some point. All right next box guys. Good luck Anthony Edwards Tyler Bay and Tristan Thompson Zach Levine Fred van Vleet Tyrese Halliburton Carlos during Jackson jr. Luca Donchage downtown Kauai Leonard Hyfer and a Derek Jones jr. To 299 for the heat Nice man. That's awesome pretty rare hit a killing haze what a beautiful color match To try Pistons, but a Martin 189 out of 199 Let's take a picture this really quick for a buddy man and Desmond Bain rookie Memphis Grizzlies silver Malik Monk Dwayne Bacon Willie O'Ree. Yes, man. He's a pretty popular player. He is a Kind of in a way the Like Jackie Robinson Ohaki, he broke the barrier and he just got inducted to the Hall of Fame. I think this past season John T Murray and Josh Richardson to 49 Oh, Gianna Novi and fireworks Anthony Davis Hyper Yeah, if he's on a ceremonial puff drop, he's probably a pretty big player I don't think there'll really be too many nobodies, but nice man Kira Lewis jr. Damian Lillard Patrick Williams our last little stacker in here Josh Hart TJ Warren Kira Lewis and Robert Ori for the Lakers Signatures Joseph Matthews Clutch mr.  There's the three boxes Quick little recap for you guys Well, it's called top-loader cards that top-loader Yeah, I know I really must hate him actually just showed his highlight right now against the Kings Lamello Rob The little flashback Desmond Bain auto killing Hayes blue Anthony Edwards base Halliburton base downtown silver Emoja to 25 of Darron willing to the Utah Jazz Red Wave Prichard Jason Tatum retro Call Anthony Hyper James Weissman base retro Flashback Westbrook pain Prichard LeBron James Hyper Tatum John Moran's that Williamson Lamello ball downtown top in silver and two golds Patrick Beverly in downtown Paul George including an Anthony Edwards autograph. I appreciate you guys number three is coming up next


So again, this is how to tell your digital story, and powering others to constructively share their voices on the global stage. Before we get started, I want to say a little bit about TechSoup for those of you who are new to our organization. We are working towards a time when every nonprofit and social benefit organization on the planet has the technology resources and knowledge they need to operate at their full potential. Here's a screen grab of our home page, and there's a few things I wanted to point out. We've got a learning center where you can see articles about plenty of different technology related topics. We have our online seminars, recorded seminars that you can find in that section as well. We have our blog, and we have our community forum. There's a couple of newsletters that you can subscribe to. So please take a time, take a few minutes to check out our website, TechSoup.org. And one last thing before I announce the speakers and introduce them, this is the kickoff for our digital storytelling event. We are collecting stories that will be part of a challenge. There's prizes involved, and there will be winners chosen. So for more information go to this URL, which of course I will send to you in our post-event message. For more information on how you can submit your story, we'll be doing another webinar next Thursday to go over the tools for digital storytelling. Without further ado, I'd like to introduce Michael Margolis and Rob Krusha. So if that was Michael, tell us a little bit about yourself. Hey everybody. I'm really thrilled to be a part of the Digital Storytelling Challenge and the great work that the folks at TechSoup are doing. I am a teacher and storyteller and media entrepreneur. It gets storied, it does lots of different things. We have a Story University online in a range of different courses, specifically helping change makers and innovators around getting others to believe in their story. And encourage everybody to check out a whole bunch of wealth of resources of things that we're doing there. And I think we have a slide that's coming up a little bit later. We do have a storytelling manifesto for change makers that's available for anybody to download for free on the Internet. If you go to GetStoried.com, you'll see a link for it there, or if you go to BelieveMeTheBook.com. And the only other thing I'll quickly just say is I started my career as a social entrepreneur and helped launch two nonprofits before the age of 23 and have just seen a lot of both the exciting potential of innovation and technology for telling one story. And I've also been – I've struggled and really been frustrated with so many different times and situations in my own life and work and others where really great ideas and important work gets lost in translation. And that in many ways is what brought me to this work around storytelling and helping others in that process. So thanks for having me be a part of this. My pleasure. So happy to have you here. And I'll grab from the Center for Digital Storytelling. Can you tell us a little bit about yourself? Likewise, as Michael said, I'm really happy to be virtually here. I work for the Center for Digital Storytelling. I'm the Canadian Projects Director, mostly because I was born in Canada and my heart's still somewhat lies there. But this is kind of a departure for me, although I was involved in the TechSoup webinar last year. We do most of our workshop in person. In fact, there's 10 people in another room in our space that I'm co-facilitating a workshop right now on digital storytelling. So they've come in person to learn the way we talk about and produce digital stories. So bear with me as this somewhat technophobe in this kind of world steps forward through it. And I just would say if you want to know more about the Center, just go to www.storycenter.org. And there's a whole array of what we do, why we do, what we do, and the people we work with and the people who do the work. And I look forward to answering questions as they flow through and working with Michael has been a pleasure. And look forward to the next one hour with all of you. Great. Thank you so much. Now a quick poll just to see where people are at in this audience. We've got around 655 of you out there. So please click on which one of these best describes you. What motivates you to take on the Digital Storytelling Challenge? So please select any one of those. I'll give you a couple of seconds to complete that. It's kind of interesting for us to know where folks are coming from. And by the way, we've got someone, or at least one person from Nigeria on the call. And I know that there was someone from Australia who at 9 p.m. tonight, they're listening in. And yes, there's only one selection. Sorry about that, Phyllis. Okay, so we're going to skip to results. You can see where people are at. Lots of folks wanting to engage their supporters and shift public perception. So I'm going to close the poll so we can move on. So thank you all so much for submitting that. It's interesting to see where people are coming from. So what I'd like to do is oops, I did that one already. And here's a little image of the storytelling manifesto that Michael mentioned. I'm just going to jump right into our interview here. Can you define what we mean by story and explain how digital storytelling is different than regular storytelling? Michael? Well Rob, we've got a slide here about, I think you were going to talk about this first slide, the universe is made up of stories. Right. I mean, I think what I love about that quote that was me that decided to use that is this idea that the universe is made up. And in a way, stories are made up. And so there's a construction, there's a production, there's a process to stories. And I'm thinking of universe in the humanity sense, the human sense. And if you think about it, each one of us can reflect on our own personal universe and how that's constructed. And I guarantee not many of us go into the micro-organistic kind of world. We actually talk about our experiences. We think about people, our favorite teachers, our experiences, books we've read. Those are all to me somewhat centered in the idea of story that what I would consider a foundation of our whole human communication is through story and how we share ideas, experiences, and explain why we do something and why we don't. And when you think about that universality of all of that learning and stories being at the heart of it, I think it's an appropriate quote. For me, digital storytelling is taking that energy. It's a particular medium of putting words along with audio and visuals and a kind of layering of all these different mediums together and putting in a format that's digital. And with digital, it has many ways to be shared. And I'll leave it at that, Michael. So when we talk about what is a story, it's something we all get a little tongue-tied about. And especially the work that both Rob does and I do, we're pushing the boundaries of expanding the way that people think about the role and relevance of storytelling. So this here is a definition from a colleague of mine, Robert Dickman, that to me is one of the more evocative definitions of what is a story. And he describes it as a fact that's wrapped in an emotion that compels us to take an action that transforms our world. Now, and you can certainly, there's a great little point here in this definition. Stories don't always have necessarily a fact. Sometimes it's an experience. Sometimes it's a perception. There's a range of things there, but the point of it is that a story has a truth. It has a message. It has a meaning. It has a perspective. And you're wrapping that into an emotional experience for people. And there's something that happens in the story that changes. There's something in the story that shifts. And ultimately, that transforms people's world. Here's a way to put it in very brass-tax terms in today's marketing environment. People want to know, are you just trying to sell me something? Or do you actually believe in something? And you want to change the world, ideally my world for the better. That's what you're trying to communicate in your story. And getting into sort of more the general, slides aren't advancing right here. Here we go. Getting more into the general structure of a story, all stories have a beginning, middle, and an end. We think of this classic three-act structure. And the beginning is the setup. There's an inciting event, something that builds things up. You've got to have a character, something that's happening that people can get invested into, and a sense of resolution. And we're going to be exploring this in far more detail, but just to kind of paint a picture in your mind, if you're starting at brass-tax square one, think about beginning, middle, and end. And you need to have a sense of a progression of going from somewhere or rather you're coming from someplace and you're going somewhere in the story. And how that translates in the digital environment, well digital storytelling just basically allows you to tell package and share your story so it can travel while you sleep. That's the power of digital storytelling. And now of course there are all of these incredible tools for telling one story. YouTube, everybody's got a blog, a video camera. That's part of the power of this whole storytelling challenge, that you can grab a camera, create a 60-second video that will start to tell your story and share that with the world while you sleep. You don't need to be in the room.  So there's some great, by the way, chatter in Twitter. And I just want to mention any of the things that you're hearing. If you want to reference Rob, you can reference him at AtStoryCenter. And you can also reference me at GetStoried. So feel free to reference those as we're going along with some of these other great references. Oh great. So here are the references and then of course TechSoup and the hashtag TSDigs. Great. So what are some of the bad habits that get in the way of nonprofits really telling their story? Yes, so there's so much that's there, Kami, around this topic. And one could literally spend the entire webinar focusing on this. And a big part of the challenge is that people have stopped believing and identifying and buying into the old stories. So there's a lot of struggles to this because the old story of philanthropy, the old story of we're down and out, we're doing God's work, we're doing the best that we can, please help us. That's a story that falls on deaf ears. And along those lines, the other big challenge is most of the time we're used to nonprofits communicating to us, basically asking for money. We're constantly out there saying give us money, and not only give us money, but it's usually a crisis. It's usually the house is on fire, something terrible is happening. And the challenge with that is we're all being bombarded by so many of these pitches and appeals. We just drown it out. We can't pay attention to it anymore. And that's part of the challenge that we face right now, right? And so many incredible worthy causes out there. And so this is the slide actually, our slides are jumping back and forth a little bit here. This is from Andy Goodman who talks about we have a huge reliance on statistics. And this is one of the challenges. So many nonprofits today were playing this game of outcomes measurement. We have to prove and legitimize the value and what's the importance of our work and what's the case for change. And we end up drowning in numbers and jargon that completely disconnects people from the story. We over-rationalize the story to death. And here's a great quote from Andy Goodman which is numbers numb, jargon jars, and nobody ever watched onto Washington because of a pie chart. Instead what people are looking for is they want to be part of something. They want a bigger story to buy into. I see here in the text funders want numbers. But here's what you have to keep in mind, at the end of the day, right? It's just like in regular marketing and sales. People buy on emotion and then they rationalize through logic. So even your funders, you need to be able to paint a picture in their mind, something that is evocative of why your work matters. And a number doesn't matter. It's the story that's behind the number. And there's all sorts of research that supports this. And there was a great study that was done in the last few years that actually looked at fundraising techniques. And there actually is a psychological sort of process where the moment you start to talk in big numbers, the human mind goes into abstraction. We disconnect. And they've done studies at a fundraising level. We donate when we have the picture of a single human being in front of us. And we're told the story of that single human being. The moment it turns into 10, 100, a million, it moves into abstraction. And we actually care less. It's how the human brain is wired. And there's some great research on this that in a second Rob is going to be sharing some slides. And I'll go ahead and post a link to some of that research. I just want to add, I don't know what time left on the question. I mean I do think that there's a challenge of history. And I think it's also a kind of, part of it is on almost a human scale of the idea of finding our voice and being creative. We just don't give ourselves that opportunity. We don't think about that as a valuable resource, what we've experienced within an organization or what the organization has experienced and the particular awareness and insight that has come from that experience. I mean the world of not-for-profit, the world of kind of organizations is vast. And everybody seems to be kind of like chirping at the same song. And I think part of that has been how the media has been centralized. There's been the centralized sense of what media is, what media should look like, what digital media should look like. And what's happened is I think people have kind of been lemmings down that road and kind of like, well, this is what mainstream has been doing. We have to kind of like be the same. It's like just following that lead as opposed to like saying, what is our organization? What's unique about it? And then once people think in those terms of uniqueness and what kind of knowledge that uniqueness springs, then it's like, well, how do I want to share that knowledge?  It kind of puts the kind of ownership of the knowledge back in the organization. And I think that's an important place to start.  But if people, organizations first do kind of a self-reflection about what do they do and why they're different than maybe an organization that's down the hall or what they do in concert with that organization down the hall, and I think that starts to develop a kind of a story foundation to story and not just go chasing the dominant paradigm. And I think digital storytelling has actually started to make that shift, whether it's the way we do it or the way just social media is starting to operate. It's shifting the paradigm from the sort of rarefied, kind of centralized world into a kind of more dynamic world to create some confusion about what the process is about. But I think what will come out on the other end is like Michael was saying, is a kind of reshift in how story is used, how story is viewed, and considered whether it's a funder or it's someone, a politician at the policy level. So Rob, let's go over your seven steps so that we can understand what makes for a compelling story. Well first of all, I just want to put just some general terms out there. For me, again, we work in first person. This is an important part of our work is people exploring story first and foremost from their perspective, what experiences they have, and how does that translate into a story. And if so, how does that translate into a story that is about the organization or the purposing of an organization? I just want to, they're not on the slide, but the things that I think to be aware of for compelling story means it has to be listenable, someone has to watch, someone has to get it, want to stay with it. Honesty, creativity, thoughtfulness, and insight. So it's like what does your story have differently than the person or the organization next to you? And just sit with those. In our role we have seven steps. Hold on my computer to just — Sorry, that was me. I changed you to co-presenter. I should have warned you. I can move your slide for you. All right, so people do need to see a kind of a process. In our workshops we've come to this thing called the seven steps. These are not prescriptive. They're not even linear steps. These are points of consideration as you're starting to assemble. Think about your story. And there's what we consider seven critical areas that digital storytelling producers, makers, creators need to kind of sit with as they start to write their script. Think about images, start to put the pieces together. And then just go to that slide that has the quote. And so this idea that stories is multifaceted, it's complex, depending on context and culture, people are calling stories many different things. We have what we call seven steps right here. It's this sort of set of circles in kind of unison, in kind of connection. Owning your insight and the yore can be the collective yore, but in this case it's the individual yore. That's kind of a core. Once you understand I think, what it is, let me just go forward. So this idea of owning your site is a kind of foundation, a kind of core part. So really it's just an exploration. Before you kind of get pulled down the road because of funders, because of all these expectations out there, put the brakes on and just sit with the idea of awareness, perception, points of view, what is meaningful to you within your organization or you individually before you start. Put the ownership of the purposing in your hands, not in the external environmental world, the external environment. Since these are all available, I won't go into all the details of them.  Once you have insight, there's many ways you can convey that emotionally, depending on the context, depending on what it is that you're trying to convey, the knowledge, the wisdom, the experience that you're trying to convey. We'll have a series of emotions. So stories can be, in our world, we try and get the storyteller to think about what best suits the purposing of a story and what emotion. So this idea that it can be something, if it's a kind of a human rights issue, it can be very, very, you can come from a place of deep anger or you can come from a place of reflection or you can come from a place of kind of invitation. So finding the emotion is a critical part of that. And in that, there may be the moment of an experience. And again, our world is an array of moments, an array of experiences, but there may be one key moment where it all sort of gels with this, why we do what we do is very, very apparent. It's apparent to you, and it's easily conveyed apparent to the audience member. So they go, oh, I never thought of your organization that way. That's new information. So there's a moment that was an aha for you within the organization which will convey an aha awareness learning to the audience. So it's this idea that your learning can be transferred into another person's learning. And again, sitting with some of these points of change thinking in the context of what will happen before, what happened at that point of change, and what's happened since are important to show there hasn't been a transformation. This idea that stories, I mean, there's two ways of looking at it. Universally, stories are about change. And you can think about it, someone went on vacation or a visitor came to town.  Where those things happened are important things to talk about. Those are unique to that organization and people need to be aware of those. Or something happened, the bump in the road, and it was the learning out of that that is equally as important for an audience member to kind of learn that. Then of course, once you sort of have this idea, I have a moment, I have a series of moments, I have a kind of continuum of events or experiences that I want to convey. I kind of know what I learned out of those, or the organization has learned how we shifted through that learning. And the idea of, you know, we have an emotional corduance, a kind of coming from some soulful place as an organization, a kind of place of honesty. Then it's kind of like, well, what's the way that we can see that story? What are the images that would maybe come to the fore? And again, there's all sorts of kind of visual aids to this in a way of thinking visually. And I won't go into the details, but just know that there's a way of seeing your story as a way of telling it through words. Equally, how you hear your story is important. And primarily what we consider the voice of the storyteller is critical so not having someone coming out that's not associated with the association or the organization telling the story. The voice of the organization is crystal clear. And when that happens, audiences understand the connection. They say, this person is speaking from a core part, whether you want to call it the heart or the soul, right? That's an important part. Any other layering of sounds that can kind of add information, you know, if you're trying to get people to think emotionally where you're coming from, find the sounds, whether it's music that actually allows the audience to kind of enter into that emotional space. Of course, what we have now is all these pieces of writing. We have ideas. We have images. We have sound. And then there's kind of an assembly to that. And the idea in digital media, one of the things that we didn't talk about, we talked about the purposing of that and kind of the packaging of that is with digital media, you layer. You have layers of information. And the written word, you know, and of course, everyone's aware of the kind of funding RFPs and how everything is in kind of written format. There's only so much dimensionality to that. And in the digital media world, you can add dimensions. So with words, you can have associated images and associated sounds. And that expands the communicative power of that word just through the layering of other elements that the digital media world allows you to do. And finally, this idea of sharing your story. And in our world, we don't necessarily right away want people to sort of go into that world because that shifts the expectation from the internal reason, purposing to an external world that you're being pulled into a direction. And typically, as I mentioned earlier, in the mainstream world, the media that has shipped, you know, there's been a kind of predominant voice in all of this. And Michael spoke well about that. We call it the old stories. They're the old way of telling stories about organizations, the kind of public relations, right? And you can, you're still here today. And again, the undercurrent in the social media is kind of like rattling that, okay? And I think part of the reason why social media is so successful is people are saying, I've had enough of following that horse. I need to speak out for myself. And I think following that path is critical. So the idea of sharing your story at some point, yes, it has to kind of, because of course if the rubber doesn't hit the road, you're not going to get that connection. But again, if you come from an honest place of where your storytelling is coming from, an audience, we crave honesty. We create truth in this world. And once we connect into that, the idea of a kind of a story that's centered in your own personal experience is critical. It's the missing link in so far, in my opinion, in this world of kind of organizational media. It's that kind of bringing it down to a kind of human level where we all can understand that, cross-culturally, we can understand that language. Great. Thank you so much, Rob. So let's talk about what are the elements that will help bring a story to life? How do you get your audience to see themselves in the story? I think Rob, you've got one more slide here. Oh, okay. I think it just reiterates this idea that starting from a place of self-awareness or exploration of self-awareness, and that Michael's quote about nobody merged on Washington with a pie chart, and how soulless the pie chart is, even though how that data was come by was through probably some really interesting questions and responses, especially in the world of social justice and environmental justice and those areas that are critical right now on the world stage, and that when the story comes from someplace deep within, it's like it cannot be denied. If it's denied, it's because it's now on the shoulders of that person that has turned their back on the story. But what we're striving for is people to stay with that story, to be connected to that story, and if they feel it's just another talking head speaking in some kind of rarefied conceptual world, that's the kind of disengagement that Michael's talking about. But when there's something that comes down, and sometimes it's just the smallest of things, I can give you an example. I think this is important to give an example. I remember doing a workshop with foster youth, four foster youth organizations. When that person told me about what it was when they got pulled from their house as a three or four-year-old, they remember the trip to McDonald's. And all my work with foster youth, I asked that, they said, yes, there is this place where they we go. That little bit of information tells me a whole bunch about family services and social services. The idea that there's this kind of, it's not just this, well, this person will take them there. There's a systematic kind of approach to removing children from homes. It's a very specific case, but you can start to translate that into the universality of power and lack of power in a way of kind of mitigating that power dynamic, right? And so the little things that I think we lose focus on that are actually critical to our understanding about big issues. And the little things are coming from deep within. They're not about the big outside world conceptual stuff. So there's a great book for any of you who are interested in storytelling in the context of presentations and giving a really good speech. And actually, let's stay back here on slide 36. And it's a book by Nancy Duarte called Resonate. And one of the things she talks about in that book, and we don't have a slide for it, but in that book she talks a very simple concept which is when she broke down many of the world's most famous speeches, and she pays a lot of attention to Martin Luther King's speech, or Steve Jobs unveiling the iPhone, and looks at others. There's a core basic pattern. The author is Nancy Duarte. Her book Resonate is a true masterpiece around the role of storytelling in presentations. And here's the basic concept. You talk about what is, and then you talk about what could be. You talk about what is, and you talk about what could be. And it swings back and forth, back and forth. The book is called Resonate by Nancy Duarte. It just recently came out in the last couple months, a phenomenal, phenomenal book. And think about that in the context of Martin Luther King's great famous speech. He didn't just talk about having a dream. That was the part of what could be. He also, first in that speech, he talked about what was going on in America at that time, and how shocked he was. He really talked about an experience of alienation, of America's core promise. And yet, here were the experiences that young blacks were having down in the South. And he described those experiences, and then he talked about what could be. And he pointed out, look, here's the contradiction. Here's the challenge. And that's what really touched people at such a profound, deep level in the way that Rob speaks about here of a story that comes from the soul that cannot be denied. And I think the link just got shared there by the chairperson. So the link is there in Amazon for Nancy Duarte's book, Resonate. So here's another way to think about this. And what Rob just shared is really powerful. And I'm glad everybody is going to get these slides because the folks at the Center for Digital Storytelling are doing is phenomenal. And I encourage every single one of you, if you're really interested in getting into the nuts and bolts of working with a story and producing it, they have an extensive curriculum that they have developed and have been teaching for many, many years and working with many grassroots organizations and really getting to the heart of those stories. So there's a lot of signposts here for doing the competition and answering the challenge. I want to offer a couple additional things for you that like, how do you get to this piece of the soul, right? It's like, okay, so get to the story of the soul. I mean, how do I write my hands around that? That's like the invisible stuff. That's really deep stuff. So here's what I want to share with you. So here's the scene from Avatar. And this to me was the redeeming moment in Avatar. If any of you guys saw that great movie, it's that scene where you have two love-struck characters who are looking into each other's eyes and they say, I see you. I see you. Like, that is the heart of storytelling. That's what you're doing. And the way that I describe that myself is tell a story that people can identify with as their own. If people can see themselves in the story, then the need to persuade, convince, or sell them on anything disappears. Like that right there is the big magic secret to storytelling. This is not about coercing people, convincing people, persuading them. It's really thinking about your audience, thinking about who you want to be in relationship with, thinking about your own passion, your own natural authority, what you most care about, and how do you tell a story that bridges those worlds in a way that they can identify? And if they see themselves in that story, then it becomes their story, right? And then there's nothing you need to convince or sell them on. It just becomes, wow, your story is my story. Let's create something together. That's the art and the secret when you really start to dig deep, as Rob says, of telling the story that comes from the soul. I'll give you an example of this. So a few years ago I worked with the largest women's organization in Hawaii. And they were a 100-year-old organization. They were going through a major business transformation. And what they were struggling with was they had lost relevance in their story. Their old story was the traditional social service agency story. They had a lot of very wealthy donors of the community that gave money to then support women who were the classic women who were less fortunate in dealing with a range of various different challenges in their lives. But what was happening was this organization was frankly bleeding red.  And so part of what we did, we went in and did some narrative-driven focus groups. And here's what we discovered. Number one, Hawaii has the highest rate of working women of any state in the U.S. And as we started to listen to women's stories and we asked them, what's going on in your life? What we found was the biggest challenge that women were facing were balancing work and family demands. Because in Hawaii, ohana, family is king. It comes first. And yet because also the world we live in today, this generation, as well as the economic climate of Hawaii, many Hawaiian women have to work or choose to work. And so there was a new story that emerged for the organization, which was it didn't matter whether you were an executive in the boardroom or you were just working to put food on the table and to take care of your family. But there was a more universal story which is what does it mean to be a working woman living in Hawaii in the 21st century? That became the new universal story and it allowed them actually to reinvent their organization. They completed a multi-million dollar renovation of their downtown facility. They rebranded it into a downtown women's club with a mission. And they've aligned the rest of their programs and operations all around this new concept in bigger story. They've actually shifted from being a traditional philanthropic donor organization to becoming a member-driven organization and one that transcends boundaries. That's the power of this. And this is the YWCA of Oahu, Michael. Thanks for asking the question. So just to give an example of this notion of looking for the bigger story. There's always a bigger story hiding in plain sight. And here's the key. The bigger the story, the more universal and transcendent the story, the more room there is under that tent for people to locate themselves in that story. I'll give you another example, and I don't have a slide for this, but take the issue of homelessness. I'm noticing we've got to manage time here so let's keep moving along. So real quick, what's more important, it's less about how you tell the story. And I saw some questions in here about quality issues. It's not about quality. It's having a story that's worth telling. When you have the story that's worth telling, the story tells itself and travels. So we can maybe go back to that homelessness piece, but I want to keep moving along here. So the point again here is you want to think about how do you get people to locate themselves in your story? That's the setup. How do you get them to really feel and see and be able to relate to what you're talking about? They need to locate themselves in that story. Because at the end of the day, as a storyteller, we're forever at the mercy of our audience. And this is what we're talking about. Rob and I both. You really need to be thinking about your audience. Who are they really? Why would they relate to what you're sharing? What's universal or transcendent about that experience? And what's the gift that you can offer? Causes philanthropic organizations were too used and comfortable to asking for things. We're asking for money instead of giving people a gift. It's hard to build a relationship when you're asking people for money versus when you're giving them a gift. Really think about what's the gift that you have to share? Everybody has a gift to share. So in terms of getting started, one real quick thing to think about is your story needs to set up. So this is a real simple little acronym here, LCD. This is what's going to bring your story to life. If you want to think about location, how do you set up your story? Really think about the environment. How do you describe the setting? Because that setting sets up where the story is going to go. If I tell you it was a dark and stormy night, you know where that story is going, don't you? It's going to be a horror story I'm about to tell you. So think about how do you set the mood?  You also need a character or a hero, and we're going to talk about this some more in Q&A, because I think this is really important, right, is in the Q&A part of this. I mean, sorry, in the hero part of this is you want to think about who's the hero that people are going to identify with the most. Your organization is not the hero. The hero needs to be the beneficiary of your organization, but you need to tell the story of that beneficiary in a way that your donors can also relate and identify with it. And then you want to think about the drama. There needs to be a creative tension to the story. There needs to be something that that character is striving for, is trying to achieve, is trying to reconcile. Otherwise, why am I listening to this story? Who cares? What is interesting about this? And you can go capture the energy. This is the key. Every organization has energy. What motivates your organization to do what it does? And if you want to collect good stories, you need to look for the energy. You need to ask questions that people have energy around, because if people don't have energy around the question, you're not going to get a good story. So here are some of the questions, right? Why are you involved? How do you relate to this cause? What motivates you? How is your life now different? What does it mean to be a part of this? These slides are going to be available for you guys to review these. Rob, I think you've got a couple more suggestions as well on this, right? Sure. Multi-tasking is not my strength, obviously. There's such a stream of chat and questions that I'm trying to respond. So again, this idea that the issue of quality seems to be a domino, and maybe that can be in the Q&A. But starting with a small idea is something that is truly meaningful to you. Again, try and just get a handle on something that is doable. Again, if we're thinking about, well, it's got to be to compete, to get distribution. We're already thinking about an expectation about production quality. Again, I would suggest starting small, a small idea, some small kind of nugget, some diamond in the big rough of the world. And then at that point, that just sort of gels ideas about visuals and sound. And just make notes to the visuals that correspond to that. Even though it's like Michael was saying, it doesn't have to be going into some kind of high production value. But I think being very confident and clear about your purposing, and also about the connection to that small idea to the visuals and audio will make it high quality. People go past the kind of with all the kind of tech bells and whistles when they see a simple story told, well, will Trump a kind of very slick presentation? And just look at the people that turn off to most political speeches, or kind of CEO speak, they get turned off because they have all the right quality issues, but they do not have the connectedness in their actual narrative. And so again, and this also just helps you kind of get a grasp on the kind of scale. It looks simple, and this outcome might seem simple, but it's not necessarily simple to kind of rack your head around this. So start small, start doable. And 250 to 250, 350-word script, we were just talking about this in the workshop. In this format in the digital media world when it's coming from a small idea, a small awareness, a kind of soulful place, we actually don't can't stream a kind of ah-ha moment into a hour-long documentary. Ah-ha moments are these bright lights, and we wanted to just call attention to those illuminating points. That can be done in a very short script, especially when you are layering your images and your sound on top of that that actually allows that small little bit to start to resonate, ripple out into a kind of visually appealing, something that people will gravitate to and pay attention to. And the other thing is a storyboard, however you want to do that. There's all sorts of online ways to kind of storyboard your story, to kind of link images to the connection. And again, the compelling going back to this idea of what makes a compelling story, where there's a connection to what is visually shown to what's being said, whatever the narration is, there's a connection. And it could be an explicit connection, or it could be an implicit. It can be symbolic and kind of poetic, or it can be kind of, you know, you need to see this because if you don't see this, you're not going to actually understand where I'm coming from directly. So that's the idea of explicit imagery. But really start with a small idea. And because all this is in context anyways, you can't solve everything. One story does not solve all the problems. In some cases it just raises the issue that there's a problem. And that's important too. So stories aren't the solution. They're kind of the way to get people dialoguing, communicating between. So again, keep it small. And then on that the last one, I'm going to move this along. I'm sorry to interrupt there unless there's one last thing you want to say, but we have about 7 minutes left and I'd like to answer a few of the questions. The only thing is, and on that smallest, it's just like be gentle on yourself. Don't try and compete to the high quality. Again, going back to the quality issue. Be gentle on yourself as that slide says. And just give yourself some space. Allow somebody in your organization the time to be creative and kind of think about this and just don't do it to follow some kind of norm. Sorry to cut you off there Rob, but there are quite a few questions that have come through the chat. And I wanted to address one that's come up a few times regarding funders and how they are always looking for numbers. So how can we demonstrate to them our impact to digital stories? Like is there a way to somehow appease the funders through our stories? Again, ours are always, most of our work is done in conjunction with funded projects and proposals. So there are agencies out there that are starting to see qualitative and stories don't necessarily bring numbers. I mean it's just too early on. I'm sure there's and how things have shifted. But I just think that the paradigm is shifting and if funders are just worrying about numbers, they maybe aren't the ones that are necessarily going to grasp this away. But I would point to people and again on our website, some of our case studies will direct you to the work we've done in the qualitative kind of assessment world and the qualitative analysis and participatory research and things like that. So again, it's shifting. If I can quickly add to that, because I'm really passionate on this topic and I think this is one of the biggest obstacles and hurdles in the sector right now. When you look at a financial statement, a financial statement has numbers on it. Those numbers are meaningless until you put a story to the numbers. What do these numbers actually mean? Again, all of these things go back to the same point which is you have to get to the core meaning of what is your work about. That's what people care about and the drive train of the social sector is emotional capital. So focus on that. You're going to have numbers. You're going to need numbers. And oftentimes you're funders and if you're getting government funding you've got numbers up the wazoo. But the biggest challenge right now is most of you as organizations are over-rationalizing your story to death. You've got all the logical analysis but what you're missing is telling the bigger abocative story that's not the moralistic story. It's not the guilting and shaming story but it's the story that really excites people to say, I want to be a part of that. I believe in that. That's something that excites me. That's the story you need to figure out that you're sitting on.  You're exciting me. I love the energy. Thank you so much. One great question is if there is more than one moment of change, how do we choose one? Do we choose the one that is most emotionally evocative or is the one that's connected to the issue that is in the public forum? I mean again I think you don't ask that question totally without looking at it. If you look at our Southern Steps everything is in sort of concert. Something that's the most connected to the issue is like what's the emotional connection, what's the emotion within that? And as long as the story that you tell is true to that emotion to that issue, to what it is you're trying to convey, again the honesty, the audience sort of picks up on the emotion of that. It hits them at the same level that it's coming out of you. And I don't think it necessarily you choose one over the other. A lot of it is sort of to do contextualizing it and what's the purpose of it to make the decision. But I wouldn't say one is necessarily more powerful than the other or is going to get people to change attitude or shift. They're both realms of possibility in our workshops. People will explore the two options and then at that time and given the resources and the images they have the one story will prevail over the other but not because it's the best story or the better story. It's the one to tell at that time. What I would add to that as well is what makes a great story, what we all look for is point of view. And so think about your organization, the cause that you work on. Odds are you're not the only organization working on that cause. So what is your organization's point of view on the issue? What do you think is most important as an organization?  That's what needs to show up in the story. And that's how you make choices as to what's the magic moment that you want to focus on. You want to focus on what you think is the most important moment as it relates to your point of view and how you as an organization see the world and how you want others to relate to the issue that you care about. Well thank you both so much. We are out of time. My apologies to those of you who didn't get your questions answered. We did have a lot of answers given via the chat. So hopefully you got some of your questions answered. I'm trying to pull up a link here. I too am multitasking. But I want to remind everyone that we have a second webinar next Thursday and this is Tools for Digital Storytelling. So some of the questions that had to do with how do you get motion in your pictures, those kinds of questions will be answered then. If you haven't yet registered for that, please do so. I'll include a link in my post-invent message. And again, here is more information about the Digital Storytelling event and the challenge. Please do consider creating a short one-minute video or a collection of photos and submitting them to the challenge in order to win some great prizes. Some more information can be found on our website. So thanks again for everyone who attended today. Great crowd and really great presentation. Thank you Brad and Rob and Michael. What a wonderful presentation. And hopefully you all will be able to go in and submit a video to the challenge. And we did record this call so you can watch that recording later as well. So expect a message from me this afternoon. Please do take a minute to fill out a post-invent survey. And again, thanks everyone. This has been great. Rob, Michael, have a wonderful day. Thank you everybody. Great connecting with you all. Bye-bye.


The study found that physiotherapists were more likely to experience occupational stress and burnout during the COVID-19 pandemic compared to before it. This was due to a variety of factors such as lack of rewards, social interaction, and lack of support. To reduce this risk, healthcare professionals should focus on identifying and eliminating these risks through prevention programs. This article was authored by Dorota Watowitz and Joanna Kowalska.


there's an outbound connection to a upstream HP server. So that's pretty much LSOV. Any questions about that? Cool. So the next tool is S-Trace. How do you deal with this S-Trace? Okay, not as many. S-Trace, again, it's Linux only, it doesn't work on OS X, but similar to LSOV it can connect to a running process. And the cool thing about these tools is they're not Linux-specific or rather Ruby-specific. You can run them on any process and get a bunch of information about that process. So there's too many ways to run S-Trace. First is a summary mode with the dash C option. So the way this works is you attach your process, it runs for a while, you control C and you end up with a report that gives you a summary of what happened. So here you'll notice the top two system calls. So S-Trace traces system calls and signals. System calls are essentially functions that are defined in the kernel.  And anytime one of those calls into the kernel or jumps into the kernel space and that's known as the Syscall. So the two Syscalls that show up at the top here are read and write. This makes a lot of sense, especially in a Rails application, you're reading in H3 requests, writing out SQL queries, reading the results back, doing a lot of reads and writes. So most of the time the kernel here is spent doing that. The next way to run it is in tracing mode. So tracing mode actually will show you in real time as system calls are happening inside the process. So when you run this, you don't just start spitting out stuff. It goes by pretty fast though. Usually I'll use the dash little option to run into a file. So if you look at this output in a little bit more detail, in a Rails app again you're likely to notice a lot of reads and writes. So here's the actual read call in more detail. So you can see the first argument to read is a file descriptor that's reading from. So file descriptor 22 in this case is an inbound HTTP connection. Again, if you look at LSOV, you would actually see the IP and port associated with that file descriptor. You can see the H3 request that's getting read so here it's just a get. And there's much more information, the number of bytes that were read and how long that call took. Similarly, on a Rails app you would see something like this. So here we're writing to file the SQL query and then right after that we read the results back. And here you'll notice the read call takes about 1.3 seconds. So this is indicative of a slow query and this is something that I'll often do is collect a bunch of SRAs data and then run a Ruby script on it and kind of look for slow system calls. So if you run SRAs on Ruby, you might notice a few things. One of the first things I noticed when I ran SRAs on a production Ruby insist was something like this, a lot of sick VT alarm signals coming in every now and then. So I did a little digging into this and what I learned was that Ruby on 8 uses signals to schedule its green threads. So there's a bunch of threads defined in RubyLand that are green threads and the way that it knows to switch between those is that it tells a kernel, hey, every 10 seconds send me the signal. That way every time I get the signal, I'll know I need to go ahead and switch threads. The other thing you might notice here in summary mode is a lot of calls to SIGPROCMASS. This is actually due to a Ruby bug that was recently fixed in 188. So here you'll notice three and a half million calls, 100% of the time the kernel is being spent in this one syscall. So what's going on here is a lot of Linux distributions build Ruby with the enable p-thread option and that ends up enabling this obscure option that does a lot of SIGPROCMASS but every time it's switching threads and rescuing exceptions, a bunch of stuff like that. And this actually ends up in a 30% overhead. So it makes your Ruby binding 30% slower, which is a pretty big sort of impact. So again, you can run this, you can run S-Trace on your production site right now, collect 10 or 20 seconds worth of data, hit control C and if you see SIGPROCMASS, it's spending a lot of time.  Use something like RBM or an RBE that we impact in the set of your standard sort of Debbie and Red Hat, Ubuntu, Debbie Ruby. Yeah. So this has been fixed in the latest builds for Ruby? That is correct, yeah. The point over here is that it's also, this has been fixed in the very latest Debbie and Ubuntu Debbie packages. So the next tool is T-Speed Dump. So we talked about sort of general tracing stuff. Since we are writing a lot of network-aware applications, a lot of times we're running to sort of weird network issues going on. T-Speed Dump, I mean, really useful for that. What T-Speed Dump does is basically dump traffic in real time that's going over network. So there's a bunch of information, the mandate is really helpful, but what it boils down to essentially is an expression that you pass into T-Speed Dump. So here's an example of a very simple expression. We're telling it capture all T-Speed data that's connecting to the destination port 80. So anything that's connecting to the web server creates all that data. And so again, if you ran this on your system you would right away start seeing all the incoming and outgoing HTTP requests. So here we can see there's an incoming request for an image and you can see all the headers and all the data that's associated with that HTTP request. Similarly, you can do this for MySQL. So here's all the SQL queries that are going over in that work, for instance. The best way to use T-Speed Dump though is with the dash W option. So this, instead of printing out the packets to SCD out, we'll write all the packets to a file. And this is really useful because you could run this on your production server, collect a bunch of data over a couple hours, and then download that file locally and open it up in a tool called LiarShark, which is really nice and gooey for filtering and interpreting and viewing this sort of data. So here again is an HTTP request. And you can see that it's a much nicer sort of gooey that you can dig into and see all the details about that HTTP request. The other nice thing is that it understands a lot of common protocols like HP, MySQL, stuff like that. And so it'll parse out the data and show it to you in a way that makes a lot more sense. So that's T-Speed Dump, any questions about that? All right, let's move on. So the next tool is Perf Tools. It's probably one of my favorite tools. It's actually a set of tools that were developed at Google that they use internally for performance work. The one I'm gonna talk about in particular is their CPU Profiler. So again, here's some instructions for later, basically you download and compile. And the way this works is you get an LDP load of the library and then all you have to do is set an environment variable before you start your process. And that tells the process to write a profile out to whatever location you specify. And then they respond to it with a prototype called P-Prop that's able to analyze your profile and give you much data. So like any sort of Profiler out there, it's got the standard test-based output that shows you what's going on. But the really nice thing about Perf Tools is that they have this built-in graphical output that makes it a lot easier to understand your code, understand where time is being spent. And just by looking at this, the bigger that a function shows up, the more time it's taking, the more CPU cycles it's spending. So some examples of places I've used this. The cool thing about Perf Tools is it's a sampling profiler. So every so often it'll take a sample. And what this means is it's fairly low overhead and you can actually run it in production. So I ran this in production on a pretty big Rails app for five or six hours during peak time.  And what you'll notice in this graph in particular is that about 12% of production time is being spent to function RE match exit. And the cool thing again about this graph quote, call graph layout is you can follow that up to the functions I called it. If you follow it up a few levels, you'll notice that all of these calls are coming from a function, RBSTER sub bang. So like you would imagine, RBSTER sub bang is the C equivalent or the C implementation of the function strings sub bang. And you can trace where all these calls are coming from in RubyLint, you'll find that all of this stuff is coming from time.parse. And sure enough, if you open up time.parse, you'll notice code that looks something like this. And since time.parse supports a variety of time formats, the way it's implemented is that it wants a bunch of reggages until one of them succeeds and then it figures out what the time string translates. So in this case, the solution for us was to switch from time.parse, switch from a Ruby-based time parser to a C-based time parser. And Jeremy Evans is actually doing a talk about this later. His gem called Home Run, which moves the daytime libraries into C-Lint instead of RubyLint. Another example, I maintain the memory machine gem and for a long time there was a known issue where if you use Ruby threads and memory machine together, especially with E-Poll, it was really slow. And so again, I just ran proposals on this and sure enough, I noticed a quarter of the time is being spent in mem copy. And again, you can trace the mem copy up and see what are those columns are coming from. So in this case, they're coming from two functions, like the VM, RB thread and save context and RB thread and restore context. So once I knew that this was threading related and it was coming from these two functions, I was able to just sort of look at the implementation of those functions and figure out what was going on, fix the issue. In this case, the memory machine was allocating bunch of really huge network buffers on the thread stacks and since every time threads are swapped in and out, they're copied back and forth, it was doing a lot of mem copying that was causing a lot of overhead. And so we just moved these buffers onto the heap instead of the stack and that fixed the issue. So any questions about perf tools? So I was using perf tools for a bunch of stuff and what I realized was that in a lot of these graphs, like sure it was cool to see that mem copy was acting or thread save context or especially like RB stir something but what I really wanted to see was the actual Ruby functions themselves. So I created this project called perf tools on RB. It's on my give-up and it's essentially a fork of or a wrapper routed around perf tools that makes it really weird. Here's how you use it, you can read me, it's pretty good. So I'm just gonna grab some water real quick. So if we take this example, there's a really simple scenario app that has two actions. One is slash sleep which is time intensive so it takes a long time. And the other is a compute action which is CPU intensive. So it takes a while but it's also spinning the CPU where it's the first one, a kernel is smart enough to say this process wants to sleep, let me just pause it. So we run this application inside perf tools and we send both of these actions 50 requests each. What you end up with is something like this. So on the left, so there's actually two modes that you can run perf tools on RBA. On the right is sort of the regular CPU profiler. So like you would expect the compute action which is very CPU intensive shows up as the highest, as the biggest thing on the right. But you can also run it in real time mode and so that's measuring all time. On that graph, the sleep action shows up at the top because it actually takes longer than the compute action. The compute action is also on that graph but it's not as expensive in real time as the sleep action. So here's a bunch of examples of ways I've used this and found it helpful. Early versions of the Redis gem use system timer on every single read like man and so running perf tools on that we were able to see that there was a lot of overhead and once we knew that that was an issue we switched over to using native TCP come outs on the reads and writes. Another way I like using perf tools is just to sort of get a sense of the code base since it shows you the entire call graph you can get a sense of what functions are being called how often they're called and what other functions they call. And so here for instance you can see Ruby gem spends a lot of its time in file system access. So it's traversing directories, checking files exist, opening up gem specs and doing a lot of file system access. Recently I ran perf tools on one learn and noticed that about 25% of the time it was being spent in the gem version spaceship function. It's just because one learn is doing a lot of version comparisons to try to figure it out with the often versions to install our based on your gem file. So in this case, once I knew that this was an issue I was able to patch that function itself and made it actually a bunch of sort of micro optimizations to that function. But even those were good enough to sort of give one learn of 15% overall improvement. And again, you know, like if you look at this patch these are the sort of optimizations that are not sort of recommended to do to make because they are micro optimizations. But the whole point here is that once you profile your application and you know that it's spending a lot of time on a certain function, it makes sense to spend time improving that function. And then finally, most recently I added an object application for father two profiles. And so here, instead of showing you CPU overhead or real-time overhead, each sample represents one object that was created. So here again, this is on a big Rails app. You'll notice that time dot parts and date dot parts are creating a lot of objects. So we noticed earlier that these functions are very CPU intensive, but it turns out they're also creating a lot of objects. And again, since Ruby has a simple sort of naive markets with garbage collector, more obvious to create the longer you end up spending in GC and the longer you spend in GC, while GC is happening, nothing else can happen. So it makes your application slower. The solution for us in this case, in this particular application was to switch to the MySQL driver. And most of these time dot parts that were coming from roads that we were leading to the MySQL, I'm trying to parse the times out of, and MySQL 2GEM knows the exact format that MySQL is going to pass it. And so it just writes a few lines of C code to parse that out instead of propagating it up to Rubyland and having Ruby figure out what that time to spend. So that's Perftos, any questions about that? All right, so Perftos is a lot of fun to use. It shows you data in a really easy to sort of understand way. So the next tool is sort of related. It's the Rack Middleware, the Rack Perftos. It makes it even easier to use, especially in the context of Rails, the Rack application. So you can jump to solve this. The way it works though is really simple. It's just a middleware. So here, for instance, we require the gem. We insert middleware in the beginning of our Rails application. And what it does is add a bunch of URLs to the application and make it really easy to profile. So the simplest way to use this is the last command on the screen. And the way that works is on any URL, you can just pass in profile equals true and times equals a number. So here, for instance, it's gonna run, it's gonna make 10 requests to the home page and then instead of returning the contents of the home page to your browser, it'll just return the actual gift. That's the profile. So all these screenshots that you've been seeing have been taken from these gifts, sort of outposts, and that'll show up in your browser very well. The other way to run it is sort of a more manual where you can start the profiler, hit a bunch of URLs, stop it, and then grab the data out. So that's pretty much it for Perf Tools. Any questions about that? Cool. So the next tool is Ltrace. We talked about Strace earlier. Ltrace is very similar, but instead of tracing system calls, calls inside the kernel, it's able to trace calls in user land to see functions in shared libraries or inside your binary. So in order to how Strace works, you can run it in two different modes. The first one is in summary mode. So this is the same example from earlier. We have these threading issues with the RAM machine. And sure enough, just like Perf Tools, it shows you that a lot of time it's being spent mem copy. And the next way to run it is in tracing mode. So the cool thing here, again, is you can see stuff as it's happening in real time. So we talked about earlier, Ruby uses syncvt alarm to tell it to switch threads. And here you can actually see syncvt alarm comes in, and then sure enough, it does two mem copies. One to copy the kernel thread out, another to copy the new thread in. And what you'll notice here is that the last argument to mem copy, which represents the number of bytes that you want mem copy didn't have, in this case, it was fairly large. And so every time it had to do a thread context switch, it would end up copying one mem byte in and one mem byte out, which was the reason it was so slow. So that's Ltrace. One of the problems with Ltrace itself is that it's unable to trace calls being made to shared libraries. And since all Ruby extensions, our shared libraries that are loaded in during runtime, Ltrace can't show you what's going on inside those library calls. And so, Jodemoto, Fork, Ltrace, and added support for libgl, it's up on this GitHub. We actually just recently took over a maintainership of Ltrace. So the next version of Ltrace will contain all these patches. So these patches add much options. But basically the way this works is you can use the dash x option to trace any C function. So here, for instance, we're tracing all calls to garbage collection function defined inside the VM that does garbage collection. And sure enough, in tracing code, in real time, you can see garbage collection as it's happening. So here, you'll see that garbage collection is running every few seconds. And every time it runs, it takes about 200 milliseconds. This is fairly typical for any decently sized query application in MRI. And the thing to note here is, again, when garbage collection is running, nothing else can happen. So if it takes 200 milliseconds and it gets triggered during the request, that's gonna add 200 milliseconds to your response time right away. Like I said, you can run this on any shared library that you read extensions. So for instance, the MySQL client library finds a function called MySQL real query that's used to make all queries. And so on any given process, you can attach to a process using its pit and start tracing all the queries it's making.  The first argument is the connection pointer. So you'll notice that there's two different connections. And then one of these connections, it makes a really slow query out that ends up taking 1.2 seconds. And you can do this on any other function. So for memcache, for instance, I use this to track down the weird cache exploration issues just by collecting a bunch of sets and get to our time and then analyzing them in the Ruby stored app with that. So that's L-trace in question about that. Cool. So the next tool is GDB. GDB is sort of the standard debugger that's part of the new suite. This is really useful in Ruby land for tracking down the cycles. So I'm sure some of you guys have at least seen the sort of output at the top where Ruby will suddenly die and all it says is cycle. So to sort of demonstrate this, I have a simple C extension at the bottom. And all it's doing is defining a global function called segd that just does invalid memory access and causes a cycle. We have a simple piece of Ruby code that requires this library and then causes a cycle. Before causing a cycle, it does a couple of things. So it'll, it calls, you know, four dot times and then dir ch dir hash nu and then it cycles. So there's two ways of using GDB. One is to attach to a running process. So again, we find the process, we take it's paid, we pass that to GDB, connect to that process and then it lands on a prompt so you type continue that basically says, you know, continue running this process until something happens and then sooner or later it's gonna cycle and you go back to that prompt and you can start collecting more data. The other way to run it is using a core dump. A core dump is essentially a dump of the contents of memory. To do, to do it this way, you have to do a couple of things beforehand. So the first thing you have to do is bump up the core limit size. So here we're basically setting it up up to 300 megs. What this means is as long as the process is under 300 megs, it'll get dumped out when it dies. The other thing we do is create a directory for the course to live in and then tell the kernel to put the course into that directory. And once you end up with the core dump, instead of invoking GDB with a process ID, you just pass in the course and it's smart to figure out what you do. So once you're at the GDB prompt, the simplest command to use is where and what that does is basically give you a stack trace of all the C functions that were called when that's a fault happened. And once you have this, you can basically, you know, copy and paste this where you can help open an issue and let the maintainer know this is what was going on and at least it'll have a bunch of information to try to figure out what's causing that cycle and try to reproduce it. You could also just start looking at the code itself. You know, you have enough information about here. You have the function names, the files and the line numbers that they're defined on. And if you look at this in more detail, you'll notice, you know, the very first frame is main. Main is sort of the entry point to any C function. That calls Ruby run, gets Ruby up and running. You'll notice in numeric.c, it's invoking function into the new time. So that's the four dot times that we were calling that calls Ruby yield or just yielding to the block. There's a endure.c, there's a hash.c. So you can see how the C code sort of relates to the Ruby code that was causing the cycle. Similar to the whole of Perftool's thing, I was using GDB for a while. And again, what I really wanted was Ruby level information. So we see level information. So I created this project called ggb.rb, which is sort of a scripted GDB with hooks for Ruby, such that it knows what's going on inside the Ruby and that you're connecting to it. So again, this is all my give up. The way this works is it adds a bunch of Ruby commands. So for instance, there's an eval command. And so you can attask any running Ruby process and start evaluating code inside the context of that process. This is really useful for debugging. It's useful for injecting code. For instance, if you wanted to start profiling an application, you could attach a GDB and run Ruby eval to require Perftool and get Perftool joining inside that process.  There are commands to inspect all the threads. Here is the list of all the threads. You can see the first thread is the main thread that's waiting on joining the second thread. The second thread is in asleep 60. That has 57 more seconds left. The third thread is waiting on father's future five. Again, you can look at Elsaw to see what that father's future five wants to do. And the last thread is the current running thread. There's some commands to inspect the heap. So you can see how many objects are alive, what types of objects are alive. You can inspect the contents of objects themselves to hear we're grouping all objects by content or all strings by content, rather. So if we take that example from earlier where we're causing the segful, now with gdb.rb, we can get Ruby level information about what's going on. So we type Ruby threads, and instead of C functions, C is the final names, we get Ruby functions, Ruby final names, and Ruby will have numbers. So a couple of ways that I've used this and found really helpful are versions of, we got a question about Ruby version agnostic. So the question was about what Ruby versions it supports. I just pushed a version last week that supports any 1.8, so it'll work on 1.8.6, 1.8.7, RE, or MRI. But not 1.9. Not 1.9 yet, yeah. And another thing to note is that it only works on Linux because gdb.7 currently does not support OSUX. So here's an example. There was a plug-in called Rails Warden that's an authentication plug-in for Rails, and it was causing memory leak, and turn off, you can attach. Here's a list of all objects by class name, and there were, we noticed that there were several thousand instances of each of the middlewares, and what was going on was basically, Warden was leaking its middleware by adding itself to a global array, and since middleware always points to the next middleware in the chain, it ended up leaking the entire chain of middleware. You'll notice a lot of interesting things if you just sort of hook around applications. Longer, for instance, has this line of code that I discovered that just creates a new thread, that just leaks one in a loop. God had a lot of memory leaks for a long time, and again, you can run some of these commands, and we noticed that there were way more instances of God watched than we expected, and there were a bunch of arrays that had over 90,000 elements, so these were arrays that were just growing infinitely without ever getting hurt. So that's gdb.rv. Next to it was memproth. So memproth is sort of a memory profiler for Ruby. It's similar to the leak house, you guys never used that, but it doesn't require any patches to the VM, so it's just a gem that you can just require and start losing.  For instance, you can track objects created during a block, so for instance, here we're creating 100 strings, 100 floats, 100 modules, and it'll just print out a simple report that shows you how the objects were created or how the lines. There is memproth.dump that shows you a bunch of details about objects, instead of just giving you a summary, it shows you in JSON the actual structure and details about the objects. So here, for instance, is a string, you can see how long it is, what its data is, what class it is, et cetera. You can do this for any of the native types, arrays, for instance, you'll notice, show you the actual contents of the array. Hashes will show you key value pairs and whether or not there's a default prompt. And then classes, like you'd expect, also have a super class. There's an instance variable table that has, that actually holds both class variables, instance variables, and constants. And there's a method table that holds both methods that are defined. But memproth.dump all is basically just dump, but it gets called on every single object that's defined. And since this all gets dumped out as JSON, it's really sort of easy to run analysis groups on it after the fact and get more information out of the data. So one of the ways to do this is using memproth.com, which is sort of a web-based UI that can take one of these JSON dumps and create sort of a clickable interface for understanding what's going on. So here's a real quick example of things running out of time, and I'm gonna speed through this. Using memproth.com to find a leak in Rails 3. So, really versus Rails 3, it's really massive memory leak in dev mode. So the way, I'm gonna sort of walk through how I found and fix this leak. So you require memproth, we send the application 30 requests and we run memproth on the pit to sort of dump out the heap, upload it, and give you URLs to end up on a page like this. You can start clicking around to sort of get a sense of what's going on. Here I'm gonna click on do good classes by name. So you see something like this, there's 2,500 classes and there's 30 copies of test controller. So this is all built on MongoDB and you can see the MongoDB query that's being used. So we say, find me all classes, but limit it by the ones that are named test controller. So you get a list of all of those. You click on one of those to get details about it. And the cool thing about this is you can see the references, right? So the whole point with the GC is that as long as something is being referenced, God's production is gonna think that it's in use, it's not gonna get rid of it. And so you can use memproth to find what's still referencing an object. So here we see one of the references to test controller is a hash that has exactly 30 elements, which is interesting because we sent exactly 30 requests to this application. So we click on that and sure enough, we see that this hash is holding references to all those test controllers. And the cool thing is that it shows you the bottom line numbers so you jump to that code and see what happens.  And the fix for this was really simple. Instead of using the actual class object as a hash key, we just use the string test controller as a hash key. And so every time in Dev Mode, a new version of test controller gets loaded in, it still has the same string key that gets mapped to this hash. So just overwrite the old entries that are creating the new entry. There's a couple more memproth features that we're working on, sort of middleware that is a tracing framework. So for each request, it collects a bunch of data about how long the request took, you know, a couple of details about the request itself, and a bunch of information that's sort of useful just for profiling in general. So here, reflecting how many Moscow prints happened, how long they took, how many calls to GC. This was a really expensive action. You know, there were eight calls to GC that took almost two seconds to execute.  So here, almost four million objects and then sort of a breakdown about all the objects by type. So this is something that I'm actually working on. The cool thing is, if you run this, memproth is mostly written in C and assembly and it serves a really low overhead. And if you run this in production, collect data about a bunch of requests over time, you can then take all the ideas on data and start analyzing it. And so I'm currently working on sort of a report that's generated using all this data. And this is something that I ran recently on production application and noticed that, you know, a lot of time, almost 40% of the time being spent this application was in GC. And every time GC happened, it would take almost half a second. So that's pretty much it. One of the stuff was that there's times and bugs that we all run into that sort of makes thing, you know, WTFs, it doesn't make any sense. And if you have the tools to start debugging and start gathering even the tiniest amount of data, you can start making progress. Because if you'll find, you'll get some data, you'll start looking at it, start making correlations and once you have that data, you can start investigating. Even if you have, you know, a line number, you can start looking at that line and start making progress instead of being stopped. And so the whole point of this talk was to introduce a bunch of these tools such that when you run into issues like this in the future, at least you'll have in the back of your mind, you know. I sort of remember there's this one tool that might be able to help. And you can look at these slides and copy some of these commands and start to use these things. There's a bunch of slides in here that I don't have time for. So this is sort of a case study of me running all these tools on an application and finding bunch of problems and fixing them. Like I said, all these slides are online. So make sure to check them out and if you have any questions, you can ask them now or you can find me later on or you can reach me in the middle of the break. That's it.