This lesson is on modeling, using separable differential equations, other types of models besides what you did in the last lesson. So let's just go straight to our different types of problems. The first one is an acceleration velocity position type problem. It reads, the acceleration on the moon, A, is negative 18 feet per second squared and at the time t equals zero, the velocity of a ball thrown up into the air is 45 feet per second. And the height at which it is thrown is 6 feet. What is the equation which models the ball's distance from the ground? Now if you've had a good precalculus background, you could figure this out right away and we will talk about that after we finish our total explanation through differential equations. So let's solve this. So we know that the acceleration is equal to negative 18 feet per second squared and we know that the antiderivative of acceleration is velocity. So the velocity equals the integral of the acceleration and of course that's the integral of the negative 18 feet per second. We take these antiderivatives and we get v is equal to negative 18t plus some constant which we will call c1. We have some initial condition here. It says when t is equal to zero, the velocity is 45. So when t is equal to zero, v is 45. So we'll put the 45 in and that will equal c1. The velocity now equals negative 18t plus 45. They ask us for the equation which models the ball's distance from the ground so we know the equation for distance is the integral or antiderivative of velocity. So let's take this antiderivative now and we will get s which is the distance from the ground. So s is now equal to negative 18t squared over 2 so that becomes negative 9t squared plus 45t plus a c sub 2, a new constant. We also know that the ball when it is thrown is 6 feet from the ground so we know s of zero equals 6. So if we put in a zero for t, we get 6 is equal to c sub 2. So our final equation is s is equal to negative 9t squared plus 45t plus 6. Now let's go back and think about what happened in pre-calculus and how this equation read in pre-calculus. It really read something like this, a general form for the equation. s is equal to negative one half gt squared plus v sub zero initial velocity times time plus the initial height from the ground. And if you had memorized this formula you did not need to go through all the differential equations for this. And using it for our problem it would be negative one half times 18t squared plus the initial velocity which is 45 times the t plus the initial height which is 6 feet. And again we get the same equation that we had before. So either way with this type of problem if you can go directly to the final equation, fine. If you need to develop it, that's fine too. Let's go to another type of problem. This one reads, a fish wildlife study shows that the growth of salmon population per month is directly proportional to the square root of the number of salmon. If the original number of salmon is 1500 and two months later there are 2,535, write the equation which models this growth. Well we see that this one is a square root type of differential equation. So let's try to solve that one. So if we use ds dt, the change in population is equal to when we do proportionalities, we're going to put the k in but this time it's proportional to the square root of the number present which we'll call s. We also know that s of 0 equals 1500 and we also know that s of 2 equals 2535. So let's go on and solve the differential equation and substitute in the values that we know. So ds over the square root of s, separate the variables, is equal to k dt. If we integrate both sides we get 2 square roots of s is equal to kt plus c. We can substitute our 0 in for t and find out what c is. So now c is equal to 2 times the square root of 1500 and we can take the square root of the 1500, take out 100 of that so we'll have 20 times the square root of 15 equals c. So this gives us now the equation 2 square roots of s is equal to kt plus 20 square roots of 15. Now we can substitute the 2 in so we can determine our k. So we have s is equal to 2535 and that is equal to k times 2 plus 20 square roots of 15. If we simplify our 2535 it really is a 13 squared times 15. So we can take the 13 squared out and multiply it to the 2 so we get 26 square roots of 15. We can subtract the 20 square roots of 15, divide all that by 2 to get our k. So ultimately we get k is equal to 3 square roots of 15. Put that back into our equation and we get 2 square roots of s is equal to k which is 3 square roots of 15. t plus our c which is 20 square roots of 15. If we want to go on and square this and divide by 2 we will get an answer of s is equal to 135 over 4 t squared plus 450. Again this is slightly different from the ones you have been doing because we have the square root of x as our original change in s over change in t. Let's go to another type of problem. This is a rate in rate out problem. It reads, a pool contains 35 gallons of non-chlorinated water. Water containing a 1% chlorine solution is poured into the pool at a rate of 3 gallons per minute. The chlorine instantly mixes with the non-chlorinated water and the excess is drained out at 3 gallons per minute. Write an equation for the amount of chlorine in the pool at any time t. So we have a lot of things going on here. We have water coming into the pool and then the water with the chlorine in it being drained out of the pool. So let's set up our differential equation for this. We know that there's some sort of change in the amount of chlorine and salt that enters the pool. So that's the sdt. And we have the rate at which it enters the pool which is the concentration times the flow rate. So that's this. And then we have it coming out of the pool and again that's concentration of salt. So we have s pounds of salt out of the 35 gallons that we have in there and then times the 3 gallons per minute. So this becomes our equation. dsdt equals 3 times 0.01 minus 3s over 35. Before we separate variables, let's factor out a negative 3. Remember we never want our variable to be negative on the right hand side. So we'll take out a negative 3 and we'll have s over 35 minus 0.01. Separate our variables. We'll have ds over s over 35 minus 0.01 equals negative 3 dt. So now we integrate and we get 35 times ln of the s over 35 minus 0.01 is equal to negative 3t plus c. We divide both sides by 35, that side, each term on the right hand side.  Raise e to each power and we get s over 35 minus 0.01 is equal to e to the c over 35 times e to the negative 3t over 35. Substituting our initial condition of s of 0 is equal to 35. We have a 35 here for the s and a 0 here for the t. This becomes 1 and this becomes 1. So both sides, 35 divided by 35 is a 1 and e to the 0 is a 1. So we'll have 1 minus 0.01 and that's 0.99 is equal to e to the c over 35. Putting that back into our equation, we have s over 35 minus 0.01 is equal to 0.99 e to the negative 3t over 35. Multiplying by 35 and putting the 0.01 on the other side, we get s is equal to 0.35 plus 34.65 e to the 3t over 35 with a negative of course in front of the 3t. This is our equation for the flow rate for this particular problem. This concludes our lesson on other types of differential equations.


It's now time for Member's statements. Member for Scarborough, South West is first. Thank you, Speaker. Speaker, vape devices and e-cigarettes are continuing to grow in popularity in Ontario and around the world. Originally marketed as a harm reduction product for adult smokers, more and more young people are taking up vaping, regardless of whether or not there were smokers in the past. Public health advocates have expressed concern that vaping is a new way to get youth addicted to nicotine, the active ingredient in cigarettes. In 2018, soon after the provincial election, this conservative government loosened regulations to allow advertisements for vapes and e-cigarettes in convenience stores and gas stations, despite numerous concerns raised at committee of social policies, and I was sitting there by experts and members of the public. Now the government is walking back this wrong-headed move. With the announcement that point of sale advertisements for vaping products will be phased out again by fall of next year. While eliminating point of sale advertisements is a step back in the right direction, we should go further. My colleagues, the MPP from Nickel Belt, has brought forward a private members bill calling for increased regulation on vaping, including a full ban on advertising and restrictions on flavors and the amount of nicotine in e-cigarettes. Vaping is a new phenomenon, Speaker, and the long-term health effects are not known yet. We simply do not have enough information to allow for it to be publicly advertised like this. So I'm asking this government to take a smart and educated approach to this public health issue and ensure that we keep vaping products out of the hands of the youth. Thank you, Speaker. Thank you. Member Statements and Member for Richmond Hill. Thank you, Mr. Speaker. Mr. Speaker, last Saturday I was hardened to attend the second Project Spotlight 2019 that was organized by Joy Beyond Vision Community across U-Hub and Brooker Team Insurance. This was an inclusive screening of Hong Kong documentary film, My Voice, My Life. It is directed by the Oscar-winning director Ruby Yang. The success of this free event was not just the great movie, but how it was presented that touched the audience and myself the most. Through the wireless headset systems, the movie was communicated to a group of visually impaired audience members. The group of young vocal talents from across U-Hub performed the live description. I was provided with a pair of tinted glasses to experience how much the visually impaired would have missed. After the show, the audience members broke down in tears because the audio description allowed them to fully enjoy the movie with the loved ones. This experience also touches the young volunteers from across U-Hub. They treasure what they have and how meaningful it is to support the people that need things the most. Thank you to Project Spotlight. Thank you, Member Statements and Member for University, Rosedale. Thank you, Speaker. Today, high school teachers are on strike across our province to fight for public education in our children's future. This government strategy is to try and divide parents and teachers to ram through these cuts. The parents are standing with teachers, parents like those in my writing who got together to start up a group called the West End Parents Network. I have a statement from these parents that they wanted me to read at Queens Park today. This is what it says. By now, it should be obvious that parents and families will not give up and they will not back down until this government reverses all the harmful cuts it has made to our education system. Last night, over 100 parents and community members crowded around the Sheraton Hotel as the OSSTF negotiating team waited the whole day for the government's bargaining team to turn up. Guess what? They didn't turn up. From stopping mandatory e-learning and restoring smaller class sizes, we know that teachers are on the side of parents and let me tell you we are united and we cannot be divided. We are so proud of teachers and support staff for standing up for our kids and we will keep up the pressure until a fair deal is reached, one that reverses the cuts to education and respects our kids and our education workers. As a parent, I am proud to stand up for teachers, for kids and for the West End Parents Network. And I encourage you to do the same. Thank you. Thank you. Member Statements to Member for Scarborough Agent Court. Good afternoon, Mr. Speaker. I rise today in the House to speak about our government's support to invest in Ontario's infrastructure. In particular, I want to mention the recent process that allowed community organizations to apply for funding through the investing in Canada infrastructure program, community culture and recreation stream. This allowed organizations in my riding of Scarborough Agent Court to apply for funding to help ensure that our community is a great place to live. I especially want to acknowledge and thank YMCA and United Way Toronto for spending months planning and applying to build the Bridal Town Community Hub in my riding. I know once completed, this project will have huge benefits for families in Scarborough Agent Court. Additionally, I have supported the Armenian Community Centre, Chinese Cultural Centre, Tamil Community Centre, Chinese Professional Association of Canada, and care first in the process of applying for funding through this stream. I know that they all submitted excellent applications that will have immense benefits to the families of Scarborough. I look forward to seeing all the projects come to fruition in the future. Thank you. Thank you very much. Member Statements. Member for Beaches East York. Thank you, Speaker. I want to introduce you to Cindy Shoot and the son whom she calls Sweet Ethan. Ethan is seven years old and Cindy is a single mum in Beaches East York. Almost a year ago, on the eve of a long-promised vacation, Cindy took Ethan to a clinic for a fever that wouldn't leave. It turned out Ethan had a brain tumor that quickly spread to his spine. Cindy and Ethan's lives turned upside down. In the months since, Cindy has had to become an advocate for gentler treatments for childhood cancers, for more funding for childhood cancer research, for a proton-beam therapy machine so kids don't have to travel to the U.S. as Ethan did to avoid harmful radiation long-term side effects. Cindy is lucky. She has a union job that allowed her to take time off to care full-time for Ethan and his sister. But without a go-fund-me and community support, she would not have made it through the year once her EI ran out. Government needs to listen to Cindy and to do better to support kids with cancer in their families. Cancer is stressful enough without worrying about how to keep a roof over a family's head and food on the table. Ethan, who has kept his sweet smile throughout the sordial and has been so very brave, is scheduled to begin his final round of chemo next Monday. As we head into the holiday season, I want to ask all of you to please send prayers and light and love to sweet Ethan and Cindy. May their next year be much smoother, healthier, and happier. Thank you, Mr. Chairman. Thank you very much. Member Statements, the Member for Perry, Southern Muscova. Thank you, Mr. Speaker. I rise today as we approach the holiday season to remind residents of Perry, Southern Muscova and all Ontarians of the importance of shopping locally. This is particularly true in smaller communities like the towns and villages in my riding. Buying your Christmas presents from a local store, manufacturer, or artist supports jobs in your town. Residents of Bracebridge have a great opportunity to support local jobs this year by shopping at a temporary location of Rich Hill Candles. Rich Hill Candles closed last year after a fire. While they wait for their main location to be rebuilt, they have opened a temporary store on Manitoba Street. Buying locally grown food for your holiday festivities supports local farmers like Curry's Cornered Farm in Huntsville and the Muscova Lakes Farm and Winery in Balla. Speaking of Muscova Lakes Farm and Winery, I want to congratulate them on winning the Excellence in Innovation Ontario Business Achievement Award this year. This is a prestigious award from the Ontario Chamber of Commerce. Buying locally produced maple syrup supports your neighbours who make maple syrup, and our area has a number of award-winning maple syrup producers. I want to take this opportunity to congratulate Mike and Sarah Clapperton of Loring on winning two awards for their maple syrup at this year's Royal Winter Fair, including the John David Easton World Championship. These award-winning businesses demonstrate the high quality of products produced right in our backyard, whether you're buying food, decorations or presents, I encourage everyone to give the gift to your community, shop local this Christmas. Shop local, thank you. Member Statements and Member for Timmons. Well Mr. Speaker, today I would say unfortunately the government has decided not to take bargaining seriously when it comes to what's happening today with bargaining with teachers across the province. The government is pretty clear, right from the outset, decided that they wanted to take a fight with teachers and teachers unions in order to advance whatever political agenda they had. And unfortunately the people that are caught on the crossfire are students across this province and parents. And I think that's rather unfortunate Mr. Speaker. We have a responsibility as legislators on both sides of the house and the government should take that seriously as well to be able to find a path forward to be able to resolve these issues.  But when you look at what's actually happened, the government has said we want to increase the number of classes we teach without teachers and instead we're going to teach by e-learning and we're going to increase class sizes. How do you expect first of all students and parents to respond to that? I don't think they're very happy. Students do not want to be in classes that are larger in size and are not interested by and large most of them to do e-learning. And when it comes to parents they know that that's not a good thing for their kids. And teachers are out there on the picket line today trying to preserve a public system of education that has served this province well over the past number of years and I think the government has to understand it has a responsibility to make sure to preserve that system as well. Next we have the member for Peterborough Corathon. Thank you Mr. Speaker. Since 1932 the Man Cup has been awarded as the National Championship Trophy for Canadian Box La Crosse. It's currently valued at more than $175,000 to replace that cup. And it finds its permanent residence in the Canadian La Crosse Hall of Fame. In September of 2018 I rose in this chamber to announce that the Peterborough Lakers major series lacrosse team had won their 16th Man Cup to tie New Westminster with the most national box lacrosse championships in Canada. Today I rise to inform the House that this past September the Peterborough Lakers did something that has only been done twice before in our country's lacrosse history. They won a third consecutive national championship and now stand alone as the winningest franchise in Canadian lacrosse history. This victory marks only the third time in Canadian history that a franchise has won three consecutive national championships. And I'm sure everyone here wants to know who the other organizations were. Yes sir. Well most recently in 1994, 1995 and 1996 the Six Nations franchise from my seedmates riding won three championships. The only other franchise to have won it three consecutive times. What's that? Wait for it. My own community of Peterborough in 1951, 52, 53 and a record setting fourth time in 1954. Since the Man Cup is coming back to Ontario this year I'm excited for a four-peat in 2020. Thank you very much. Member statements? Member for Kitchener Conestoga. Well thank you speaker. It's an honor to rise here once again and update the great constituents of Kitchener Conestoga on how this government is making a significant difference for Waterloo Region. Progress that would not be possible without the strong partnership that currently exists between this government and our local municipalities. A relationship that has always been a top priority of mine. I want to recognize Barry Verbanovic, Les Armstrong, Joe Nowak and Sandy Schantz, the mayors of Kitchener, Wilmot Wellesley and Woolwich respectively and also regional chair Karen Redman for their time and constructive dialogue on key issues since my election. With their help this government has advanced the interests of Waterloo Region by creating jobs, making key infrastructure investments and enhancing care for those who need it most. We have made significant progress on key initiatives including allowing fair and open tendering for public sector projects, protecting our rural fire services by eliminating discrimination against double-hatter and volunteer firefighters, approving the full slate of public transit infrastructure projects applied for by the Region through ISIP and expanding home seniors and midwifery care, giving the green light to the new St. Boniface School in Breslau and yes Mr. Speaker, expansion to GO train services getting us closer to two-way all-day GO. I look forward to continuing the partnership we've built over the past year so that we can maintain Waterloo Region as one of the top communities in this province to grow and prosper. Thank you, Speaker. That concludes our time for member statements this afternoon. Reports by committees. I'll recognize the member


Hi, my name is Band. I'm one of the co-founders of the Asingar project and I will be visiting Woodcombe from the 15th to the 16th of May in Bangalore this year. In my talk, I will give you a detailed explanation why you should favor Asingar over Nagus and what you can do with our new core Asingar 2. I will explain what the possibilities are with the new configuration format and how you can export data to LuxDish, Graphite or GreyLook very easily. In addition to that, I will give you a detailed explanation of our new classes deck which makes scaling, distribution and load balancing easy like never before. So looking forward to see you in Bangalore. Have a good day.


Thanks for coming. So this talk is called Understanding and Configuring Envoy Filters, a Practical Guide. My name is Peter Yaušović. I'm a principal platform advocate, and I work at Solo. I'm also on Twitter, or X. And if you have questions, I'll be here for the duration of the conference. So feel free to stop by and ask me questions on Envoy, or SDO at any time. All right. So before I go into the actual topic and the filters, I want to do a quick overview of Envoy concepts first, just to make sure we're all on the same page. So starting from the left on the image, we have the listeners. And Envoy, we can configure one or more listeners that listen on actually expose a port to which the applications can connect to and send requests to. Once the request is received, the request will flow through the different filter chains, and it's going to end up in the routes, in the routing rules. And in this routing rules, routing rules will decide where the request will end up on. So if we send a request from example.com slash API, and in the routing, we match on that host, and you match on that path, the routes will select a cluster, in this case, example.com cluster. So what are clusters? Clusters are a logical grouping of one or more endpoints, so just a collection of upstream Envoy services. Basically, Envoy can route the traffic to. If we do a comparison here to, let's say, pods and services and Kubernetes, we could say in a way that services or clusters and Envoy are similar to services and Kubernetes, and then endpoints and Envoy are similar to pods and pod IPs and Envoy and Kubernetes and Envoy. So to summarize, traffic flows from the downstream through the listeners, through the routes, ends up on a cluster, ends up on the upstream endpoint where the request is being sent to. So when the request is received on a listener, it has to be processed in some sort of a way, and the way that happens is using filters. The most basic filters in Envoy are network filters that operate on the stream of bytes, and if we have multiple filters, all of them can be changed together, and we call that a filter chain. Now, out of the box, Envoy comes with numerous network filters you can configure and use, so filters like MongoDB, Redis, Kafka, HTTP Connection Manager filter, and so on. So one of the most common network filters, and this is kind of a topic of my talk today, is the HTTP Connection Manager filter. So the HTTP Connection Manager filter, or HCM, is responsible for abstracting away the details of converting the stream of bytes into HTTP headers, body, and trailers for HTTP-based protocols. So the HTTP Connection Manager will handle HTTP requests, and this is where you can do and implement things, such as access logging. You can do request retries. You can manipulate headers, and so on. So the HTTP Connection Manager also has the filter-based architecture, and this allows us to build up and configure the HTTP filters into a chain of filters that operate on an HTTP request. Some of the examples of HTTP filters are course filters, course filter, rate limiter filter, external auth, Lua, RBAC, TAP, router, bosom, and so on. So there's a lot of them. Typically, the last filter in the filter chain of the HCM is a terminal filter, and typically that's a router filter. Now, when we talk about extending Envoy, what are some of the ways and options that we have if we want to extend Envoy? So there's multiple different options. You could decide to write your Envoy filters in C++. I'm not a very versed with C++, so that's definitely not an option for me, but you can build it in C++, and then you can package and build your custom filter together with Envoy, so you can create your own Envoy custom version. This is, by the way, what Istio does. So Istio has a custom build of Envoy that includes different filters. There's also an external processing filter, and this filter allows you, when configured, it allows you to make a call to an external service, and then that service goes and processes the traffic in some way, and it returns back, and it continues the processing in the filter chain. There's also LuaScript, LuaScript filter. This filter is self-explanatory in a way. It allows you to include a LuaScript in your filter, and that that LuaScript gets executed or can't get executed on either request or response flow or both. There's also the Wasm filter, HTTP Wasm filter, and this is where you would build your filter using Wasm. You would create a Wasm library, and then Envoy knows how to load the Wasm filter and or that binary and execute it as part of the flow. So this is all from the Envoy side. I'm more coming from the Istio side. So the question is, how can I do this if I'm using Istio or from the Istio side? And if we know, we know that Istio uses Envoy for its data plane, so it's all about Envoy's there, and basically all the options that I mentioned on the previous slides, they actually work in this Istio realm as well. You can use a custom-built Envoy proxy. You can use a LuaScript. You can use Wasm. The question is, how do you configure these filters if you're using Istio? Now, one way to do this, and a great example here is the Wasm plugin. So there is a dedicated API, Istio, called Wasm plugin, which allows you to deploy and configure, well, configure a Wasm plugin in Istio, but through this high-level CRD. There are other features of Envoy that are configurable through Istio CRD, so through resources like virtual services and destination rules. However, they're not dedicated to one specific feature or one specific filter in Envoy. Like, for example, destination rule can be used to configure multiple things. One of those things could be outlier detection or circuit breaking. Now, even with this, this leaves out a lot of features that are in Envoy that don't have a dedicated resource or CRD. So things like Lua filter, top filter, or pretty much majority of other filters that are available in Envoy. Now, to configure those features, there is a resource, a generic CRD, called Envoy Filter. And you can some sort of think about the Envoy Filter as a way to configure existing filters in Envoy, but also a way to patch the configuration that Istio generates. So how does an Envoy filter looks like? So there are a couple of things that you need to know before you go and start implementing and creating this. So first one is you have to answer the question of, which workloads or which proxies do I want to apply this specific patch to? So this can either be provided through a workload selector if you want to target specific workloads, or you can apply it namespace wide, or you can apply it mesh-wide as well. So once you have that, then you have to figure out, where in the Envoy configuration do you want to apply that patch? So for example, are you applying the patch to the clusters? Are you applying the patch to the listeners, to an HTTP filter, and so on? And then in addition to knowing this general area of configuration, you can also be more specific. So you can say, I want to apply this specific patch to all the listeners. But typically, you're going to say, I want to apply this patch to a listener on this board and with this name. So you have to configure or define more specific match conditions where you want to place your patch. So once you've located, once you have that pointer on the configuration, you'll have to pick out the operation, or how do you want to apply this patch? So there's multiple options. You can add configuration. You can remove it. You can merge it. Or you can use operations as insert before, insert after, insert first in case you're configuring something like an HTTP filter where order matters.  Finally, maybe the most important part, you have to configure what the patch is. You have to know what the patch is. There's a lot of things to think about, a lot of configuration to set, a lot of moving pieces. But it also requires you, or the operator of the mesh in this case, to know the underlying Envoy Proxy architecture, know the concepts and how everything works, needs to know how to read the configuration in order to be able to use this resource. Sometimes call Envoy filter also used to say that it's like a scalpel, because it's very sharp, and you can cut yourself really badly with it. You can mess things up easily. So here's an example of an Envoy filter. This one is for configuring a listener filter. Because I don't have a explicit workload selector defined, I am applying this configuration to the namespace, meaning to the workloads, actually the proxies that are running next to those workloads, in that namespace. The next section is telling us to where to apply this. We're applying it to a listener filter. But then additionally, we're also specifying in the match conditions. We're saying that we're applying this for sidecar inbound traffic. And then we're also specifying the details of the listeners we want to match. So we're matching specifically the listener with port 15006 and with that specific filter name. Next section is the operation. We're saying we want to insert the configuration before whatever the previous section is pointing to. And then lastly, we're actually configuring the filter where we specify the name and the type to config. So how do you go and configure an HTTP filter? So I've extracted a couple of things from that previous example. I'm going to talk about HTTP filters specifically, but the steps and ideas are very similar for listener filters as well. Now the first thing that's not on the slide because it's the easiest thing to figure out is where are you applying the filter? Are you applying it to specific workloads, namespace, or mesh? So I have left it out. That's fairly easy to figure out. The next one is to figure out the direction. So do you want the filter to process the requests at the gateways, at the Ingress gateway, or Egress gateway in the mesh? At the sidecars, or both, then if your decision is sidecars, then you have to decide whether it's for the inbound or for the outbound flow from the sidecars. Once you have that, then you have to be specific to define order. So you have to ask yourself, does it matter where in the list of HTTP filters is my filter placed in? If it matters, you have to make sure that you point to the correct section in the configuration. And this also tells you how to write that match portion. So if you want to run the filter as the first one in the chain, you would say insert start, or insert first rather. And then if you wanted to run it last, or before the terminal filter, you would point to the terminal filter and say insert before that one. And then finally, the filter again. And there are three things that you have to know here. These are the filter name, filter type URL, and then the actual filter configuration. So you have to know how the filter configuration looks like and all the different things that you can configure. All right, so I have a demo, but I don't know how I'm going to do this demo with holding a mic. So this is going to be interesting. I'll try to type with one hand. And before I do that, I might have Matt come over and he's going to be very nice and he's going to hold the microphone for me. I'm trying to stall a little bit now because I want to mirror the screen. Is it mirrored? It is, right? Perfect, all right, so I'm going to go here. And actually, I'm going to go here. So let me show you an example of how to configure the IP tagging filter. I figured this one is a simple enough to configure. And one note on the Envoy documentation, it's great, there's a lot of it, but it can be sometimes, for me, not an Envoy person, very hard to navigate. But anyway, I'll show you a way that you can extract the information that you need to configure your filters. So first thing that we said, we need filter name, we need filter type URL, and then we need the filter configuration. So reading about the filter, what this filter is about, you can get this on the actual filter page. And this filter page will also typically tell you the type URL that you need to know in order to configure this. So I'll just copy this. I'll place it here. I already have the full configuration set up because I'm not that confident in my abilities. And then in the v3 API reference, in the API reference page, this is going to take you to a new page. This is the page that will actually tell you the different fields that you can set for this specific filter. And additionally, it will also tell you the qualified name of this filter, which is another thing that you need. So I'll copy this one as well. I'll just paste it here. And then it'll magically transform into a YAML that's working. And then the other stuff here, this is the actual meat of the filter configuration. This is where you would go to figure out, oh, I need to figure out what this request type is. OK, so it's a type of request. And this is what I mean when I said the documentation is complex, because if I click here, it's going to drop me down on the page somewhere. So I have to figure out where I am. So I lose my original place. So OK, so this one has a default value. It's both for internal and external requests that I want to tag. So let me scroll back up. And then I have to set the IP tags. This is a required one. I have to set the IP tag name and the IP list. So this is a string. This is a cider range. So let me click here. This takes me to a completely different page. But anyway, maybe I'm over exaggerating here. But typically, what I do when I have to configure any filters, I open tabs for each specific link that I click. So I typically end up with 15 tabs open for one filter. And then I have trouble figuring out where I am and where I should go. But it's something that I was planning to do in the Envoy configuration. It would be so much nicer if every filter page had the name of the filter, had the type URL, but also an example that shows me, here's the basics of the basic configuration just to get you started. And then if you're typically going to have to go and dig deeper, but it will just make it easier. So anyway, so I have all these things. And I'm going to magically switch back to my created configuration already. So I'm calling this filter IP tagging. It is an HTTP filter. I'm applying it to Sidecar Inbound. I'm matching the port number 80, because that's where my HTTP bin pod is listening on. And then I'm specifying a filter chain. I'm specifying HCM, HTTP Connection Manager. And then I'm specifying a subfilter. So I'm saying, well, within that HTTP Connection Manager points to this last filter in the chain. So router is the terminal filter. And then I'm saying, I want to insert something before that filter. So how do I do that? I use that name that I copy pasted. I specify the type URL down here. And then under the values, I'm actually pasting and we're specifying the configuration for that filter, which is very simple. And it's saying, my IP tag name is helloonvoycon. And I'm going to apply it to all the IP addresses. And what is this? Are you OK? Bless you. So what this filter does is it will set a header called exonvoyiptags with the string, with the helloonvoycon. So let's do this. I have a Kubernetes cluster running. I've installed this here already. Everything is here. I don't have to pull any images anymore. So I'll just apply this filter. So this was created. And if I curl to my HTTP bin service, if I curl again. There you go. So we should see the exonvoyiptags, helloonvoyapplied, meaning I successfully applied my envoy filter. So this was a quick demo. And then I'll switch to, what's my time? Five minutes. Perfect. Perfect. If I can find my slides. There you go. And I can hold my mic. Thank you very much. So it's Matt. Thanks, Matt. All right, so last, I have one last slide. And this is just a collection of different, I guess, tips, maybe, what things to keep in mind while you're configuring filters or if you're configuring filters. I've mentioned the extensive documentation. Everything is out there. Like everything is documented, more or less. It just requires 15 plus tabs and a lot of clicking and then figuring out how to pull everything together. Another tip, especially coming from Istio, is just to minimize the moving pieces. Pull down the Docker image for the Envoy proxy. Configure the filter directly in that Envoy proxy for that. Write the configuration.  But you take out the moving pieces of the Envoy filter and Istio. Third one, I'm pretty sure at least 90% of you were bit by this at some point, the indentation and YAML. So tip here is you can use JSON as well. That makes it maybe easier to read and you're probably not going to mess up the indentation. Also, for some of the filters I've mentioned, there's no examples necessarily on how to configure them. My trick is to, first off, try the docs if the examples are not there. Go to GitHub and search for that type URL. I would say in a lot of cases, someone else has done the great work of configuring that filter for you and they decided to share it publicly. So you can take a look at their configuration and use that as your starting point. Also, Envoy proxy unit tests. There's a lot of stuff in there as well if you're having trouble with that. Next one is specific to Istio. Not all filters are included in Istio's proxy build.  And I was like, I'm going to configure this in Istio. And it's like, well, it's not included. So it's not included in Istio's build, so make sure you check that. Next one is Istio CLI, specifically the proxy config sub-command. If you're working with Istio and if you're doing any Envoy filter stuff, or just in general, if you want to look at the configuration, proxy config followed by bootstrap, clusters, routes, listeners, or all will give you a nice table view of the configuration and all the configured values. Or you can also get the YAML or JSON, if you want, and dig through the configuration like that. And then lastly, one of my colleagues wrote this tool. It's an online tool you can go to, envoyui.solid.io. And it's just a nice way to, if you have a full Envoy config dump, you can upload the file, and it's going to show it in a much easier to read way versus sifting through it in NBS code. Thank you very much. This was my talk. If you're interested, if you have any questions, I don't know how we are on time, but I'll be around here for the whole conference. Stop by, ping me, contact me. Cool. We've got a few minutes now. If anybody wants to ask a burning question, bonus points if you use the question mic. Should I go closer to the door here or no? Thank you, sir. There's a question. I've had recent experience writing Envoy YAML, and I found that GitHub Co-Pilot is pretty good at writing boilerplate, so it'll take a lot of pain out of that. That's a, yeah. It won't get it right, but it'll get it close enough, but then you go read the docs. Yes. That's having to start. That's a good point. So GitHub Co-Pilot, really good at YAML and replacing you searching the GitHub and figuring out the thing. Yeah, that's a good one. Awesome. Well, thank you very much. Hope you have a great rest of the day and the conference. Thank you, Peter.


Item number SCP-1881 Object Class Safe Special Containment Procedures SCP-1881 is to be kept unplugged in a regular storeroom, direct testing of the items restricted to D-classes, which are to be interviewed weekly regarding potential after-effects. Description SCP-1881 is an arcade machine of early 80s design. The design is consistent with the ██████ brand, but most identifying marks on the casing have been removed or painted over. A joystick and a single button are set on the console. A similar setup for a second player appears to have been removed. The machine's internals are ██████ resolution of 256x224 with 16 colors. The machine is functional even though the hardware appears to be partially damaged. The screen frequently displays rendering glitches, a good section of the game's images and text are corrupted, and the sound often cracks in the storts. The title screen does not display a title or any credits, only the phrase, Insert Coin. The machine works for a standard United States quarters and only one quarter may be used at a time. Once a quarter is inserted, SCP-1881 launches its game, termed SCP-1881-B. SCP-1881-B is divided into stages, each of which has different rules of gameplay and which succeed each other apparently at random. Commonly seen stages are ████ Spaceship. The player controls a spaceship under siege by an alien horde. Maze. A humanoid player control figure moves around a maze chased by bats or dragons. The goal is to acquire as many golds as possible before leaving the maze. Insect. The player avatar is a diminutive insect-like creature that must work its way up a large structure while avoiding spiders and frogs. Drive. The player controls the car driving a curvy road while avoiding obstacles. Lines. An abstract puzzle game where the goal is to push lions around a field so as to surround bouncing balls. Jungle. The player avatar is a human movement through a forest-like environment populated with thematic enemies and obstacles such as crocodiles, snakes, and quicksand. Other stages appear more rarely, offering various skill and or strategic challenges. Notably no luck-based games appear to be represented, nor sports games where the opponent is of equal strength to the player. The stages themselves do not play in the same way when seen again. Enemies increase or decrease in number. The player's movement and abilities change and obstacles vanish and reappear. Several cases include the Spaceship stage appearing with no enemies whatsoever don't entity visible on screen with the player's ship floating in empty space. The stage continues for about three minutes before the game declared stage clear. The insect stage not documentized from the player upon death, instead keeping the character's corpse on the screen, reaching the top of the construction required assembling a mountain of the character's own corpses. The jungle stage is scenery being upside down except for the player character who fell off into the sky. The jungle stage featuring ██ as enemies. The maze stage having no exit, no power-ups, and progressively larger number of enemies until the player was overwhelmed. About 30% of SCP-1881 players report lasting psychological effects afterwards, in the form of nightmares related to its contents and occasional visual auditory hallucinations. A common complaint is hearing sounds from the game when unaccompanied and in quiet areas. One interviewed case who had accessed SCP-1881 before it was contained reported his home video game console would occasionally launch SCP-1881-B instead of whatever game was inserted. Note, SCP-1881 was recovered in ██, 1982 from an arcade in ██, Iowa after a string of unexplained deaths of 17-agers mostly males called to Foundation detention. All the victims died in their sleep, of respiratory arrest and or cardiac arrest. None of the victims suffered from life-threatening conditions beforehand. Only two of the victims had a family history for heart conditions, and one for epilepsy. Of note is the names of five of the victims' match initials in the SCP-1881-B's high score screen.


When I first entered the program two and a half years ago, I was all excited. I rode the train from Baltimore, bright-eyed with my Baltimore Orioles hat on and my little backpack filled with my thousand-page novel. I hopped out of the van and on to Enders Island, feeling such joy with my new friends. I went... Not funny. I went over to Michael White and he shook my hand and he said the four words that instantly deflated my over-inflated balloon. He looked at my O's hat and said, and I quote, I'm a Yankees fan. My friends, I consider myself a tolerant man. I have befriended radical Republicans. I have embraced old communists. I've even had discourse with diehard jihadists. But a Yankees fan is asking a bit much. Anyway, I will try to put that unsavory aspect of an otherwise decent man aside. Michael White is the author of 45 or so published stories and six novels. A brother's blood, a blind side of the heart, dream of wolves, garden of martyrs, beautiful assassin and soul catcher.  When I first read the summary on the flap, I thought, how on earth is this 21st century Yankees fan from Connecticut going to write about a 19th century slave catcher? And I must confess, he pulled it off. In the character of Augustine Cain, he captured the complexities of a down-and-out southern gambler and slave catcher. And I tried, but I was unable to find any fault in his characters. So, I started looking at geography. I know every ridge and creek and battlefield between Harrisburg P.A. and Harpers Ferry, between Baltimore and Cumberland, Maryland. And I will say that he got every single wrinkle of the land perfect. Every nuance of this book rings true and shows both sides of a rather difficult period in our spotty history.  Ladies and gentlemen, Michael White. I am a still Yankees fan. I'm still a Connecticut Yankee and I faked all that. So, forget about all my research stuff. Thank you, Fred. That was great. What I decided to read tonight, but before I do that, I'd like to dedicate this reading to all the students I've had in the NBA. The students I've had in the MFA over the last six years. So, I want to thank you, and this is for you. Just a brief setup. I decided to read, not the new novel I was writing about Germany in 1936, but from a novel I finished a while ago called Resting Places. It won the 2014 testing prize and it'll be published sometime next year, this year. It's about a middle-aged woman named Elizabeth who lost her 21-year-old son, Luke, in a car accident during a cross-country car trip, another road trip. He died in New Mexico, though he had told his mother and father that he was heading out to San Francisco. I need to set up a little bit because I'm reading from the middle of the novel, Chapter 11. Elizabeth has had lots of questions about the facts surrounding her son's death, including inconsistencies in the police report, as well as the fact that Luke called her on the night of the accident and said he needed to talk to her about something presumably important. She didn't take the call because she was with her lover that night, which, as you can imagine, just compounds the situation and adds a great deal in addition to her confusion, a great deal of guilt to the situation. She has spent the past year since her son's death, drinking too much, pulling away from her husband, Zach, and obsessing about the accident. She has tried to piece together where he went on his trip using credit card receipts and reviewing his phone records and calling people he contacted and might have talked to in his last few days. Based on a chance encounter with a stranger she met along the highway, and that's the chapter I read a couple of years ago, Elizabeth has decided to drive cross-country, following the route her son took out to Mexico, hoping to understand more about her son's death. She's also stopping at various discansos, which is the Spanish word for resting places, and those are those roadside memorials that you see everywhere. The last few years of her life, she and Luke had not been at odds. He had been distant and moody and sullen. And as chapter 11 opens, she has been on this road trip for a couple of days, and she had left in the middle of the night. She leaves from Connecticut, right around this area, in fact. The previous night to this chapter from the motel room where she stayed, Elizabeth had a troubling conversation with her husband Zach about Luke's death, bringing up a new and troubling possibility that has recently occurred to her based on her trip. What if the accident wasn't an accident? What if he had meant to end his life? Zach told her such an idea was crazy. Why couldn't she just accept that their son's death was simply something that happened without a sinister purpose or darker meaning? In passing, he casually mentioned to Elizabeth that their son had seen his ex-girlfriend, TJ, that summer, and he had mentioned it to the father, and Zach mentions it to his wife. As the chapter opens, she is leaving the motel room and getting ready to continue her journey. Chapter 11, resting places. The storm, having spent its fury, the morning stretched out with a haggard and introspective demeanor, like one waking after a debauched night of revelry. Leaves and branches littered the road, debris was thrown over the parking lot, and up near the motel office, a garbage can lay overturned, a tree of brazen crows gorging themselves on its contents. As Elizabeth opened her car door, they took off, squawking vociferously. Stuck to the windshield was a newspaper flyer. She had to peel off like the skin of an onion. She picked up the highway and continued west. Her conversation with Zach the previous night returned to her. You're grasping at straws, he said. Perhaps she was. Perhaps all of this was just a matter of grasping at straws. She thought too of what he told her about Luke seeing TJ that summer. Had her son started dating her again? There was that one brief phone call Luke had made to TJ while he was on the trip. It was odd that these seemingly inconsequential and desperate facts surrounding her son appeared to have such significance now, such import and nuance. They were like the dots she felt she needed to connect in order to understand the picture surrounding his death. Elizabeth warned herself not to do what she was contemplating, but lately she hadn't heeded her own warnings. Lately warnings seemed made for others. She felt reckless and irresponsible. Her only law being whatever would illuminate Luke's end. She took her outer cell phone and looked up TJ's number. After several rings, the young woman's familiar voice came on. Hi, this is Tess. I'm not here right now but leave a message and I'll call you back. Ciao. Elizabeth was surprised to hear her user first name instead of her initials. In fact, she wasn't even sure what the J stood for. She had always just been TJ. The voice brought back a painful flood of memories of the girl who used to sit in the den with Luke, eating pizza, watching TV or studying for a test with her son. Her girlish laughter fluttering in the air, filling the house with joy. She missed TJ. Missed even more how her son used to act when he was around her. Happy, carefree, vibrant with life. Elizabeth hadn't seen the girl in nearly two years. She'd run into TJ's mother at the dry cleaners in town a few months before. It was an awkward meeting. They both smiled too much and Mrs. Pearson acted as if Elizabeth was 80 and hard of hearing. She spoke too loudly and rest her hand patronizingly on Elizabeth's wrist. When Elizabeth asked how TJ was doing, the woman said her daughter had gotten a job up in Boston at the Fine Arts Museum. Now when it came time to leave a message, Elizabeth thought, No, this is all wrong. Why disturb the poor kid needlessly bringing up such past sorrow? Elizabeth hung up without saying anything. That day she drove the length of Tennessee, a seemingly endless parallelogram of rolling hills, cattle and horse farms, shimmering lakes dotted with homes, and massive tourist signs advertising the likes of forbidden caverns, Opryland, Graceland, Gatlinburg, the Johnny Cash Museum, the Jack Daniels Distillery, and Baptist Church after Baptist Church. One sign in particular caught her attention. Set off the highway along a sloping pasture populated by black Angus cattle, it proclaimed simply inexplicably, when you die, you will see God. Beneath the words appeared what seemed to be a spiky red EKG line, jumping up and down with life until finally flat lighting under God's name, presumably indicating death. Like the life insurance sign she'd seen the first night on the road, this one too seemed a hard sell technique of the most overbearing kind, though she wasn't sure what was being marketed other than simple fear. She passed signs for small towns with hoaking sounding names like Crab Orchard, Helen's Gap, Carthage Junction, Horse Corners, Bear Hollow. She listened to the lulling twang of more country stations while drinking Red Bull to stay awake and munching on trail mix. Around two she stopped and filled up with gas and bought a dry as cardboard sandwich at a convenience store to blunt the dull call of hunger. The storm had ushered in its way cooler, drier weather. She could smell the change in the air, a clean sharp odor like ammonia. Sometime later she found herself passing through a broad valley framed by low humpback hills in the distance and immediately on either side of the interstate, green pastures plowed over fields an occasional stand of pine woods. Twilight was coming on fast. Some cars in the opposite lane already had their lights on and she was reminded to turn hers on as well. She thought again of what Zach had told her, how Luke had seen TJ that summer. Maybe the girl had some inkling of where her son's mind was, what he was thinking before he died. Elizabeth decided not to heed her earlier warning. If there was a slightest chance TJ could shed some light on her son, she would take it. She didn't want to leave any stone unturned. So she called again and got the recording. This time though she left a message. Hi TJ, she said. She didn't use text, that wasn't the girl she knew. It's Mrs. Girlacre, Luke's mom. How are you? She paused for a moment then added, do you think you could call me when you get a chance? Perhaps if she hadn't been on the phone, perhaps if she'd been paying more attention to the present, instead of poking around in the cluttered debris of the past, she'd have seen it a second earlier and had a chance to swerve out of the way to avoid the unavoidable. A sudden streak of brownish gray appeared just ahead and off to her right in the headlights periphery. It had bolted from some woods near the shoulder of the highway and appeared to fly effortlessly into the tunnel of her headlights. It was upon her, or rather her sob and the brownish gray object seemed to meet at the intersection of their respective trajectories as if there had been some intentionality to their separate movements and unstated agreement to be joined at exactly that point in time and space. Elizabeth felt helpless, didn't have the slightest chance to do anything. Hit the brakes, swerve, tense herself for the impact, utter a sound. There was a nauseating thwunk sound. A deep bone breaking clatter as the deer's left flank collided with the right front of Elizabeth's car. She felt a jolt in her shoulder blades, then felt herself being thrown forward and her nose slamming into the steering wheel.  In the next moment, not so much in slow motion, as in a series of distinct still frames, the creature was first suspended upside down over the hood of the car, antlers pointing earthward, then flattened against the windshield with an ear splitting. And finally, in the rear view, lying crumpled along the shoulder of the road. This all happened so fast, Elizabeth hadn't even had time to be frightened. Looking through a windshield, it now appeared as if glazed over with a thick sheet of ice. She instinctively tried to steer the car toward the shoulder, toward a shoulder of the road she couldn't see. Even then, she could tell something was terribly wrong. The steering wheel fought her like some sort of headstrong beast, felt as if it wanted to keep the car going straight on down the highway, and she had to use all her strength to bend the wheel to her will. When she'd finally managed to pull the car to a bumpy stop on the shoulder, she sat there for a moment trembling, her heart wrapping fiercely in her chest. Now she had time to be afraid. Damn, she cried at last.  With the light from her phone, she saw that the right front fender was stove-in, the bumper and grille crumpled, the headlights smashed, and the assembly dangling like in a nucleated eye. Her car appeared as if it had tangled with a Mack truck, rather than a single frightened deer. It was only then that she became aware of a throbbing in her head. She reached up and touched the bridge of her nose. The nose itself was mostly numb, but when she removed her hand or fingers or cover with something slippery and dark, she was bleeding. Walking back to the car, she glanced up the highway and saw in the headlights of the oncoming traffic the still lifeless form of the deer lying stretched out along the shoulder. She thought of heading back and seeing to the poor creature, though viewing its broken and bleeding form up close would probably be the last straw. She couldn't bear that. So instead, she got in her car, avoided looking in the rear view mirror. God, what would she give for the pint of cutty sark to be waiting for her in the glove compartment right now? She dialed a triple-A number. I just hit a deer she's exclaimed to the operator, shaking. First things first, the woman said. She had a high-pitched, twangy accent and the smoker's raspy voice. Are you all right, ma'am? Mostly, yes. Is the vehicle drivable? I don't think so. I don't know. The operator took Elizabeth's information and where the accident occurred.  But we're awful busy tonight, ma'am. I'm on account of the storm yesterday. I'm out in the middle of nowhere, Elizabeth explained to the woman. And it's going to be dark soon. Like I said, we'll have somebody out there as soon as we can, the woman advised. In the meantime, you all want to lock your doors and stay in the car and don't talk to strangers. Don't talk to strangers, Elizabeth thought, as she hung up. Yet she went ahead and locked the doors and sat way up in the seat to look formidable to any would-be attacker. For companies, she listened to the radio. When Freddy Fender's wasted days and wasted nights came on, Elizabeth couldn't fail to appreciate the irony. She'd been waiting there for nearly an hour when her cell finally rang. Jesus, it's about time she cried, ready to give the toke truck guy a piece of her mind. This is Girlacre, a hesitant female voice replied. Immediately she recognized it. Oh, TJ, I'm sorry, I thought you were someone else. How are you, Miss Girlacre? I'm fine, Elizabeth replied. Well, not so fine, actually. I've just been in a car accident. Oh, my goodness, are you okay? Yeah, I just hit a gear. I'm waiting for the tow truck. The conversation struck Elizabeth as peculiar. He or she just killed a deer, was stranded along some highway in Tennessee. While she was talking to her dead son's girlfriend, ex-girlfriend, can I do anything, TJ asked, and call anybody for you? No, I think I'm all set. The tow truck should be here any minute. Thanks for getting back to me so quickly. Your mom says you're living in Boston now. Yes, working at the Fine Arts Museum. That sounds exciting, Elizabeth said. Not really. Not unless you consider a leading first grade tourist exciting, she said with a self-deprecating laugh. The laugh was so familiar. Elizabeth had an image of her sitting on the couch with her son. Her sandy blonde hair tied in a loose ponytail, her hand touching Luke's flannel-shirtered arm. The first girl her son lived, perhaps the only girl. Still, it's a start, and Boston's a great city to live in, Elizabeth offered. It's a lot more exciting than Gar's Point. Another laugh to which Elizabeth joined in nervously. Laughing caused her nose to ache. You go by test now, huh? Yeah, sort of. It sounds more professional, but you still can call me test. So how are you? I'm good, the young woman replied, busy. This was followed by a pause, awkward and weighty, which made Elizabeth wonder if you were debating whether or not to tell her something. Finally, TJ blurred out. I'm engaged. Oh, Elizabeth exclaimed, feeling a shock, akin to cutting oneself with chopping vegetables. That moment of utter surprise followed a few seconds later by the stabbing pain. It shouldn't have hurt as much as it did, but it did. Another death, as if yet another part of Luke, a piece of the future, had just been erased. She recalled then how the girl's mother, it seemed evasive when TJ had been brought up. Had she not wanted to be the one to tell her about engagement? Elizabeth managed to recover quickly, though. That's wonderful. Anyone from town? No, I met him in college. Greg, that's his name. Wow, congratulations. So when's the big day? We haven't set a date yet. We're not in any rush. No sense in rushing into things, Elizabeth said. That's great news. I'm so happy for you, as she was. Happy for her, that is. She'd always loved TJ, like a daughter, in fact, the one she'd never had. But in the next moment, Elizabeth found herself wondering just where that had left TJ and Luke. Zach had said they'd gotten together several times the summer before their senior year, the summer Luke died. Had this future husband of hers, this Greg, Ben in the picture then? Had TJ been considering getting back together with Luke and it was only his death that put an end to their renewed relationship and allowed her to begin another one? Elizabeth could recall how devastated TJ appeared at the funeral. How much Luke's death seemed to affect her. How tragic that would have been if they'd finally gotten together, back together again, only to be separated by his sudden death. And now TJ, her one-time future daughter-in-law, the potential mother of her grandchildren, was going to marry someone else. Elizabeth had all she could do not to start bawling. She cleansed her jaw. Don't, she said to herself, don't put that on TJ. It wasn't her fault. God, what was she thinking, contacting the girl? Elizabeth contemplated making up some excuse for not wanting to talk, for wanting to talk. Perhaps saying she was simply interested in finding out what TJ was doing. After all, the girl had been such a large part of her son's life, not to mention hers and Zach's for so many years. But then again, Elizabeth had to admit she was curious. If TJ and Luke had started to date again, why hadn't he spoke to his mother? And if something had started up again between the two, perhaps it was somehow related to what he had wanted to tell Elizabeth that night. More dots to be connected, more pieces of the puzzle. The reason I called, I wanted to ask you something about Luke, as he said. Sure, Mrs. Gerlacker. The night he died, he called me. He left a message on my phone saying he had something important he wanted to talk about. But unfortunately, we never got the chance. Oh, that's terrible. Yes, it has been, not knowing what he wanted. That's why I called you. I thought you might have some clue. Outside on the highway, the traffic roared by. Elizabeth's car shuddering in the wake of every vehicle that passed. The noise making it sometimes difficult to hear TJ's soft voice. Me, TJ said. I mean, you and Luke were so close. Well, we were, but not for a while. Hadn't the two of you started seeing each other again? What? My husband said Luke told him that the two of you had gone out a few times that summer. We didn't really go out, Mrs. Gerlacker. We saw each other a few times, hung out a little together as friends. So you two weren't back together? Me and Luke?  No. Elizabeth touched her nose and felt blood on her fingers cool and slippery to the touch. May I ask you a personal question? Sure. I guess so, TJ said, but her tone was tented. You and Luke always seemed so good together, Elizabeth said. I even thought you guys get married someday. Me too, Mrs. Gerlacker. Then what happened? TJ was silent for a moment, yet over the noise of the highway, Elizabeth thought she caught a faint sniffling sound coming from the other end of the phone. I'm sorry, TJ, Elizabeth offered. I probably shouldn't have brought it up. No, it's all right. It's just that I get so sad whenever I think about Luke. I really liked him. Then like an unwelcome confession for which he felt guilty, she added, loved him, actually. And he really loved you, TJ. Not really. What do you mean, not really? He loved me as a friend, TJ said. As a friend? My God, Luke was head over heels about you. No, Mrs. Gerlacker. It was the other way around. I was the one crazy about your son. Always was, ever since like sixth grade. Right then, Elizabeth heard the intrusive beeping of another phone call. Could you hold for a minute, TJ? That's probably a tow truck, of course. Hello, Elizabeth said to the other caller. Ma'am, our truck is running a little late. The same woman's voice drawled. You're all ready. You'll be there just as soon as you can. Elizabeth, click back to TJ. Sorry about that. I'm a little confused, TJ. If you were so crazy about my son, why did you break up with him? Me, she said, her voice incredulous. Luke was the one who didn't want to go out anymore. But I was under the impression you didn't want to go out with him. That you wanted to date other people. Who told you that? Luke. That's not true, Mrs. Gerlacker. He was the one who broke it off with me. God, I cried for weeks. Elizabeth sat there from home trying to digest the information. She felt the dull throbbing emanating from where she'd hit her nose, radiating back into her skull. It seemed to pulsate there like another heartbeat. Why would Luke have lied to her? Why didn't you want her to know that he was the one who initiated the breakup? It didn't make sense. She thought of simply dropping the whole thing, saying goodbye to TJ, wishing her luck in her new life and letting the past sink down into oblivion. Instead, though, Elizabeth asked, why would he lie to me like that, TJ? I don't know, Mrs. Gerlacker. But it's so odd. Yes, it is. So you're saying Luke ended it? That's right. Elizabeth's phone rang again, but this time she decided not to get it. Why do you think he did that, TJ? I really don't know, Mrs. Gerlacker. But it doesn't really matter now, does it? Elizabeth knew she was right. It was what Zach had been telling her all along. What good would knowing any of this be now? They were kids. They'd split up. What was the big deal? Who broke up with whom? Elizabeth shivered, feeling suddenly cold. It was completely dark out now and sitting there on the side of the highway. She felt helpless and vulnerable. Felt like that time, they temporarily lost sleep in Wales during their vacation. As if at the mercy of unknown and hostile forces. Stopped, she warned herself, before it's too late. But something in her, a need both perverse and yet inexorable, compelled her forward. It matters to me, TJ. I don't think he was interested, she said, pausing, in having a relationship anymore. You mean with you? With anyone, really. I felt Luke pulling away for a long while. Was it somebody else, Elizabeth said, another girl? I don't think so. He didn't seem to be interested in women anymore, not in that way. In what way, Elizabeth said, feeling a hot pressure, building in her throat? Sexually, TJ said. What are you saying, TJ? He didn't seem to be interested in me in that way.  I'm not sure. What do you mean you're not sure, Elizabeth cried anger and bewilderment, leaching into her voice. Elizabeth thought she heard a voice whisper in the background of the phone. A young man's voice. Who is that? Was that her fiance? The Greg who had replaced her Luke? He seemed confused, Mrs. Gerlacker.  About a lot of things. But you dated him for years, Elizabeth said.  I don't know. Really? In that last year or so, I felt there was something different about Luke. Something that had become between us. Elizabeth recalled that Luke's one-time best friend, Griff, had told her about Luke changing, being in his own little world. How do you mean different, TJ? I don't know how to explain it. I think he was struggling with something. He talked about going away for a while. Away? Maybe joining a Peace Corps after graduation or teaching out on an Indian reservation. Peace Corps, Indian reservation, all this came as a surprise. So Elizabeth, as if Luke was a complete stranger to her. Someone who had never, she had never really known.  Enough, she told herself. She didn't need to hear anymore. She didn't need for this to go on. She could pretend that this conversation never even took place. And yet, once started, it seemed she couldn't stop. As if her own curiosity had an irresistible momentum that carried her onward, even against her will. On his mother, Elizabeth said defensively. How come he never said any of this to me? I don't know, TJ said. It just seemed so odd that he would lie to me that. Are you saying Luke was a liar? I didn't say that, Ms. Gerlacker. Then what are you saying? He felt he couldn't talk to you. What? He thought you wouldn't understand. Her comments felt like a slap in the face. In fact, Elizabeth felt her cheeks turned hot with embarrassment. Really? He said that? Yes. In a supercilious tone, Elizabeth said, frankly, I find all of this very hard to believe. Hurt and angered by what TJ had said, Elizabeth wanted to lash out. The lawyer in her seemed to take over. She hardened herself, slipped into a ruthless cross-examination mode. Are you going to deny the two of you were intimate, she challenged? Mrs. Gerlacker, please. Were you? I'd rather not talk about it if you don't mind. Well, I do mind. If you're going to accuse my son of being gay, at least you could provide evidence.  I just said he seemed confused about things.  Mrs. Gerlacker, I loved Luke.  She realized suddenly she'd overstepped any sort of decency. TJ was right. Whatever her and Luke's relationship was or wasn't, it certainly was none of her business. She took a breath. I'm so sorry, TJ. Please forgive me. It's okay. No, it's not okay. You were always a wonderful friend to Luke and to my husband and me. I had no right to say those things. Don't worry about that. I just wish things had turned out differently. They were silent for a moment. Can I ask you one more question? Sure. When you met him that summer, do you think whatever he was going through was troubling him then? Yes. I think that's why he wanted to get away. Really? Yes. He talked about driving cross-country to clear his head. After a while, they said they're goodbyes and hung up. Elizabeth sat there feeling numb to more than anything. A kind of shell shock as if she tried to process all that TJ had said to her that Luke was the one to break off the relationship, that he was confused, that he wasn't interested in women, that the trip had been a means to clear his head, that he was, as TJ put it, struggling with something. Elizabeth also felt embarrassed for how cruel she'd been to TJ. She had no right to say those things to the poor kid, yet what troubled Elizabeth most, perhaps, was the fact that Luke felt he couldn't talk to her, couldn't tell her any of this. Of course, if he had been gay, she'd have still loved him. She'd have loved him no matter what. That wasn't the issue. But if he were gay, and that was still a big if to Elizabeth's mind, why hadn't she known? How could she be so utterly and completely in the dark about her son's sexual orientation? Shouldn't she? Shouldn't she have seen clues strewn along the way? How could a mother have missed such an enormous part of her son's life? And how could Luke have managed to keep something that huge a secret from her and Zach all those years under the same roof?  At the same time, I would have explained certain things, the distance she felt in her son, that inward turning she had sensed in Luke. God, she thought, she'd been such a fool for going on this trip, for opening up this terrible can of worms. Thank you.