We agree that sustainable agriculture has to do with environment and natural resources, has to do with production, and has to do with human beings, and the idea that all of those things can flourish simultaneously. This effort really looks at the human component of that, and I think that we are as farmers to agriculture, to communities, and to making the system going. So as Beth mentioned, one of the things that brings me to this work, I work for the Minnesota Department of Agriculture, and now have for many, many years, I used to be the organic lady there now. I am the stress lady. But the thing that brought me to this work really is my exposure on my own farm. I came to dairy farming as a mature person. I married my husband in 2012, and we started dairy farming together a little bit before that, but we have an organic dairy in South Central Minnesota in Leesore County. We milk about 70 cows, and then I have little side businesses in non-certified pork and beef and direct market foes, and I work part-time now for the Department of Agriculture, and this is just a few shots of our farm. It looks like many other farms in our area kind of rolling, where we think animals are a critical component, so we're really appreciative of that, and you can see our happy happily married picture. Most days it still looks like that, but a few days there are stresses on our own farm, and it doesn't look like that. So that's my farm life, but the project that I'm going to talk about really engaged a whole bunch of other people in making it happen, and I bring this to you with the idea that in your area you may be one of the people, or you may be from one of the organizations that makes an effort like this happen. And what I'm hoping today is you could see some things here that resonate with you that would inspire you to take it back to your own world and say, hey, I heard about this project, what if we try something like it, or I heard about this project, let's not do that, but let's do something else instead. You know, you can harvest kernels and take from this whatever you want. But these are the groups and organizations we received a sale grant, I think it's about $70,000 from SAIR, and I'll tell you the sort of the genesis of that and what we've done with it and how we're trying to impact agriculture in Minnesota for all farming communities, really. And I do want to note that part of an effort, I think, are the people that are involved. And our effort has had an advisory group of folks, farmers, and other people who work in agriculture from around Minnesota, and I listed those at the bottom, you know, summer and production agriculture. One is a dairy farmer who's no longer dairying, couple extension folks, and somebody from one of the state college systems. So if I put this slide up here, I think there's probably nothing that you don't recognize. When we think about the multiplicity of stressors that farmers experience, not just in bad financial times, but really always, it is a stressful, it is a stressful profession, but it is something that drives us, that we are driven to do. And yet managing all of these stressors, trying to manage them, when some of them are factors, quite frankly, that are outside of our control, can be really quite overwhelming. And I think we see that really come into a head now with what is going on with financial pressures and especially weather stresses that we've had for the past few years. And Beth alluded to the fact that I came out of some struggles on our farm. In 2016, we lost our milk market. We lost our milk buyer. And we dumped milk for two months while we were looking for somebody else to take it. We did eventually get on a conventional truck. But on a week-to-week basis, you know, when you have a catastrophe happen, you don't know if you're going to weather that storm. And looking back now, I can say, oh gee, everything turned out fine, that was okay. But the panic that you go through on a day-to-day basis really brought home to be how fragile we are and what we do in our relationships with each other. And really caused me to focus on what my friends and neighbors were also going through. Very other, very significant challenges, different than mine, but that we were all in this boat together. And when I went back, our story had a happy ending. We found another organic milk buyer. We're shipping organic milk today from our 70 cows. But the conversations that I had with people, neighbors, friends, colleagues, professional colleagues in the world, and when I got back to the Department of Agriculture really led me to strongly... Our principle of belief is that people want to help when they see other people in trouble. People want to reach out and help, but often they don't know what to do. And that's really true for people who work to support farmers and agriculture. Our project, that's not the next slide. When we look at folks who interact with farming with extension educators and veterinarians and milk haulers and grain buyers and elevator operators and feed store guys at the elevator there, looking and saying, you know, I'm looking around and I've seen people that I've known for years and years and I'm sensing that they are really in trouble. And I don't know how to talk to them about it. I don't know if it's my place. I mean, I don't know if you have the North and South Dakota way. We're pretty like, oh yeah, well, you know, it's none of my business. I don't want to step out of my way there. People are well-intentioned that sometimes they just don't know what to do. And when people don't know what to do, what do they do? They do nothing, Charlie Johnson. They do nothing. And so we said, well, how can we change this? And so we tried something. And the origin story of this larger SIR project was in 2017 I got together with the Minnesota Sheriff's Association with a psychologist in Minnesota who works only with farmers whose name is Ted Matthews, who's actually kind of famous for doing that and with the Farm Service Agency. And we put our heads together and said, what would help people who work with farmers be more responsive, be able to recognize and respond when they see farmers in trouble? So we put together our workshop, we took it on the road, we did it in six places and nearly 500 people showed up at this workshop at some place or other. These were clergy people. These were pesticide inspection people. These were dairy inspectors. These were veterinarians, FSA staff, people from offices, all kinds of people which really brought home to us that our hypothesis was right. People want to help but they don't know how. And I'll just show you the agenda here. You can read that for yourself. It was just basic stuff about how do you take care of yourself in a stressful situation? Adjust your own oxygen mask so you can help other people. So taking care of yourself and some of this work. And sometimes stress gets to a point where it's confrontational it can actually get dangerous. And so we want to make sure that people stay safe in that situation. But probably the biggest take home message on here with two things were number four and number six. And one was this idea of having conversations with people and really engaging and helping people get out what is happening to them. And being a listener in a way that that person needs to be heard. And sometimes that means just working on something in the shop together and not talking. I mean that's a way of communicating and being with somebody and supporting them. And sometimes that's a heartfelt conversation at the bar or in the coffee shop or on the telephone so that it looks different. But people are used to solving other people's problems and not just listening and walking through and with somebody when they're in difficulty. And so the challenge here is how do you help somebody find the wherewithal to figure out how to solve their own problems. These are the types of people we reach. This was the slide I was looking for before. Just a whole gamut. And so we realized with 500 people coming to this thing we were on to something. And like SAIR and like Northern Plains Sustainable Ag Society we begin to evaluate and we ask people what they think. And when we looked at what the people who came to this workshop said and we said what more do you need? What would make you more effective? What would help you in your job of supporting farmers in their jobs? Because we're all interconnected here. And they said a number of things. They said we are worried about suicide in our communities. We're scared about that. You mentioned it in your down on the farm session but we need more on that because we see it happening. We're scared of it. They said what about kids on farms? What's happening there? They said how do we bring this program to our area? You only did it six times. How can we do more of it? And they said we are afraid of conflict. And we don't like having there are a lot of tough conversations that have to be had. We don't know how to deliver bad news effectively and we feel really bad when we have to give bad news. So conflict and difficult conversations are tough. So my proposal to Sarah was can you help us create efforts in all of these areas? And so that is what we did. So the first thing that we're doing, I'm just going to run through these quickly, is we're turning this down on the farm workshop that we did into a curriculum that other groups and organizations can use. And they don't have to buy it. And they don't have to use it as it is they can. It's like a recipe book. Here's a slide set. Here's some guidelines. Here's the kind of team you might want to put together. So you have the resources and you can tailor it for your own community. Whether you're in Pennsylvania, Colorado, or Mandan, North Dakota. So people could do this for themselves and have the same sort of engagement. And attract the same kinds of partners who are eager to do this kind of work and support workshops like this. That diagram or the people that helped underwrite down on the farm really wasn't very expensive to do. But you know organizations tipped in $200, $500 and made that happen. And it's going to be free of charge. So it's something that will be very, very, we hope it will be useful but we also hope it will be that terrible or inaccessible. We hope it will be affordable for groups and organizations to do. And that would be big organizations like if the Farm Service Agency wants to use it for training, that's great. If a local church wants to use it for training or the Elks Club wants to do something about like this in their community. They can do that as well. The second one gets at this navigating conflict and difficult conversations. And the things that I put up here are feedback from folks that went through that workshop and that was about 220 people. We did this one six times, too. And we had a partner in our extension community vitality session, Denise Strowing, who put this workshop together for us. And this is what people said they were leaving with. These were kind of the intentions or the resolutions that they left this workshop. And it was a little off the cuff. It was very participatory. And I think people came in expecting to learn how to get a script on how you give bad information gently. I think they were looking for kind of a recipe on that. And instead Denise's training really got at what's coming out of you. What are you bringing to this conversation? What are your intentions? How are you going to be in this moment? How do you reframe the expectations that you're going into a conversation with? Because generally when something's going to go bad, you have a sense of that beforehand. You know you're going to have a tough conversation. So what do you do to prepare yourself so that the best possible things can happen? So it was a little touchy-feely by people staying and they were engaged. And a lot of them left with intentions like they were saying I have gained something here and I'm going to make some changes and try to change the way I do the world or avoid going into situations with a win-loss mentality or something like that. So that was extremely helpful. And since our six initial workshops, Denise has had calls from two other communities and has added two more of these. So she's done two more workshops. People that were at these first ones and said could you come, Pollution Control Agency said could you come and do this for our staff for example. So she's done two others. The third is an effort that we looked at farm youth and thinking about, we spent a lot of time worrying about adults and what they're going through and farmers and spouses and business partners. But what are kids going through? Particularly adolescent kids who are at the point that they see what is going on, they recognize the stresses, they feel the stresses, but they probably don't have the cognitive and emotional capacity to really grasp what has happened and what their role is. What their role isn't quite frankly. And a lot of teachers in rural areas don't have farm backgrounds and so they need some help on knowing what are the clues. What makes farm kids different is in some ways farm kids just are different. So we reached out to teachers and librarians, youth pastors, and we tried to cast the net very wide on that. And the whole thing was like a mini-down on the farm but oriented toward adolescent stress and how do you recognize and respond when you see youth and stress. And so some of that had to do with just cognitive development and how kids develop because their grades quite frankly are different than ours are. They are emotional development and just knowing some of those practical aspects. So think about this project in quarters. This is the quarter that I thought, oh nobody's going to want to come and talk about suicide. That's just too, it's just too scary. And this is the one that was just packed to the rasters. We worked with the Minnesota Department of Health. They have a state suicide prevention coordinator. This is not an area I know anything about so I had to turn to people who were no longer behind me. And she advises to use a program called Safe Talk. It's a three hour program that's very experiential and teaches people actual skills about, number one, how you recognize somebody having thoughts of dying by suicide. Number two, how to engage them and how to interact with them and get over your own stigma and fear about doing that. And then three, how to keep them safe until you can find them more permanent health. So this is not, we need to turn everybody into a psychologist or a grief counselor.  How do you intervene and keep somebody safe? How do you recognize not only not only the outward size and symbols that somebody might be contemplating something like this, but how do you pick things up in words? How do you pick things up in what people say in what they don't say? What are the clues? And so what we did, this is a program that's done all over the world. It originates in Canada and it's done all over the world, but it's very generic. It's very general. And so what we did is we worked with somebody who adapted it more for agriculture and rural communities and really helped people from that perspective see how this is applicable and have those conversations. So we stretched it kind of from three hours to four hours. We could only take 30 people per session. We started with six sessions. So you get in here, six sessions of everything and had to add three more because there were wait lists for every session we did. And by the time I ended, I still had 100 people on wait lists. So now we're trying to figure out how to help this go forward. And when we asked people in the follow-up evaluation survey, one of my favorite questions to ask is would you recommend this to someone else? Because we ourselves will put up with a lot. You know, I'll put up with crummy food and I'll put up with bad hearing adults and I'll put up with boring speakers, but would I recommend that to somebody else? No, I wouldn't say that. Go to that hospital if they're not going to treat you well. So that's the question I like to ask. And 85% of the people said that they would definitely recommend this to somebody else. And I think that's why it's had such uptake and there has been such interest in it. So we're busily trying to figure out how we can equip more of the people who teach safe talk to understand this rural agricultural curriculum and be able to talk about that. Because not just anybody can drop in and talk with any kind of credibility or sensitivity about some of the unique struggles that happen and the situations that might come up in agricultural settings. So we're continuing to do some work on that.  I don't know what I did with the whole thing. Okay, I have about 10 minutes. So the last thing I want to... So with that, that's the fourth piece of this SAIR effort that we did that really has engaged a lot of people all over the state and has been very... It really has exceeded my expectations, I guess I would have to say. At the same time, Beth asked me to talk about another effort that we're doing that some of you may have heard because you are in the Red River Farm Network listening area. Has anybody ever heard a show on your RFM station called Transformation? Does that ring a bell? Well, this is a project that we co-created with Don Wick at Red River Farm Network. And it has since taken on a life of itself. We sort of helped by we, I mean the Department of Agriculture in Minnesota. And the idea is that farmers are probably the most valued source of information for other farmers in many ways. And we are curious about what our peers do and what they're going through and how they have managed things. And so we have identified farmers in the Northwest and Minnesota, North Dakota and South Dakota by and large who have gone through some sort of challenge and are willing to talk about how they navigated that. And these are 60-second shows that air during crime time like during the farm report, they're not buried at three o'clock in the morning when the PSAs are on. So it's paid radio stories. We buy the time for. And farmers in their own words talk about what they have gone through and how they have navigated that. And then because it takes a lot of tape to get 60 seconds of useful conversation, we also have companion podcasts that are anywhere from 12 to 15 minutes. So for each 60-second episode, there's another 12 minutes that people can go onto the internet and listen if they want more. And we've done everything from, the first one we did was how not to let the farm wreck the marriage. There's a dairy farm talking about the stresses that farms put on marriages and the stresses that marriages put on farms and how we navigate those. We've had a couple of episodes of people who were farmers from generations back and for some reason they found themselves having to exit farming and they've talked about very frankly what that was like for them and how they went through that and what they are doing now and how they feel about it. And in both cases they feel really good about it but they said it was a very difficult, it was the hardest thing they've ever done for themselves and in some cases for their kids, you know, coming home and telling your son we're not going to be farming anymore or your daughter. We talked about it's okay not to be okay and this was Doug Kramer who is a farmer near Bajew, Minnesota. He's in his late 70's now but when he was going through the farm crisis in the 80's he went to see a therapist and it happened because he was on his farm and a salesman came one day and they were talking about this, that and the other thing and I guess about I don't know, they were talking about feeling low and the salesman said well, you know I go to the, I go to a head doctor for that and it's been really helped and Doug said, you know, I thought about that and I thought, I'm not getting any better so maybe I should do that too so he talks about what it was like and how he felt and how nervous he was and people would see his truck outside the counselor's office and he said, you know, after a while I kind of didn't care who sold my truck because it was helping me and I was feeling better and things were getting better and so now, you know, 20, 30 years later he feels safe enough that he can talk about that because it was in the past but, you know, he's a farmer like every other farmer and I fucked into people who are like my god, we have no idea Doug ever did that that's kind of cool that he's willing to talk about that we've had several on suicide and people talking about losing a son Nathan Saradka's dad from Adam's North Dakota Doug, not Doug but Dale talked about what it was like to lose Nathan when Nathan was 29 years old and took his life and what that's been like and how hard it's been to talk about and why he feels it's important for other people to know about what happened to Nathan so that it doesn't happen to their kids Teresa Gilley, who was the president of our Minnesota Soybean Growers Association lost her husband to suicide about three years ago and she was very candid in what's happened and how it is that she's able to keep farming and what her life's been like after that so I mean, I just give you these examples that these are really meaningful point of stories and the people who tell them are extremely brave but it's an opportunity for folks to hear other human beings who are going through the fire and struggling through it and the strategies that they have used and it's taken off I'm advertising it on Facebook it's up on the Red River Farm Network site which is at the top of the page here and I just reposted one I think I just reposted on Facebook Nathan's story and 2900 people have clicked on it to listen to it and those are people all over the country and I get calls from other places saying how did you do this or how can we do this in our community and it's really finding somebody who's interested in telling the stories and Don's been very excited about it at Red River Farm Network and lots of local businesses have wanted to support this because they see that it's important we're all in this together and if I learn something here that I can share with you I will and it's quietly in the shop in the truck or at the dinner table when the radio's on in the background my view of radio is you don't know what years you're going to reach and what impact that will make and so it's kind of a safe way to deliver that message and then people can do with it what they want but it's sort of a non-threatening way to listen to the radio so those are some of the strategies we've been using I have here Minnesota Department of Agriculture Propaganda that I will just pass out all states have sweets all sorts of services and programs and individuals who are particularly helpful and this just gives you an idea of some of the things that we're highlighting in Minnesota some of them are affiliated with our department some of them are with the University of Minnesota some of them are from organizations like the Farmers Legal Action Group non-profit organizations but we really try recognizing that there are very real stressors that different people need different things to help them make decisions of whether the stressors and our job is to help people find the kind of help that will be useful to them as quickly as possible and so we very much appreciate Sarah's support of the odd things that we were trying we're glad to report that in this case when we threw this bigotty at the wall a lot of it has stuck and so if there's anything that sticks with you and you want to try any of the little things that I hear please do and you certainly can reach out to me and I'll give you any other information that I can but I wonder what questions you might have for me for the tape I'm going to say that Charlie Johnson is recommending a movie called Country which was that the 80s you think late 80s anyway start Jessica Lang and really or dealt with some of the relationships of what happens with people involved in the complicated life of farming and that's a recommendation I'm not sure I have a question for you but I mean every over half of my time this year I was probably not just talking to farmers going to visit them and had nothing to do with soil health and nothing to do with research nothing to do with extension but it was to have a tool like this would be really useful specifically in extension when you're getting these phone calls and farmers calling you on Saturday telling you that they're really depressed and so this is really helpful so sometimes we think a conversation or a visit is about one thing and it turns out to be something else doesn't it and I know that I treat my vet as a therapist you know my vet comes out he never comes for a good reason somebody's always down and I know it's always costing me money and it's a 50-50 chance that I'm going to get that money back but after word we go out we stand outside the truck we scuff the dirt and we talk about you know what's happening in other places and sort of you know he's the circuit rider of what we're seeing so you know we pick the people that we feel safe talking to and for some people that's a vet and for some people that's their family doctor and for some people it's Abby and for some people it's a 24-hour health plan they can call at 2 o'clock in the morning and nobody will ever know who they are or you know where they are it's an anonymous conversation so people need what they need and so I think it's our job as human beings to try to go back to what I said and sometimes we don't know how so that's what we're here for I live north of Grand Forks and I had it was a couple-hour conversation it was a potato he runs a watch plant a potato watch plant just south of Grand Forks and he said the farmers the farmers demeanors are just they're so low they're self-esteem this is actually perfect timing I think for something like this and this was already last fall so farmers are in general even up in our area they're not in a good place is it a speakers bureau that people who are speakers can be trained and spread this message and or how do we become part of the solution and help get this out there so we can get other people trained I think a speakers bureau is an awesome idea MPSAS could do a bang on a job helping promote that idea and it wouldn't have to be MPSAS people but you could be the catalyst of saying how do we work with extension and the departments of agriculture and find the people who have the energy and the passion to do this and get out and talk about it and really get other people talking about it so that we begin to think it's not just in our heads but sometimes when we start talking oh wait I never quite thought of it that way because you're hearing it out loud so it's finding the messengers I guess to get the conversations going and some of those messengers I think very much are farmers to go out and talk about what is happening I'll tell you a lot of the public speaking that I do is to non-farm audiences I'm like the agriculture interpreter I talk to mental health professionals and social workers and people in groups and organizations whose work touches farmers but they don't know anything about what it's like to farm and they understand that something is wrong in agriculture but they don't quite get why and they don't quite get the complexity of that dynamics and you know that tangle in the beginning that I put up about what's land prices and weather and health insurance premiums and family dynamics and when you market uncertainties when you really begin to tease this out they begin to say well we had no idea they get a window into the culture I guess I would say they kind of need to speak to us very well so to educate them


This is stock number 10386 we are here at Summit Automotive in Fond du Lac Wisconsin. You're new and used heavy-duty truck and ram headquarters. Today we are checking out this super clean 2017 Ram 2500 crew cab short box big horn black package. This truck has the 6.7 liter Cummins diesel and from this HD video you will be able to tell that this truck is extremely clean all the way around. This truck has been fully safety and inspected by our service shop. Has a fresh oil and filter change all the fluids have been checked and topped off and this truck is 100% ready to go. Brilliant black crystal pearl is the color we shoot all of our videos in 1080p 60 frames per second so if you have HD capabilities on your computer tablet or smartphone device turn them on right now because it is like you're right here looking at the truck with me and definitely your best way to check out the vehicle before seeing it in person. And if you want to check out more pictures of this truck in the upper right hand part of your screen is a link right to our website to check out all the photos. 20 inch painted alloy rims has red dirt road MT 35 by 12 and a half R20 LT tires with right around half the tread left. Frame and underbody looks really good. Didn't see any dents and dings on that front fender you get the blacked out headlight bezels. The only thing I saw on this truck is there's a little dent on the front bumper here but nothing too bad but it is a used vehicle and that's why we do the videos. Front bumper sensors you get the blacked out grille with the blacked out RAM logo and I didn't see any dents or dings on that hood. Passenger side fender is in excellent shape as well and the passenger side rim no scuffs or scrapes on there. As you go down this side of the truck you can see just how clean the body is how reflective and mirror like that paint is. We take these HD videos so if you are far away or even if you're close by and just cannot make the trip down you can still see the truck hear the truck and have confidence in the vehicle that you're looking at before you even get here so that when you do get here there's absolutely no surprises. To that effect we offer a Summit Auto Fastpass option on our website where you can apply for financing get pre-approved even appraised the trade all in the upper right hand part of your screen a link right to our website but you can pretty much have your entire deal done by the time you get here so that when you do get here you're all ready to go. Has all the remaining factory exhaust so it hasn't been altered in any way shape or form and all those little lower rockers look really good. Frame up here looks good back tires have just as much tread as the front tires and it does have that plastic wheel well liner which keeps your frame and under body looking great. Back rim no scuffs or scrapes on that that box is absolutely perfect very very clean rear bumper I didn't see any dents or dings on that and it does have the backup parking sensors. The big horn black package gives you the Ram stamp lettering on the back the black delt 4x4 logo locking tailgate back up camera the bed is in really nice shape just a little bit of light duty usage but nothing really bad nice condition back here tailgate shuts nice and solidly and as you go down this side the truck just as clean as that passenger side a little bit of road dirt there but very very clean down this side I didn't see any dents I didn't see any things and you can see just how reflective and mirror like that paint is very nice and clean for full disclosure this back rim no scuffs or scrapes on that very nice condition and down the rest of the side of the truck much of the same this one has the heated fold-out tow mirrors so they fold out like so and they also fold in they do have built-in directional signals in there as well and inside the big horn black package with the leather group gives you the black leather interior there are no rips there are no tears on the seats power driver seat with lumbar factory floor mats throughout this one does have auto headlamps power pedals and steering wheel can audio controls on the steering wheel power windows power locks and power mirrors and as we hop inside the truck here you can see that this one has 51,014 miles digital spinometer outside temp and compass display you get the heated leather wrap steering wheel no scuffs or scrapes on that cruise controls on the right bluetooth and information center controls on the left and audio controls on the back of the steering wheel comes with the six-speed automatic transmission the 8.4 3C radio AM FM and serious XM radio capabilities you do get your heated seats and cooled seats and heated steering wheel right here you can also check out your backup camera without even putting in reverse and then the thing about this radio is this one does not have navigation but you can add navigation to this radio and we can do it here at the dealership and it's $595 so if you want to have added to this truck see your salesman for more details and it's $595 to do that turned out four-wheel drive dual climate control factory brake controller you get your heated and cooled seat buttons down here as well as your heated steering wheel button if you like the buttons better than the screen stability control tow-haul factory exhaust brake and you can turn those front and rear parking sensors off has a 115 volt 150 watt plug-in passenger seat and floor mat are in really nice condition no rips or tears on that and the headliner is in nice condition as to got map lights up here power sliding rear window and you do get the 911 and assist buttons in the review mirror those are features of the vehicle that you never have to pay a subscription for we'll take a quick look at the back seats and then we will check out under the hood the back seats just as clean as the front seats no rips or tears back here it does have the latch child safety system for all your child car seat needs power slide and rear window these seats do fold up like so it does have a load floor back here so you put that down you got a nice flat place if you got pets or something you can put both sides down they got a nice flat place to lay if you got muddy boots or tools put them right on there you're not going to ruin your nice leather seats or if you got a lot of guys that go hunting if they got shotguns and stuff they got a nice flat place to lay their guns so that's that you got your receiver hitch reducer sleeve in here and storage underneath the seats and you do get two in-floor storage bins with removable containers for easy cleaning so you can put ice and drinks in there and it's like you have two many coolers wherever you go and this one does have the child safety locks on the back doors we will take a quick look under the hood and I would personally like to thank you for checking out the video today and hopefully from this HD video you will have been able to tell just how clean this truck is all the way around inside and out under the hood we have the 6.7 liter Cummins diesel engine base very clean runs very smooth like I said before this truck has been fully safe and inspected by our service shop has a fresh oil and filter change all the fluids have been checked and tapped off this truck has been gone through mechanically 100% for our state of Wisconsin inspection process and is 100% ready to go to see more pictures of this truck or one of our other 450 new and used cars trucks SUVs minivans Wranglers half tons three quarter tons one tons you name it we got it go to our website www.SummitAuto.com full pictures and descriptions of every single vehicle from two locations all at Summit Auto.com and if you'd like to check out more HD videos you can go to youtube.com slash Summit Auto remember to like subscribe and share on this video and all the videos that you see there in fact in a second you'll see a link to subscribe to our YouTube channel on your left he linked more have a duty truck videos like this one on your right if you've not been to our website on the bottom link to this vehicle on our website click those check us out and we really look forward to help you with this super clean 2017 Ram 2500 crew cab short box big horn black with the leather group thanks again


I rule the kingdom. You submit and serve me. Ladies and gentlemen, boys and girls of all ages, let me just say this. This is not even close for me. This is easily my favorite heretic. Now, I do cover a few of them from time to time and so you would think it would be difficult for me to be able to narrow it down to my favorite. Not necessarily the worst of the worst or the best of the best, but this guy is my favorite. You're going to see why. And the truth is that it really didn't require that much commentary for an actual believer to see this guy's foolishness, but let's see it anyway. It was shown to me that the Broncos are going to win this 2014 Super Bowl February 2nd.  I like that forecasting the future. So one of the future forecasts in the next few days is that the Broncos are going to win this Super Bowl that is about to take place against the Seattle Hawks or the Seahawks. I'm not abreast upon football. I'm not aware of a lot of things that go on there, but because sports is so huge to human beings in America, I believe God is also trying to show them that He knows the forecast of the future in every arena of life. Okay, so that prophecy didn't end well, did it? And you would have thought that after that miserably failed prophecy that you had just kind of gone to a corner and hidden out, but no, what does He do? Well, what does any good heretic do? You're going to double down and try to prove all the more, shout all the louder that I am from God. Now, a couple of things need to be noticed. One, this isn't an is this a low blow? Yeah, it is.  Nothing wrong with being bald, but more importantly, we are told how to deal with a false apostle. Now, it's not the Old Testament anymore. Not the Old Covenant where we have to stone them and kill them, but we are to at least shun them. The baffling thing is that how many people are still following this man.  False prophet is someone who do not turn people to God, right? What biblical site you said it's with the Bible? It's in the Bible. I can't give you all the scriptures right now. You don't know the scriptures? I do know them, but I can't give you pointing first. I got to go through the coordinates and show you where they are.  And I'm not being ugly. I really am not, but he is not the brightest. Remember, this is the guy who also believes there are 52 states. We have people represented in the 52 states. David Taylor believes that he has one up to everyone, but not just claiming to be a prophet or a possible no. He is touting these face to face means that he's had with the Lord, but it's over a thousand of them. And so he is the person who is in charge. He's the one that's left in charge by God. He's a chosen one. Like I would have never known the magnitude of who I am with the keys of the kingdom if it wasn't for me going online, watching them talk about me on social media. And then one of them said, they said, you know, he claims that Jesus appeared to him in a dream and gave him the keys of the kingdom in 1997. And he says, now, you know, if he was given the keys of Peter, the keys of the kingdom like Peter was, you know what that mean? Our Pope is really not the Pope. He's the Pope. He gave it to me.  Jesus came to me. So I started to realize I'm the Pope. I don't need no robes. I'm the Pontiff. I've been chosen by God to hold the highest rank out of all preachers in the world. The son of God came to me.  When they don't, they're disrespecting the highest order in the land, the Pope of the whole church universally. I'm the top head over the church universally. If a pastor come against me, no matter how big their church is, they got to shut down. They need my approval. I don't need theirs. Is that understood? So here, he, he places himself in the role of just under God. Now, I can imagine at some point in time he'll get so far out there that he'll put himself right there with God, that God is sharing all the power and all the glory with him.  Who knows what he's doing? Eating, watching TV is clearly not in his word, but he's playing it off as though he is in the presence of God, spending time with God. And then he talks about how, and this is really comical, how in doing such, he's now got this glow about him, which is the glory. Now, I don't know what kind of camera trick that he is, but he's trying to play this off as though that is the glory of God shining on him. And then I guess because he's not the brightest, he thinks that we're also not that bright. And as he prayed, the fashion of his countenance was altered and his raiment was white and glistening. Luke chapter nine, verse 29. This is remarkable. I'm so thankful for what God is doing while I've been in here. I just feel glory, glory. It's just surrounding me all over since I've been in here in God's presence. I just, it's been amazing the intimacy that I've been having with the Lord Jesus and also just his glory shining all over the place. So does he not know that we also can tell that that's the trick of the camera? It's just adjusting the brightness level to give you that little glow. But then I guess the camera wasn't cooperating because at the end the camera begins to auto adjust, I guess, or auto focus and the little glow goes away. Coincidentally, that glory has not kept him from keeping all of his hair. Not that it's a bad thing to lose your hair, but it might be time to let it go, brother. So he's the Pope. He's the new Pope. He's the one with the keys. He's the one who's in charge. I'm the inaugurated authority chief apostle of this generation. I rule the kingdom. You submit and serve me. That's his goal. His goal is to be in charge and to run people. His goal is to have some authority. I don't know what his childhood was like, but clearly he's making up for all the things that he didn't get as a boy. The disadvantages that maybe he's had. You can even go on YouTube and you can hear about how his wife has spoken out about him. The guy is, he's dangerous, but at the same time, he's also comical. Why people, why people stay around this guy? I just don't know. Paul tells us in Ephesians 511 that we ought to, one, take no part in unfruitful works of darkness, but instead expose them. And so that's what we're doing. There are still some people, amazingly as it sounds, who see this guy and don't run away from him or who are still a part of whatever he's got going. I don't want to call it a ministry, but are still partaking in it and are still buying his stuff and are still following him. And so Paul also tells us in Second Timothy that chapter three verse one, he says, but understanding the last days, there will come times of difficulty. People will be lovers of self, lovers of money, proud, arrogant, abusive, disobedient to their parents, ungrateful, unholy. Now I don't know anything about his relationship with his parents, but it would not shock me if he was just a disobedient child also, but let's continue. Heartless, unappeasable, slanderous, certainly, without self-control, brutal, not loving, good, treacherous, reckless, swollen with conceit, lovers of pleasure rather than lovers of God, heavy, and appearance of godliness, but denying its power. Avoid such people. Now I don't think he has an appearance of godliness, but some folks do and so I see that's why that is inserted in that passage, but there's nothing godly about this man. He is one of the most arrogant people. You would think that since even Jesus didn't speak this highly of himself, and we're talking about God in flesh, this man speaks very highly of himself. This man is, let him tell it, he is the best thing since God. No, not since sliced bread, because he probably invented sliced bread. I just don't understand people who know a man who has had this many face-to-face visitations and will not invest in buying the teachings that Jesus gave me face-to-face. It don't even make sense. You would think that being an apostle, a false apostle, a fake apostle, albeit that would be enough for him, but no, he really wants more than that. But let's just again go back to the scriptures and see what the scriptures say about somebody like him. It says in 2 Corinthians 11 13, he says, for such men are false apostles, clearly written about him, deceitful workmen, disguised themselves as apostles of Christ. And no wonder for even Satan disguises himself as an angel of light. This guy takes his cues from Satan. He wants to be more than what he really is. Now, there's not much to him. And so he wants to appear to be something more than he never really was in the first place. But this person now wants to equate himself, not just not as God, almost though, maybe one day, but in the same position in the office of God. And this speaks also about his horrible doctrine, because that's also one of the things that every false apostle, false prophet, false teacher, really any modern day prophet or apostle, they all have this in common. That's just bad doctrine. He was not, he was an apostle, and he was more than an apostle. He was a king. And he was more than a king. He was a God. Uh oh, I know I'm missing y'all. Y'all missed that. It's in the Bible.  See, then I have made you a God to Pharaoh. God made Moses a God. Moses began to operate in a God ram. When he was doing all that stuff, those miracles, that's not normal. Go to a prophet and see, can they do that stuff? The prophetic ministry can't even handle that kind of power.  That's the God power. When you split seas, when you turn water into blood, come on, y'all not talking to me. That's called the God ram. And so he takes it as though God was actually calling Moses a God. No, he said, you'll be like a God to him. But again, understanding the scriptures and being able to break apart the Bible or to actually the text properly. I doubt he's ever even heard the term exegesis, but that's clearly not only not his strong suit. It's, it's, it's the weakest area of him. Well, you can call fire from heaven. That's a God ship. And we only think of God as a person. God is not a person. God is a title. Satan is also a God. He was a son of what? God. So he's a little God. Satan is a God. This is what we're dealing with guys. Satan is a God, but it gets worse. Moses was a little God. Are y'all getting this here? He says, is it not written in your Bible that you are called little gods? The Bible in the New Testament uses the term God as a title, not as a person. So you see where he's going. He has to portray Moses as a God. He has to portray Satan as a God, because if they're gods, even someone as sinister and evil as Satan is a God, well then certainly the person who's been entrusted with the leadership of all the churches in America and in the rest of the world, certainly he must also be a God. Again, listen where he's going. When we say God, we only refer to a person, but you got to become more wiser and mature than that in reading the Bible. You've got to know that there's a ram just like there's an office of an apostle, office of a king, office of a prophet, office of a pastor, office of an evangelist or a teacher. There's an office called God and in that ram is different powers, just like a prophet has certain powers, an apostle has certain powers, a pastor has certain powers that the apostle don't and the apostle don't have powers that the pastor don't or the prophets vice versa. Do you understand when you move into that God ram, then you have powers unspeakable. You have the powers of a God and not of a prophet.  How utterly silly is it for him to say that God is not who he is, but it's a, it's a title. Well, okay, I'll go with that. It's a title, but now you're saying that it's an office. Clearly, we know that God is not actually his name, but it is more, more or less who he is. And it's also more than a title. But then you say that it is an office. And if it's an office, that means it can be occupied by someone and because you're so awesome, so wonderful, also deranged, that you can also occupy that office of a God. This is why he's my favorite heretic, because you can't make this stuff up. And I think he does. I think he sits around when he's away, kind of sheltering in whatever he's doing. And maybe he's been gone a while because of COVID. Now he's back out.   And let's see if people will buy it. And people are buying it. The sad part is the people that are buying it, they're going to have their part with him. And it won't be in heaven.  But if you do, after you stop laughing, then warn them severely to avoid this person. Now this man has had some highlights, some silly things that he has said that just make you just not just only cringe, but also just laugh. You can't fight me and win. When he put me on his lap, I saw him. And when he talked to me about the brain resurrection, that's what happens. That's why you got to have the God experience. And listen to me, indeed you will have. Now the God experience is different from having visitations from Jehovah. And that's what Jesus taught me in heaven, the God ramp. When God was inside him, he showed me not just the Father, him, Jesus, and the Holy Spirit. Because when I was in heaven, Christ showed me in heaven. He says, he let a spring come and he said, I'm going to show you what happens in the crusade. And he says, you will no longer just walk in your gift and power. You will walk in the God ramp. And so guys, now you see why he is my favorite character. He's not my favorite person. He's not a guyly person. As a matter of fact, if he does not change, I suspect that he will not. And if he were to change, I think it's going to be something severe and catastrophic that would happen to him that will cause him to realize, I'm not who I said I was. But absent of that, he will find himself in hell. He will find himself regretting everything that he's done. And the sad part is all the other people that have followed him, they'll find themselves with him there.  And the people that are there with you are some of the very folks that you helped to leave there.   And also that you are my favorite character.


a quiet but warm welcome for Mike Bostock everyone. Alright thank you. So if you've ever gotten frustrated trying to figure out why your code didn't work or how someone else's code worked um maybe it was my code and I'm so sorry. Uh you are not alone and this talk is for you. Um you know as Max mentioned for the last eight years or so depending how you count I've been building tools for visualizing information and the most successful outcome of this effort has been this D3 JavaScript library for visualization. I mean I've spent far more work than I expected on this uh when I made that initial commit um but I mean that in a good way I mean it's been really exciting to see what people have done with it. Um but there's a danger when you spend so long designing a single tool and that is that you may forget what the tool is for right the tool itself becomes the goal uh rather than the value derived from its application. So the purpose of a tool for visualization is to construct visualizations but what is the purpose of visualization? So in Ben Schneiderman the purpose of visualization is insight not pictures. This is actually an adaptation of a Richard Hamming quote which is the purpose of computing is insight not numbers. So the point here is that visualization is also a tool. It is a means to an end a means to insight a way to think to study to understand uh to discover uh to communicate something about the world. So if we only consider the task of constructing visualizations of assigning visual encodings then we ignore myriad other challenges finding relevant data cleaning it transforming it into efficient structures for analysis uh designing statistical analysis building models validating those models uh and ultimately communicating whatever it is that we learn in that process. And these tasks are often performed in code and coding is famously difficult. Even the name code suggests impenetrability right code originally referred to machine code is low level digital instructions sent to be executed by a processing unit and code has come a long way since that you know it's much more human friendly uh but it's got a long way to go. I kind of love this image I mean to me it's like the fantasy of the developer when they're writing code um but it's also a little bit strange because it's like it's a robot I mean why is the robot typing can it just like plug in and send the bytes directly to the computer it's like the robot is being forced to use the human interface uh rather than vice versa. Okay to give a comically dense example uh this is a bash command I wrote recently to generate a coruplet of population density of California the rest of the talk will just be this slide and I'm going to walk you through all 15 commands here um I I mean it's kind of funny I mean look look at this like what what is it doing exactly if you look at it and you think it starts with this geo to topo right this is converting geo jason to topo jason but that's not really where this program starts because that takes like this giant thing as input and then that command actually takes like these two things as input uh so there are multiple levels of nesting here uh there's like these weird sort of punctuation marks what do they mean uh there are these abbreviations like dash p and dash f and of course like the backslashes um and if you notice there's actually two languages here like this is not just bash this is actually JavaScript expressions that are awkwardly embedded within bash uh but this is you know this isn't machine code like from the machine's perspective this is extremely high level programming um but it's it's hardly natural language uh so Brett Victor gives this concise definition of programming programming is blindly manipulating symbols and by blindly he means that we can't see the results of our manipulation right we can edit a program we can rerun it we can diff the output but programs are complex and dynamic and so this approach is not really a direct or an immediate observation of our edit and by symbols he means that we don't sort of directly manipulate the output of our programs we operate in abstractions and these abstractions can be powerful but they can also be difficult to grasp um in other words or in Donald Norman's terms these are the Gulf of evaluation and the Gulf of execution okay but clearly some code is easier to understand than others and one of the things that I first think of in human code is spaghetti a spaghetti code code that lacks structure or modularity where in order to understand one part of a program you have to understand the entire program it can't be disentangled and this is frequently caused by shared mutable state right when you have multiple parts of a program that are writing to the same piece of state it becomes much harder to reason about what that state's value is and indeed how do we even know what programs do if we can't track the complete runtime state of a program in our heads then reading code is insufficient right so we use logs we use debuggers we tests but these tools are also limited a debugger for example can only show you the value of a few symbols at a single moment in time so we can't observe complex data structures or complex patterns of execution and in a way like we continue to have great difficulty understanding code and it's a miracle that anything works at all but despite these challenges we're still writing code you know for myriad applications and more than ever before and so why is that like are we masochists maybe are we unable to change I mean I think in part certainly some of us some more than others is there no better solution and in general and that is the critical qualifier no code is often the best tool we have because because it is the most general tool we have code has almost unlimited expressiveness so alternatives to code as well as higher level programming interfaces and languages can do well in specific domains but these alternatives must sacrifice generality in order to achieve greater efficiency within their domain if you can't constrain the domain it's unlikely that you'll find a viable replacement for code there is no universal replacement at least not while humans primarily think and communicate through language and it's hard to constrain the domain of science science is fundamental it's studying the world extracting meaning from empirical observations simulating systems communicating quantitative results and a medium to support discovery must be capable of expressing novel thought just as we don't use phrasal templates or mad libs for composing the written word we can't be limited to chart templates for constructing visualizations or a drop-down of formulas for statistical analysis we need more than configuration we need the composition of primitives into creations of our own design so if our goal is to help people gain insight from observation we must consider the problem of how people code Brett Victor I will quote him several times in this talk had the following to say about math but it applies equally to code the power to understand and predict the quantities of the world should not be restricted to those with a freakish knack for manipulating abstract symbols the point here is that improving the human experience of coding is not just about making your workflow more convenient or more efficient it empowers people to better understand their world so if we can't eliminate coding can we at least make it easier for humans with our sausage fingers and our finite sized brains to explore this question for the last six months or so I've been prototyping building this thing I call the integrated discovery environment d3 express and it's for exploratory data analysis for understanding systems and algorithms for teaching and sharing techniques and code and for sharing interactive visual explanations I do want to make visualization easier and discover easier but first we need to make coding easier now I cannot pretend to make coding easy the ideas we wish to express explain and explore maybe irreducibly complex but by reducing the cognitive burden of coding my hope is to make the analysis of quantitative phenomena accessible to a wider audience now the first principle of d3 express is reactivity rather than issuing commands to modify the shared state each piece of state in a reactive program defines how it is calculated and the runtime manages their evaluation it propagates derived state that's a lot of sort of technical words but if you've written spreadsheet formulas you've done reactive programming so here's a simple notebook in d3 express to illustrate this concept it looks a little bit like the browser's developer console except here our work is saved automatically so that we can revisit in the future and share it with others right so in imperative programming c equals a plus b is a value assignment that means it takes the value of a adds it to the value of b and copies that into the symbol c and so an imperative programming if the value of a or b changes the value of c doesn't update until you recompute that same addition but in reactive programming c equals a plus b is a variable definition which means that as here when I change the value of b from two to three the value of c changes to four if I change a from one to four again the value of c updates if I change b to be math not random again it updates so the point here is that as programmers we now care only about the current state because the runtime manages state changes and that's a small thing when you're only adding two numbers together but when you have larger programs this eliminates a substantial burden of course discovery environment needs to do more than add a few numbers so let's try working with data we're going to load d3 and because this is csvconf we're going to load a csv and now we want to see what that is so we can click and inspect but already there's some cool stuff that's happening here so one is that requiring d3 loading d3 and likewise fetching this data they're asynchronous operations now if you don't know what that is it kind of doesn't matter that's the beautiful thing about this because you can treat this reactive code as if it were synchronous code meaning that anything that depends on d3 in this notebook doesn't get evaluated until d3 is loaded and likewise any expression that you write that refers to the data won't get evaluated until the data is loaded and this avoids the sort of famous challenge of callback hell that you get with imperative asynchronous code so what does the data look like we can click we can inspect and just open it up here one of the things that you'll notice is that these fields they're all strings right so the date is a string and the close field is a string this is stock data for like the last five years or so of like Apple stock daily closes and in order to work with this data one of the things that we're gonna have to do is convert this from string type to a more precise type like we want to work with numbers we want to work dates so what I'm doing right now is I'm passing in this row accessor function to try to specify what those types are you notice when I go in here in d.close I put the little plus sign in front of that that is JavaScript's way of converting a string into a number it's the unary plus operator and the point here is that as I make that change you're immediately seeing what the result is so we're still doing sort of abstract symbol manipulation here but at least we're doing that less blindly because we're seeing the result immediately so we can do the same thing with dates except JavaScript doesn't sort of have native support for parsing this date format so what would happen if we just called a hypothetical function called parse time well we can call it and of course it returns an error because that is not defined it's not sort of a built-in primitive but this kind of phrase is another point which is that the errors that you see in these notebooks they're no longer global errors they don't bring your whole program to a halt the other cells that you have in your notebook can continue to run and these errors are temporary so that when I go in and I define parse time the error automatically goes away and so again this is one of the things that reactive programming gets you in terms of being more structured programming it's a bit like when your formula is in your spreadsheet they just say invalid value but Excel doesn't crash when you mistype the formula so here I've changed I've defined my date parser and now I have nice green dates in my data set and now I can start to ask questions of my data so I'll use D3 for that and I'll say D3 extent the data you know D dot date but this raises another point which is that I actually forgot to give the data set a name I give the data a name and then it automatically reevaluates that and this raises another interesting feature here which is that this notebook is now order independent because it understands the references between these cells you can write the code in any order that you want so I can refer to data up here in this cell but the data isn't defined until down here this is useful for sort of having a cleaner structure to your code it's also useful when you go to publish your results you want to communicate those with other people you have total freedom in terms of how you order the code and how you explain it you're not required to for example put all of your requires or your imports at the top of the file you can just let the narrative determine how you want to order the code so like the developer console the output of each cell is visible immediately below that cell but unlike the developer console we can have visual outputs so now I want to take the same data and make a little line chart out of it so I'm going to define the width and height and the margins for that is like three different variables then go up and look at our data the extents that we computed and turn those into domains of the scale so these scales is D3 concept and it's mapping sort of these abstract dimensions of data to visual encodings here like a position in X and Y so I'm just updating those definitions and once those are defined we can create an SVG element to contain the output of our chart I'm going to use the curly braces because this will be a little bit more of an involved definition than the other ones which are expressions so now I can sort of put more JavaScript code in here I'm using D3 select to do that and I've got this like DOM.SVG I mean the details aren't really that important but this is really just creating a SVG element of the given width and height and then returning that and that's sort of the basics that we're just working with like web standards here in vanilla DOM so the first thing I want to do for this chart is to make sure that my sort of dimensions of data look correct so I plug in the axis here and by default like an axis in D3 is going to be rooted at the origin which is zero zero in the top left corner and so I want to shift that down so that it's on the bottom of my chart so I go in here and I put the transform attribute on my G element and I give it the right sort of height minus margin dot bottom and so then that moves down it's a little bit off the screen here but you get the idea likewise I can make the left axis here for the Y scale and then put that on the left side of the chart. Okay so now we have our little axes and now we want to actually draw the data we want to see the data we're going to need a path element for that path elements in SVG require this D attribute which tends to be this complicated thing this is a whole like micro language in SVG for making these things we would don't want to do that by hand so there's a D3 line primitive and we're going to pass our data to that line function in order to construct the geometry for the chart so I'll do that now that's configurable again so we're going to pass in our X scale and the corresponding like value from the data so X and Y here okay so that shows up obviously it doesn't look correct but that's because paths in SVG are filled black by default and we want to stroke it for a line chart so again we'll go in here and we'll set the fill style to none and the stroke to blue okay so now we have a basic little line chart here with a few different cells okay but even though this is a basic line chart the program's topology is starting to become more complex so this is a directed acyclic graph of references within this notebook so this is showing you the structure of the program and this visualization was itself made in D3 express using graph is there's a command you can run to produce this thing so you've got the require at the top that's how you load the libraries it generates D3 and then we use D3 to make our time parsing function we also use that to parse the data and load the data we've got your width height and margins those feed into the X and Y scales and then basically everything feeds into the SVG node which doesn't have a name so it's just number 93 at the bottom so a few observations of this chart so one thing is that is now trivial to make this chart responsive right the width height and margins are constants as we've defined them but if we changed them so that they were the size of the screen or the size of the window then the chart would update automatically and likewise we can replace the data definition so rather than a static definition maybe we want a real time chart and so that's just a question of replacing that definition with another definition and everything else sort of falls out of it but I want to look a little bit more closely at the code here so you can get a sense of how this reactive programming affects your code structure so this is sort of like typical D3 code that you might see on Bloss.org and the idea is like I'm defining a scale here I would define the scale or I would declare the scale on page load and then I have to wait till the data loaded in order to set the domain and so there's a scale object here but really my definition of that scale kind of gets distributed throughout my program where I have a whole bunch of unrelated code here and this is obviously a very pared down example this is not a complete chart it wouldn't fit on the slide for one thing but you can already get a sense of like how the code ends up being harder to follow and more distributed because of the statefulness of this program whereas in reactive programming we can localize those definitions because it's now the runtime's responsibility to manage the order of execution and it knows that this X scale depends on the data and it knows that it depends on D3 and the margins and so we can just define it in a way that makes more sense and let the runtime handle it. Now the last thing on charts is that you don't have to use D3 in order to make charts in D3 express I mean it is called D3 express maybe that was a mistake but you know you can use Vega light you can use 3JS you can use whatever it is that you want all these things are just JavaScript and DOM so this is the same sort of data set put a log scale on the chart but this is using Vega light and to me this is also a really exciting opportunity because as you sort of make it easier for people to explore data sets you can also explore other of these more domain specific higher level abstractions and still have the benefit you get with the reactive programming. Okay so how about Canvas? I've got another notebook here and I want to make a globe so I've loaded D3 Geo and top of Jason and then the topology of like World County boundaries and I'm going to create a canvas element similar like we did with the DOM.SVG get the context from that and then we're going to draw a bunch of canvas commands in order to get the world to appear. So for that again you know you have this path object where you're passing in your geometry what is that well there's a D3 Geo path function which takes Geo Jason and turns it into a string of our sequence of canvas draw commands that requires a projection which for here we'll use an orthographic projection and so now it just appears so I'll take that and like let's say I wanted to draw the outline of the earth as well so for that I'll need a sphere object so I break that out to a sort of separate definition here plug that back in and so now we have a nice little globe here but one of the powerful features as I hinted at when we were looking at the directed graph is that we can sort of take one of these definitions or one of these variables like in this case the projection and we can replace a static definition of this orthographic projection and put in a dynamic definition so it's something that's animated let's say so here's the Mercator projection or equirectangular but now I want to make it so that it's a rotating orthographic projection okay so the way that I'm doing that I'm sort of like glossing over some JavaScript details here but this is this is a generator so I guess a lot of people haven't used JavaScript generators but I only like honestly discovered them a few months ago but they are remarkably cool for doing this sort of stuff you'll see how it works in a second basically it's a function that can yield a sequence of values so normally a function just returns one value but in this case like it can yield an infinite stream of values so this is going to create an orthographic projection and then just inside of a wild true loop it's going to set the rotation angles for that projection and then you get a rotating globe here tilt it a little bit because northern hemisphere specific so yeah so generators they're pretty cool now one of the things you may be wondering is like how does this work right like how how is it that the generator why doesn't it just go into like a why doesn't hang the page it's a wild true loop and the answer is that generators are a pole system so it's the runtime that's pulling new values from this generator at 60 times per second rather than it's sort of like pushing new values is whenever they get updated like skip ahead a little bit here now one of the cool things you can do in addition or you may be wondering like when you have these generators let's see you know what is it doing with the canvas and the answer is that it's just throwing away the canvas and creating a new canvas every time that it needs to draw and that actually works just fine in this example because it's not very expensive it's a pretty simple geometry that is displaying but obviously that's a lot of overhead and it would limit the sort of things that you can do so the thing I'm showing you now is that you can change that behavior by just accessing the previous canvas that you used and of course when you do that it starts smearing but you can add this clear command so that it's clear before you redraw and then you're fixing the line width as well and so the point here is that you can opt in it's loop now already too late I hope you got it you get this simplicity of the reactive model but if you want to like opt into a little more complexity you also don't have to pay the performance cost for that there's negligible overhead compared to what you would write in vanilla JavaScript okay so just to reiterate to look at the code a little bit this is our static definition of the projection and this is our generator which defines the rotating projection and so every time a new value is pulled from this generator it sets the new rotation angles based on the current time and then yields that value okay so generators are good for scripted animations but what about interaction well turns out we can use generators for those two it's just that our generators are now a synchronous and they yield a value whenever there's new input rather than just yielding it at a fixed rate so the first thing I'm going to need in order to make this interactive is I'm going to need a little slider and again this is just Dom so I'm creating input element type range with these values it's not hooked up to anything so of course like dragging that back and forth doesn't do anything but I'll give that a name and then we can define a generator that emits the value of that range slider so now I can see okay it's going from minus 180 to plus 180 as I'm dragging it I give that a name call that the angle and then we feed that angle into our projection rotation so now when I drag the slider it's now interactive right I can sort of spin the earth around now because this is a very sort of common case where you're defining a user interface and you want that to drive something in your code there's a view of operator which does exactly the things that I just showed you but it does it sort of within a single definition so there's the input slider that you're declaring here that's the user interface or the graphical interface and then there's the value of that which is the programming interface so that's the angle that the code sees to drive the projection okay so again this is the code so this is sort of like a long form where I'm declaring my projection and its rotation takes an angle that angle is derived from this range input and the range input it just goes from minus 180 to plus 180 and this is the shorthand form using the view of operator okay but we now have the ability to generate arbitrary inputs right this is not just sort of you're limited to sort of a fixed palette of a range slider and a drop-down menu in this case like I'm making this table and it's got like three sliders I'm making a color picker for the cube helix color space and I want this the output of this complex input to be a cube helix color instance so that's the code that I'm writing here which basically takes the values from the sliders it updates their corresponding output so as you're dragging it you can see that the hue angle is changing there to the right and then below that you can see this color object that's kind of the output of our interface here and then I'm using that to sort of set the background color of this div so the point is like you're just doing sort of DOM and HTML here but there's a really nice primitive for you to sort of hook that into the programming system into the reactive programming environment okay now for visualization this has sort of even more interesting applications so this is a histogram it's looking at sort of the price of 500 or so stocks in January 2012 relative to their price in January 2011 so you can see that there's a bell curve here and the mode of that is like slightly greater than one because of course like the average return on stocks tends to be positive but there's also a long tail where you have like stocks that did really well and you had stocks that did really poorly and if you wanted to know exactly what those stocks were in another environment you might have to write separate code in order to query that and look at the results but here we can augment this visualization with a little bit of interaction so that we can manipulate it directly and see the output so that's what I've done here is there's that D3 brush so I'm brushing on it and then this chart yields just like a range slider would except it yields sort of the data points that you've selected so just by brushing back and forth here and using the default object inspector I can see what these stocks are so like that's the price line group in some pharmaceutical which I assume they like I think they went public like at the start of this data set but the interesting thing for me is like all the ones down here on the left does anybody have any guesses what they are from 2007 so it was shortly before the financial crisis and so this is like e-trade financial and all of the other sort of like financial firms that basically collapsed and had to get bailed out by the government but it's cool that you can just sort of see that directly from this visualization here building it up incrementally okay just to show that there's no real magic going on under the hood here this is the code that I wrote to adapt sort of your standard D3 brush that you would write today to this sort of generator based system so whenever there's a brush event you can look at the selection and then you can use that selection to filter your data so picking the stocks that have a change value between you know the lower bound and the upper bound of your selection and then you're just setting that as the value and then dispatching this input event so that it triggers the update now normally in in reactive programming and in this environment your reactions are instantaneous but sometimes it's beneficial for them not to be instantaneous you actually want to observe the changes from one state to another state so similarly like we had with the canvas example we can use the previous value of the cell in order to define sort of your standard D3 transitions and using the data join so here I've got a stagger transition on the data on a bar chart and I've got a data set that I'm going to sort based on this like little checkbox here switching between this is descending frequency this is letters in English language and just lexical graphic order so if I click the checkbox here it's just running that same code and because it has access to the previous chart it's not throwing it away and it can just do your sort of standard D3 data join stuff in order to make an animation there okay so inline visual outputs improve our ability to inspect the program's current state but there's more that we can do with interactive programming to understand not just the current state but to understand the behavior of a program we can do that by poking by changing deleting and reordering code and seeing what happens and so in this notebook I've got sort of your typical force directed graph and I've got the simulation here which is driving the layout and by sort of commenting out the different forces I can see what effect they're having on the layout so I turned out the charge force and everything collapsed because the charge force is what's causing these nodes to sort of pull apart from each other likewise if I change the strength of that charge then it sort of all collapses on itself and that was because normally the charge is negative right so that they repel each other if you change them to be positive they're all pulling each other towards the center and there's nothing there's no equilibrium it just goes into chaos so I can tinker with the forces here I can choose like what's the right value I can play with the link force and turn that off to and it sort of explodes or turn off like the centering force just kind of floats away yeah so you probably seen little tinker toys like this before where you have a force layout and they're like some sliders like that gooey or whatever where you're playing with the parameters but the thing that's kind of cool here is that you didn't have to build any specific interface to do that it just sort of came for free with the reactive programming model just by tinkering with the code now a more explicit approach is to expose the internal state of our code as it's running so that we can study it with visualization generators can help with that as well so I'll give an example so this is just a very simple function which computes a sum of an array of numbers and what we can do is turn that into a generator so that basically means we put a star here and then we add this yield value and so now the idea is like we have an extra channel where we can emit information from our code and use that in order to construct visualizations or animations to understand the behavior of the code and that's important because it gives a cleaner separation between the implementation of the algorithm and how we study it how we explore it and so there are two ways we can call the generator like this so one is you just call it directly and then you get an animation just like we did with the rotating projection the other way is use this like little ellipses here in an array and then it's actually going to pull all of the values at once out of that generator and so you get a nice like static data set and you can then construct a static visualization of your program's behavior rather than just being limited to animations so obviously like understanding like a running sum isn't particularly interesting so I'm going to use like a more concrete example here we're going to get deep into computational geometry probably weren't expecting that at this conference but here it comes so this is D3's hierarchical circle packing layout it's a bit like a tree map except it's not quite as space efficient as a tree tree map but you can see sort of the structure of the hierarchy a little bit better so this sort of technique is commonly used to understand sort of like where your disk space is gone or how you're using a file system so in this case like this is flare which is another visualization toolkit and looking at the sizes of the different source code files organized by their package hierarchy so one of the tasks here is that you have to you have all of these circles and you want to pack them into a small place a small space as possible without overlap like huddling penguins and Antarctica and so your our job is to place circles one of the time until all of the circles have been placed okay since we want the circles to be packed as tightly as possible it's fairly obvious that each circle that we place must be tangent to at least one and actually two of the circles that we've already placed but if we just pick an existing circle at random as the tangent circle then we're going to waste a lot of time trying to place the new circle in this in the middle of the pack where it's going to overlap with the circles that we've already placed so ideally we only consider the circles that are on the outside of the pack but the problem is how do we efficiently determine which circles are on the outside so what D3 uses and other implementations of this layout use called Wang's algorithm and it maintains this front chain which is shown in red and that represents the outermost circles so when it's placing a new circle it's going to pick the circle on the front chain that is closest to the origin to the center and then the new circle is placed tangent to that circle and its neighbor on the front chain so if this placement does not overlap with any circle on the front chain then the algorithm can just move on to the next circle but if it does overlap like in this example here this black circle is overlapping with these other circles on the front chain then you have to cut the front chain between the tangent circle and the overlapping circle and it sort of like expands the front chain out and that way after you apply that process a few times the new circle that you place won't be tangent to any other circle so I find this animation a little bit mesmerizing and the moments I like are when the large circles kind of like get forced out of the pack there's like a very quick animation of only a few frames where they kind of get squeezed out but more than just being kind of cool to look at this notebook was extremely useful for me for fixing a long-standing bug in D3's implementation where very rarely it would cut the wrong side of the front chain and the circles would end up overlapping and actually I discovered another bug just last week with a different visualization here but it's been great so once you pack the circles you're not totally done you also need to compute the enclosing circle of that pack so that you can then repeat the process and the rest of the hierarchy and the conventional way of doing that is to just scan the front chain and picking the circle that is the farthest from the origin and that tends to do a pretty good approximation because these packs end up being roughly circular but it's not exact and I a year ago or so I discovered there's this other algorithm called Welsel's algorithm for computing the smallest enclosing circle in linear time and I think it's also pretty cool so I'm gonna show you how that one works so let's assume that we already have the enclosing circle for some circles and now we again want to do this incrementally we want to incorporate a new circle into the enclosing circle and that sounds a little bit circular that we already know the answer but it's like a proof by induction all right or any sort of like recursive process as you'll see but I'm not gonna give you like a rigorous proof of this it's not enough time and also I probably just couldn't do it frankly but I want to give you like an intuition so that you can get a sense of how this algorithm works so if the new circle is inside then we don't have to do anything we just move on to the next circle but again if the new circle is outside of our enclosing circle then we're gonna have to compute the new enclosing circle but we actually already know something about this new circle it's the only circle that is outside the enclosing circle and thus it must be tangent to whatever the new enclosing circle is which is in this case is this one so we don't really know yet what the other tangent circles are but we know what one of the tangent circles are and that means that we can apply this process recursively in order to find the other tangent circles okay so I'm glossing over a lot of geometry here there are also like boundary conditions that you have to worry about like you need to know what the enclosing circle is for one two or three circles and that last one is called the problem of Apollonius it has a cool math world page with lots of pretty diagrams but the point is like with a little bit of geometry combined with this intuition you can get a sense of how this process works and understanding that it's a recursive process we can now sort of see a more complete picture of this algorithm so the first one that I showed you was really just sort of the top level of the algorithm and now these are like up to four levels of the algorithm you can't ever get more than three tangent circles so that's why there can't be more than four circles that are drawn up here and as you are iterating over your circles and you find one of the circles that's outside of your enclosing circle I've said circle like 5,000 times it has to recurse it knows it has a tangent circle it has to move to the right so it's like heading one level deeper into the dream and then popping back up again until you finally get your results okay so in addition I'll show that again but in addition to showing how this algorithm works the algorithm gives a sense of how much time the algorithm spends or the animation gives a sense of how much time the algorithm spends at different levels of recursion so you can see that it converges very quickly on an approximate answer but when it encounters a circle that's outside it then has to rescan all the circles that looked at previously in order to compute the new enclosing circle so it ends up being more expensive when it finds a new circle that's outside in order to validate the new result so one way to write less code is to reuse it and the 450,000 or so packages published to npm attest to the popularity of this approach but libraries are an example of active reusability right they must be intentionally designed to be reusable and this is a substantial burden it can be hard to design an effective general abstraction just ask any open source maintainer in contrast implementing one-off code like you see in many d3 examples is much easier you're only concerned with sort of the task at hand and not some general abstract class of tasks so what I'd like to explore with d3 express is whether we can have better passive reusability sort of something in between one-off code and sort of nicely packaged up reusable code where by leveraging the structure of these reactive documents we can more easily repurpose code even if that code wasn't carefully designed to be reusable so what I mean by this is for starters you can treat your notebooks like de facto libraries so I don't know if you saw that but in this notebook here I've sort of defined a color interpolator this is like implementing terrain dot colors from R using d3 hsv it's just sort of used for elevation data or topographic maps sometimes so I've defined that in one notebook and what I want to do is use this color scale in another notebook and I haven't published that to npm but I can import that from the other notebook by just saying import interpolate terrain from the name of that other notebook and then I can start to use it and so this is nice for sort of reusing code that you wrote from another notebook I can also imagine this technique being useful if you for example you have a lot of different notebooks used for exploration and then you want to combine those together into your final write up you don't have to copy your code from those separate notebooks you can just import the symbols and then write around it and add extra explanation now more interestingly you can do rewiring of these definitions as part of the import process so I'll give you an example so this is a data set where I'm streaming data over web sockets and so whenever it gets a new event it's going to sort of like add a new datum to the array and shift the old one off so that it's a moving window again like the details of this code don't really matter I'm not imagining that people would write all of this code for all of their real-time datasets you'd probably have like an API or something to load these streaming datasets but I still want to show you that it's it's relatively straightforward in order to construct these using the generators so this is what the data set looks like it's just an array of 300 things and you can see that it's sort of shifting off representing sort of a recent time window here okay so now you saw from before we had a chart that did a line chart from before and so this data set I mean it's real-time but it's basically the same structure as our old chart so the question is can we reuse our old chart to show this data set and the answer is yes as you'll see so this is the chart that I've imported from the other notebook it's actually a slightly different definition using Canvas rather than SVG and so now all I've done is I added a little width clause here to inject our data into this chart definition so we're just replacing that definition and you can see that it's now a real-time chart that's sort of ticking as I get new data from the server without having to change anything else about the the chart definition but the cool thing is I can actually customize that chart definition a little bit more if I want to so I'm going to load D3 and one of the things that I want to do here is I want to fix the Y scale so that they don't sort of bounce up and down as the extent of my data changes I just want like a fixed value say it represents like what the expected values are for this data set and that way it won't sort of bounce up and down distractingly so in order to do that I need to import some other symbols I need to know what the size of the chart is but then after that I can inject my Y definition and so now the chart is got this fixed range and similarly I can do the same thing with the X scale so like let's say rather than again deriving the domain of the X scale from the data I just want to have like a fixed moving window so that it updates at 60 frames per second so I'll do that with the generator and here it's like a generator that emits the X scale where the domain of the X scale is based on the current time the import statement and inject the X so now it's it's smoothly sliding rather than ticking every update okay so the last concept that I want to talk about is that because these notebooks run in the browser and not in a desktop app or on the cloud it's a web-first discovery environment like all the computation and rendering happens locally inside the client so what does that mean well a web-first environment has to embrace web standards including vanilla javascript and DOM it works with today's open source whether that's example code that you find in a tutorial or libraries that are published to npm and it minimizes the specialized knowledge that you need in order to be productive in that environment there is some new syntax in d3 express for reactivity but I've tried to keep it as small and as familiar as possible such as by using generators so these are the four different ways that you can define cells or variables in d3 express and these are just expressions block statement the funky block statement preceded by an asterisk which means that it's a generator and then your sort of standard function declaration here and the idea is that by having sort of minimal syntax it's very different from let's say using a reactive framework where there's a lot of boilerplate sort of api that you're wrapping on top of your code here I want to make the reactiveness feel like a more of a language feature something that's intrinsic to the programming environment rather than a layer that you add on top of that and that's important too if you want to take this code and pull it out and put it into your react app there's not really anything that you have to remove in order to plug that in there you're just trading one reactive environment for another reactive environment so another important principle is that the web first environment lets you run your code anywhere right because your code is running in the browser there's nothing to install which means that it's easier for others to repeat and validate your analysis you didn't have to reproduce the exact environment or install the right set of packages in order to run your code if it's running in your browser it's going to run in your reader sprout browsers as well and that means that you can transition more easily from your exploration to your explanation you don't have to start over from scratch switching from one tool or one environment to another in order to communicate whatever it is you've learned in your discovery process so to keep a comparison to what's commonly done today you know we might publish a model or some data sets up to github and what I'm trying to do is to make this process a little bit richer to make it so that the ability for our readers to reproduce these environments and run this code is easier the bar is lowered we don't have to sort of read these long instructions in order to reproduce these environments we can just sort of run them directly and I'll end on like another sort of victor quote well I have a little bit more to say after this but the point here is making your code for analysis more portable can have a transformative effect on how we communicate so to quote Brett Victor again an active reader asks questions considers alternatives questions assumptions and even questions the trustworthiness of the author an active reader tries to generalize specific examples and devise specific examples for generalities an active reader doesn't passively sponge up information but uses the author's argument as a springboard for critical thought and deep understanding so the point is if the code is running in your reader's browser they have a much better ability to see how that code works to tinker with the code to change some of the assumptions that you make to fork it into another environment and start doing some new things or even just explore interactively because the code is again running inside of their browser okay now for the disappointment as much as I want to release D3 Express this is quite different from sort of library stuff there's a lot more work here when you're building a platform a service for people to use in addition to the software and so it's not really ready for you to go yet and start using it I was trying frantically to release a part of it by the time of this talk but it'll still be a few more days so if you want to try it out you can go to this URL and you can sign up for it you can also get in touch with me if you want to help me build it if you're also looking for a job also get in touch with me I would love help doing this so thank you