Autolight, F98, Coleman, in tonight's presentation of Suspense. Tonight, Autolight brings to life one of the most famous detectives in literature, as we dramatize E.C. Bentley's classic novel of deduction, Trent's Last Case. Our star, Mr. Ronald Coleman. Say a half, would you hand me that spark plug please? No, the other one. Thanks. They both look alike to me, Harlow. Well, they do look alike, Hap, but there's a big difference. This one is ignition engineered. That means it's built by Autolight, the people who really know spark plugs. What makes you say that, Harlow? Why, Autolight makes complete electrical systems specified as original equipment on many leading makes of our finest cars. That means that Autolight engineers specialize in ignition. And because spark plugs are the very heart of a car's ignition system, they just naturally design spark plugs to give you the smoothest performance money can buy. I guess I better be mighty sure I get only ignition engineered Autolight spark plugs from now on. May I, Harlow? Right half, because when you have ignition engineered Autolight spark plugs in your car, truck, or tractor, you have the finest spark plugs money can buy. So friends, be sure you get the very best by insisting on standard or resistor type ignition engineered Autolight spark plugs. They're world famous for quality and performance, and they're made by the world's largest independent manufacturer of automotive electrical equipment. And remember, from bumper to tail light, you're always right with Autolight. And now, Autolight presents EC Bentley's Trent's Last Case, starring Mr. Ronald Coleman, hoping once again to keep you in suspense. The last case to which I, Philip Trent, applied myself in the field of criminology and detection, occurred in the spring of 1910. I must acknowledge that the intricacies of the crime were worthy of the brain of Sig's demand. This colossus among financial giants had manipulated power and wealth in every corner of the world. He centralized industries of continental scopes, smashed families and fortunes, and along with each dollar, he accumulated an enemy. When Sig's Beemanderson was murdered, the world lost nothing worth a single tear. The day of his death, Sir James Malloy, publisher of a London record, asked me to cover the case for his paper. I agreed and immediately took the train to Bishop's Bridge. Philip Trent, wait for an old man. Why, Mr. Couples, by all this miraculous, how are you? Breathless, Philip Breathless. I expected you'd be down to Bishop's Bridge to write about the murder. Well, that's rather a colorless way of stating it. I should prefer to put it that I have come down in the character of Avenger of Blood to hunt down the guilty and vindicate the honor of society. Families waited on at their private residences.  This tragic affair will not blend well with your lightheartedness. Ah, now, Mr. Couples, you have more than a bystander's interest in the case. I have indeed. Now, you didn't do the great man in. Mabel Manderson is my niece, and there are some things you will learn which may prejudice you. I wanted you to hear them from me so your good judgment would not be impaired by gossip or malicious tongues. Good. So you're going to walk to the Manderson place with me. Oh, much too far to walk. I'll take you in my motor car.  Oh, very slowly. Well, you get in. I'll crank the engine. How about your niece? My niece had been married to Manderson for five years. They got along all the well, despite the difference in their ages. Well, she was just 18 when they married, and he close to 50. A several months ago, for no apparent reason, he began to treat her miserably. He was surly, contentious, and insulting. And when she could bear it no longer, she turned to me. I offered to speak to him, demand an explanation for his outrageous behavior. Why didn't she speak to him herself? She was the most gentle and even tempered person. She wanted to avoid a bitter squabble. A rare woman, indeed. I tried to see Manderson for a week. When I finally did catch up with him, I was doubly angry for his shabby treatment of his wife and for avoiding me. And did you get any satisfaction? You refused to discuss the matter. In the presence of witnesses, I'm afraid I made a rather rash statement. I expressed the view that men such as he did not deserve to live. I wouldn't worry about that, Mr. Couples. That opinion seems to be universal. The strange thing is why your niece married Manderson. Oh, yeah. Here we are. Would you mind opening the gates, please? Oh, no, no. This will be fine. I'd like to nose around the grounds a bit, unless you want to drive in. No, no, no. I'm staying in town. If you should want me, I'm at the Hotel Royal. Well, thank you for the lift, Couples. I passed through the gates and walked the path between tall walls of hedges. A gap in this green wall took me to a gravel track that led to the small gardener's cottage. Someone was poking about as though looking for something. My approach startled the fellow. This is private property. What are you doing here? My name is Trent, and you? John Marlowe. Oh, yes. Secretary to Mr. Manderson, I believe. Um, you'll, um, you seem to have lost something, perhaps I can help you look? No, I, I was just hoping I could find something here. Something that the murderer may have dropped. This is where Manderson's body was found. Ah. And have you found anything? No, I, I really didn't expect to. I've just been so, so upset, bereaved, devastated by the master's death. Frankly, no, I'm limp, that's all. I've been up all night, driving, haven't had any sleep. Ha, you, you should, you should do your driving during the day. Mr. Manderson had sent me on an urgent errand to Southampton just before he was killed. Oh, then you weren't around when the deed was done. I have accounted for myself to inspect a merch. But now that your employment here has come to an abrupt end, do you plan on leaving Bishop's Bridge? Mrs. Manderson has asked me to stay here, to clear up various papers and loose ends. Oh, well, then I shall see you about. You shall. Mr. Trent, I would like to offer a suggestion. Snoop around if you must, but leave Mrs. Manderson alone. I've already heard that she is the most fragile creature, but have no worries, Mr. Marlowe. I am gentle as a bird. When Marlowe left me, I potted about the uncut grass, which still showed where the body had lain. Then I started towards the large house. There was a man standing in the open French doors of the study. Why, Trent, come in, come in. Ah, me, it was ever that. I did think for once I was ahead of Scotland Yard, and now here again is the largest officer in the entire force, already filling that prime position. How are you, merch? Earning my wages, Trent. Ah, then you've arrested the bloke, what done the old fellow in? Good work. You know, I didn't say that. It'll take more than you or me to put the cups on anyone in this case. Oh, come now, what about the butler? And the upstairs maid, the cook, the gardener, why the place must be teeming with likely suspects. Well, that's a trouble. Manderson was not what I'd call a lovable chip. Too many suspects. Why, why, some bloke could have come here from Tanganyika or Timbuktu, pull the trigger, and then gone home easy as you please. The gun hasn't been found. No. I have the bullet here, the 32.  Any powder burns? None. The gun was fired from a distance of about five feet. The medical examiner has fixed the time of death at about midnight. Where's the body? Deckerman's mortuary in town. I have a photograph here taken where the body was found. Let me see. The stress cops I've ever seen. Except for the shoes. The shoes? Well, why, they're very expensive and practically new. I should like to see them, if they're about. Everything Mr. Manderson was wearing when he was killed has been returned to his room. I suppose it'd be all right if I went up and sniffed around. Of course. I'll lead the way. I've gone over everything, suddenly. I don't know why you're so interested in the shoes. Merch, don't you think it rather strange that Manderson was dressed meticulously when he was shot, hair parted neatly, tie in place, waistcoat completely buttoned? Yet the laces of the shoes were untied. Perhaps his feet bothered him. Now, I have terrible pains. It could rubbery have come into it, you think. Anything missing from Manderson's pockets or from the house? No. The matter of fact, Manderson's wallet was overstuffed with about 5,000 pounds. That's more than pocket money, even for a millionaire. There was also a pouch of valuable uncut diamonds in one of his pockets. No robbery is certainly out. This is Manderson's room here. Uncut diamonds, eh? Has anyone guessed at their value? About 10,000 pounds. Well, good heavens. Don't you think diamonds are worth that much? Yes, yes, but I'm more impressed by the array of shoes in this wardrobe. Why, there... Ha, there must be 50 pairs if there's one. Aha, this is what I want. Ah, how could you tell that those were the shoes Manderson wore last night? Well, look here. There's a tear near the tongue. Well, as I said, they must have been a bit tight for him. Now, why would he with 50 pairs to choose from, select the one pair that pinched? You know, it is. I've become attached to an old bathrobe. Much too tight for me. Yet I favorite over a new one that the wife gave me on my birthday. It's odd. Very odd. Match. I wondered if we could have a look at Marlowe's room now. Certainly, it's just down the hall. But Marlowe's in the clear. He left at 11 last night, an hour before Manderson was killed. He got to the Bedford Hotel in Southampton at 6.30. Couldn't possibly have made the drive in less than seven and a half hours. What was the errand Manderson sent him on? He was to meet Mr. Harris and give him a package. Some big secret business affair of Manderson's I met him. And Marlowe delivered the package and returned to Bishop's Bridge? He returned without making the delivery. Harris didn't appear. You might at least not before including. Oh, I'm sorry, Marlowe. I thought the room was unoccupied. No offence, Mr. Marlowe. Friend here is working on the case. You might call this visit a visual police business. I've told you all I can. If you don't mind, I'd like to nap. Marlowe, when you first went to work for Manderson, did he require a graduate of Oxford? All he wanted was a capable secretary. But you were at Oxford? I was. Marvelous place, Oxford. Gave us a great school and a fine style of shoe. By the way, Marlowe, what size shoe do you wear? Inspector, if you don't remove this gentleman, I shall report this to the authority. Oh, come off it, Mr. Marlowe. Let's indulge Mr. Trent in a question or two. I wear size 10 seam. Thank you. Thank you. Um, Marlowe, have you any idea what was in that package for Mr. Harris? No. Where is it now? A messenger came for it this morning. Do you have any idea who this Mr. Harris may be? Have you ever met him? No. Mr. Manderson had many private business arrangements about which I was kept in the dark. I was his secretary, not a business partner. Isn't it rather odd that an American would hire an English secretary? Well, not at all. Maybe... Mrs. Manderson is English. That is why Mr. Manderson lived in England a good part of the time. He wanted his wife to feel at home among her own people. And I assume you did your part, in that regard. I beg your pardon? I beg yours, Marlowe. Well, take your nap and pleasant dreams. Inspector Merch went off to complete arrangements for the inquests, leaving me alone in this marble morselium of a house to wait for Mrs. Manderson. I then sent a telegram to Oxford University and requested an immediate reply to my inquiries about John Marlowe's undergraduate activities. Then I wrote my first dispatch for the London Record, setting forth everything I knew, but keeping to myself those suspicions which I hope would soon be confirmed. Since Mrs. Manderson didn't appear, I decided to have another look at the garden as cottage. But the compelling force turned me instead towards the sound of the sea. Standing at the edge of the cliff, I watched the beautiful movements of water, the wash of a light sea over broken rocks. And then, then my heart seemed to stop.  I knew who this woman must be, Mabel Manderson. She was at once everything that poets and painters have tried to express with pen and brush.  AutoLight is bringing you Mr. Ronald Coleman in E.C. Bentley's Trent's Last Case, tonight's presentation in radio's outstanding Theater of Thrills Suspense. There's one thing I've learned, Harlow, and that's to make sure I get ignition-engineered AutoLight spark plugs for my car every time. Well, you've learned a mighty important lesson, Hap, because money can't buy finer spark plugs, and that's proven every day by millions of car, truck, and tractor owners under all kinds of conditions. You see, AutoLight spark plugs are designed by men who specialize in ignition, and because they know ignition, they know how important it is for spark plugs to work as a team with the complete ignition system. Is that why you say they're ignition-engineered, Harlow? Right you are, Hap. So friends, treat yourself to the best. Ask for and insist on ignition-engineered AutoLight spark plugs. They're world famous for quality and performance. Ask your dealer for the standard or resistor type best suited to your car and your style of driving. And remember, from bumper to tail light, you're always right with AutoLight. And now, AutoLight brings back to our Hollywood soundstage Mr. Ronald Coleman in Elliott Lewis' production of E.C. Bentley's Trent's Last Case, a tale well calculated to keep you in suspense. To continue my narration of the peculiar circumstances surrounding the death of Sigsby Manderson, the last case to which I, Philip Trent, applied myself, the sight of Mrs. Manderson at her sanctuary on the cliff had a most unsettling effect on me. I returned to the house and nervously paced the floor of the study, for I don't know how long. When the door opened and my name was spoken, I stared stupidly. Mr. Trent, I am Mrs. Manderson. You are Mr. Trent, I believe. Yeah, I believe, yes, Mr. Trent. Please sit down, Mr. Trent. I would like to help you in any way I can. Thank you. I'm sorry for inflicting myself upon you at this tragic time, Mrs. Manderson, but I have just a few questions. Last night, did your husband retire at the usual time? Yes, at 10.30. Then, sometime after 11, I heard him move about in his room, which adjoins mine. I called and asked him if anything were troubling him. He said no, he was just a bit restless and would ask Mr. Marlowe to take him for a drive to relax his nerves. And did the drive with Marlowe bring the desired results? I thought so. At about midnight, I heard my husband return and asked if he felt better. He replied that he did, and that he'd sent Marlowe on an errand to Southampton. I see, thank you. Your uncle, Mr. Cappos, mentioned that Mr. Manderson behaved strangely towards you in the past month or so. Well, he did rather. I put it down to the pressure of business that it had begun to tell on him. And was he of a very jealous nature? He had no reason to be jealous. There were no quarrels, differences of any kind? Not quarrels, really. My husband liked to spend money. I never learned to. My needs were modest. I've long feared that the large amount of cash my husband always had on hand was an invitation to burglars. And was he in the habit of carrying a pouch full of diamonds in his pocket? He often bought expensive jewels for me, but they were kept in his safe. Since they were not put to use by me, perhaps he had decided to dispose of them. Of course. I know this must be a harrowing experience for you, Mrs. Manderson, but you do want your husband's murderer brought to justice? I will help in any way I can. I didn't think I would learn anything by attending the inquest, so while it was being held, I strolled to the telegraph office. Yes, sir? I expected a telegram yesterday. I wonder whether it has come in. What is the name, please? Trent, Philip Trent. Trent, does sound familiar? Why, of course. A batch of telegrams was delivered to Mrs. Manderson last night. Simply messages, you know, the poor thing. Yours went out to the house along with the others. You're sure of that? Well, look here. The delivery book. You can see it's signed by the person who received it. Thank you. Thank you very much. The order signature in a clear hand. John Marlowe. I found myself at the cliff again, and each crashing wave was like a hammer blow on my heart. I was certain of the contents of the telegram. Only one thing was not clear, and that was a motive. And each time the answer tried to insinuate itself into my mind, I consciously pushed it away. I could no longer look at the case impersonally. After the first sight of Mrs. Manderson sitting on this very rock while she gazed at the sea, I knew that she could be motive enough innocent or not for any deed good or bad.  What? Why, what, what? Why, you and the habit of sculking up on people? I, I almost lost my footing. Be more careful. A long way down. Well, what are you waiting for? Surely you don't expect me to thank you for withholding my telegram since last night? You weren't here. You didn't expect me to chase over the countryside looking for you. All right. Well, thank you. I imagine you'll be leaving Bishop's Bridge Trent. The inquest jury returned a verdict of murder by persons unknown. Inspector Merch believes the crime was committed by a crank.  And now, if you'll excuse me, when Marlowe left me, I tore open the telegram. A response to your inquiry, John Marlowe, member of Dramatic Society. Excellent in roles calling for disguise and vocal impersonations. Ah. I knew what I had to do. And I approached my task with the deepest pain and gloom. Mr. Trent, I didn't realize you'd come in. Forgive my pain. The piano is my only release. Oh, no, no. Please continue. I, I've... Aren't you feeling well? Perhaps some grams. Oh, no, no. Thank you, Mrs. Manderson. I, I've written the story of this case and addressed it to the publisher of the record. It's all here in this envelope. Contain certain things which I have concluded about your husband's death. Oh? Things not suspected by anyone else. Mrs. Manderson, I am not free to suppress this evidence on a mere whim. I want the truth. Are you asking me if I've perjured myself at the inquest? Since I have a passion for truth, I do not attend inquest. But you knew why your husband changed his attitude towards you in the month or so preceding his death? What have you found out? I want you to tell me. All right. He knew that I was weary of life with him. The constant party's business conference of scheming, complicated plans for amalgamations, corporations which went on constantly. I couldn't ask him to pass a butter as dinner without getting the latest market prices on that commodity. I refused to attend his dinners. I wouldn't pay hostess any longer at his dull parties. That is why his attitude changed. There was no talk of divorce? None. Did you plan to continue living with him? Why, why do you ask me that? I know that your husband became contemptuous of you because of John Marlowe. There you have the envelope. Send it to the record or withhold it as you choose. I'm done with this. This is my last case. I watched her trembling hands tear open the envelope and extract the story. The story that told how Marlowe had shopped Manderson at 11 o'clock had impersonated him at midnight, had worn the dead man's shoes to cover up his own footprints, and had been in such haste that he neglected to tie the laces when he returned them to the feet of the murdered man. I dare not guess how deeply Mrs. Manderson was involved in the plot, besides being the motive for it. I wanted to be done with the affair and get as far away as possible from the woman who now stood so near to me. I can't send this off, Mr. Trent. I'm sure you have good reason. The best. You are wrong. Impossible. I can prove that Marlowe masqueraded as your husband. Oh, listen, please. My husband sent Marlowe off to see a man who never existed. In the package you dressed in a mythical, Mr. Harris, with my husband's wallet, with 5,000 pounds, and the pouch of diamonds. He intended only to wound himself, and then had Mr. Marlowe arrested for theft and attempted murder. Like you. My husband suspected there was something between Marlowe and me. There never was. Oh, Mrs. Manderson. When Marlowe started to drive off, he heard the shot and drove back. My husband was dead. A suicide. He realized then what my husband had planned. He replaced the warrant and diamonds in the pocket, then borrowed the shoes for reasons you guessed. They were torn because Marlowe's feet were a little too large for them. But you said you had seen Manderson at midnight. I said I had heard his voice. Marlowe's a good impersonator. He was trying to protect himself and me. Now, Mrs. Manderson, I couldn't have been that far from the solution. You were even further away, friend. Why, couples. Manderson was not a suicide. What? I killed him. What?  I was out walking that night. I saw Marlowe drive off. Then I came upon Manderson just as he was about to shoot himself. I tried to stop him. We struggled. And during the struggle, the gun went off accidentally. How could I have been so wrong? I think I know why. Your talents must be better suited to reporting than the detective business. My dear Mrs. Manderson, I couldn't agree with you more. This, I vow, shall be Trent's last case. Suspense. Presented by Autolite, the light star, Mr. Ronald Coleman. This is Harle Wilcox speaking for Autolite, the world's largest independent manufacturer of automotive electrical equipment. In 28 plants from coast to coast, Autolite makes over 400 products for cars, trucks, tractors, planes, boats, and industries. These products include dial indicating and recording thermometers, bumpers, die castings, and batteries such as the famous Autolite Stay Full, ignition engineered Autolite spark plugs, both standard and resistor types, voltage regulators, wire and battery cable, Autolite bullseye sealed beam units, and Autolite original service parts for all Autolite electrical systems. Autolite is proud to serve the greatest names in the industry. So from bumper to tail light, you're always right with Autolite. Next week, we combine fact and fiction. The fact, the murder of Mary Cecilia Rogers. The fiction, Edgar Allen Poe's solution of that crime. The mystery of Marie Roget. Our star, Mr. Cornell Wilde. That's next week on Suspense. Suspense is produced and directed by Elliot Lewis, with music composed by Lucien Morrowick and conducted by Lud Bluskin. E.C. Bentley's Trent's Last Case was adapted for suspense by Oliver Gard. Featured at night's cast were Ellen Morgan, Joseph Kearns, Richard Peele, Gloria Ann Simpson, and William Johnstone. And remember next week, Mr. Cornell Wilde and Edgar Allen Poe's The Mystery of Marie Roget. You can buy Autolite standard or resistor type spark plugs, Autolite original service parts, and Autolite Stay Full batteries at your neighborhood Autolite dealers. Switch to Autolite. Good night. This is the CBS radio network.


Food is more global than ever before. Reduced trade barriers, advances in production, logistics and a rising demand for food have powered trade and global supply chains. These processes have unlocked millions of jobs supporting social and economic development around the world. As food crosses countries and oceans there can be harmful impacts along the way that can take place from farm to fork. Let's turn to Louisa and Dan. Louisa owns a major food store, importing fresh and processed products from suppliers all over the world, who rely on farmers in producing countries like Dan. Louisa is paying a fair price to her suppliers and is under the impression that the producers are treated fairly, but this is not the case. The truth is, Dan is not given an equal chance to succeed. His neighbour sells tomatoes to the same trader, but has joined other producers in bribing local officials to expand their farms to conservation land and to use pesticides excessively to boost their yield. Dan is producing less and making less, but knows that his farming practices aren't contributing to deforestation or biodiversity loss. There are other problems in Dan's community. In the tomato canning factory, women are being paid much less than the men, and they're working in unsafe conditions, but the country's labour laws are weak and they fear losing their jobs if they complain. Other communities face other problems. Just across the border, crops in high demand are taking over land once reserved for local staples, affecting food security. Attending a talk by an NGO, Louisa is shocked to discover that her business could be contributing to harmful impacts through her own supply chain. Louisa learns that the OECD FAO guidance for responsible agricultural supply chains can help businesses introduce risk-based due diligence to identify, mitigate and prevent social and environmental impacts in their supply chains. The OECD FAO guidance provides a five-step framework for risk-based due diligence, helping companies understand where risks can occur in business operations and how that can impact on development. Following these steps, Louisa implements a due diligence framework and new company policies to help her business operate more responsibly. She's developing a code of conduct for her suppliers and knows which questions to ask to ensure they're doing their part to address risks to people and the planet. She is also engaging with stakeholders, including NGOs, worker and employer organisations and many others. Dan also starts seeing changes in his community. The trader that Dan sells to has introduced signed visits to assess producers' farming practices, addressing issues such as overcropping and social protection for seasonal workers. A local NGO is also promoting awareness around environmental issues, and there's even an anonymous hotline to report harmful practices. Women at the factory say working conditions have improved. As for Louisa, business has never been better. Ever since her suppliers began to consider risks more carefully, there have been fewer development impacts. She also sees greater confidence among her investors, increased customer loyalty and better understands how her business can help achieve the sustainable development goals. Responsible business conduct in agriculture can help build a better life for everyone, bringing more responsibly sourced food to all our tables. Learn more.


everyone. Think Taekwondo. Thursday afternoon, February 24th, 2022. Welcome back afternoon for those of you in Hawaii evening or maybe even morning for those of you in other places. We have the very, very special good luck and blessing of having with us today. A really long admired and valued friend and colleague David Louie, former attorney general, partner at major Hawaii law firm Kawayashi Sugita and Gota and also an extraordinary woodworker. It's crafted bowls and other works of wood art and we only have a half an hour but David, what in your background and experience wound you up as attorney general for the state of Hawaii? Hey, thanks for having me on your show check. It's really a pleasure to be here.  I never really planned on it but there's a long tradition of public service in my family. My father was a minister and then he worked for the county of Los Angeles as a human relations consultant for 20 years. My mother was a nurse and when I was in law school, I had a lot of friends who pursued public service careers, you know, doing all kinds of things, become judges. One of my roommates became the mayor of San Francisco. So, there were a lot of people that provided role models for me. You know, I just was a lawyer. I just did, you know, litigation, fighting over money and, but I always had an interest in issues and in organizations and in leadership issues. And so, I, you know, served with the Hawaii State Bar Association as the board of directors and president. I worked on some national organizations, the National Asian Pacific American Bar Association as a regional governor. I worked with the judiciary and I served in state government as a, I forget what they called this. I was a board member on the Aloha Tower Development Corporation for eight years, appointed by Ben Caetano and then later by Governor Lingle. And so, having that kind of experience gave me the preparation for assuming the job of the attorney general. It wasn't, you know, you can never be prepared for taking on a job like that fully. But it gave me a lot of good background and my litigation background gave me a lot of good background. And so, I was fortunate to do that. And, you know, it's opportunity is said when preparation meets chance. And, you know, it just came along and it was by chance that I knew Governor Abacrombi and I knew Bill Canneco, who was Governor Abacrombi's campaign chair. And Bill suggested that I apply and I thought about it and eventually I did apply and then eventually I was selected by the governor, which was really grateful to him for putting his faith and trust in me. And I'm sure the gratitude from Governor Abacrombi was at least as large, if not larger, going back toward you for the roles and challenges you took on. So, we'll get to some successes and achievements in a minute, but what were some of the hardest things, biggest challenges and obstacles when you came in? Well, you know, the major challenge, I think, was the lack of money when we first came into the picture. You know, government is always at this point in time at a crossroads. You can either pay people salaries or you can try and do progressive things and try and fund programs, but you cannot do both really well.  It's a balancing act. The legislature has to handle it. So, one of the biggest challenges was lack of money. We were underwater. We were coming in. This was the national mortgage crisis was full blown then in 2011. There was recession.  And then the other thing was just, you know, learning the job. That was it was a very steep learning curve that the job of Attorney General is a big job. There's a lot of stuff there. There's a lot of legal issues and a lot of responsibilities. And I was fortunate to have really great people at the EG's office to help guide me along the way and teach me what I needed to know and help me make decisions and move the thing forward. So those were some of the tough, tough things that came along. And along the way, there are always challenges, you know, there's always challenges, people, people trying to push you around, people trying to get their way. I've always thought of government as, you know, and it's an apt analogy of like in Hawaii, because we used to have Kiku TV with the sumo wrestling. And I've always thought of government as a sumo match.  And, you know, it's not for the faint of heart. That's a great way to put it. And in fact, you're an artisan in other respects as well. But so what are some of the successes and achievements that mean the most to you for your legacy looking back? Yeah, well, thanks for asking, you know, the most important issues that that we handled. I think there's about five or six of them that I'm the most proud of. And the first one is is same sex marriage. We with the leadership of Governor Abercrombie and the legislative leaders, the Senate president and the House Speaker, we brought forward the legislation to legalize same sex marriage, which was, I think, a big deal. Yeah, I mean, this was on the heels of the US Supreme Court ruling in seminal cases that it was unconstitutional and illegal under the federal constitution to discriminate against people for same sex marriage. But still, it was a fractious, contentious kind of issue. Very people very passionate on both sides of the issue. It was a special session, and it was long and arduous and demonstrations every day and very noisy. But I was very pleased to be part of it because it was a social justice issue. It was a matter of equality of opportunity and equality of marriage. And when Governor Abercrombie held the ceremony to sign the bill into law, he read this letter from a personal friend of his that said, thank you. You know, we were invisible before, and now we are seen. And you know, that was really moving. I was very impressed on that. And then, you know, the other signature issues that I was involved in were the national mortgage crisis. We got $70 million for Hawaii out of the national mortgage settlement. I worked with the AGS of all 50 states as well as the federal government to change mortgage foreclosure procedures and get a bunch of money to help people because of the problems. And then we settled the number of cases. We settled the OHA. There was a dispute with OHA that had been lingering for 30 years over back due revenues from seeded lands. I noticed on a feed this morning, there's a bill up in front of the legislature to try and figure out this going forward. But we were able to resolve a claim that had been festering for 30 years and get that done. And I thought that was important because, you know, native Hawaiians have not done as well in their own homeland as many of the other people who live here, the Caucasians, the Asians, the Japanese, the Chinese. And so there's been a sense of disenfranchisement and not doing as well. So it's important that we recognize that and help resolve some of these issues with native Hawaiians. And then I was really proud that we were able to get a conservation easement on 665 acres up at Turtle Bay to prevent hotels and houses and things like that and keep the country country. So we got a question from a viewer asking, what do you think is in the way of Ahoy being able to work something out with its cannabis industry to overcome the obstacles posed by the federal legislation and restrictions? And that's a great question and a very interesting question. You know, federal law is at odds with state law. State law allows medical marijuana here. There's a number of states that allow recreational marijuana. And we have legalized this, but because we're an island, you cannot transport, under federal law, you cannot transport marijuana over the water and you cannot do it by air. It violates federal law. And so it would be good if the legislature can enable some kind of legislation that will allow that. And then we still have to work with the federal government because it's, you know, if you're still subject to federal criminal penalties, that's not a good thing. So up in Alaska, they allow transport by airplane, but it's kind of a wink and nod kind of a thing that the feds don't ask and nobody tells. And so they do that. I'm not sure that that would occur here in Hawaii, but we need to do something to make marijuana available to people for medical needs as they want.  That was the common wisdom back when you and I were in college, Chuck, but that's not the truth. So some of the major things that you were able to be instrumental in helping to resolve during your time as AG have been out there for a long time. What do you think got those over the top? You know, that's interesting. And I'm not gonna, I can't possibly take credit for these things. I got to march in the parade and actually in some ways lead the parade, but quite frankly, the issues that we resolve, the Oha settlement, the same-sex marriage, the Turtle Bay conservation easement, many people were laboring in the trenches long before I stepped in and they were helping push the ball forward. You know, people come together and they try and make change happen and you do that. One of the things that I have always thought was important was cut the deal. Okay, cut the deal. So like on the conservation thing, the conservation easement, there was a bunch of talk, it was complicated, but there was no deal and I came in and I sat down and worked with the parties and we cut a deal. We were able to cut the deal. It wasn't perfect. It wasn't everything we wanted. Nothing ever is, but you know, I've always taken the example if you read Lyndon Johnson's biographies by Robert Carroll, that Lyndon Johnson prided himself on being able to cut the deal as opposed to somebody who was speech-ifying and he had a certain disdain and contempt for Hubert Humphrey who gave great speeches but couldn't get the legislation passed and Lyndon Johnson, yeah, his speeches weren't great and a lot of people criticized him and a lot of people didn't like him but he could get the deal done. And so I think it's always, you know, politics is the art of the possible. You know, so it's always important to make the deal. Don't walk away. I'm very disappointed in some of the people nationally who think that purity of thought is better than having a deal. So I'm more of a pragmatist. So that's a great insight, David, is that the results that are sustainable and pervasive are not litigated determinations. They're negotiated determinations.  Well, you know, that's nice of you to say that. Basically, I've been toiling in the trenches. You know, I've tried a lot of cases. I've mediated a lot of cases. I've been in a lot of settlements, conferences, and a lot of mediations. But part of the thing is, is that I've always been willing to get my hands dirty, jump down into the trench and fight it out.  And once you know that and you understand what the push points are for the other side, what your own push points are, and then you try and figure out, can we cut a deal? You know, that's the whole point. And avoid all the fighting or avoid most of the fighting or some of the fighting and get a deal done. I mean, a lot of this is leverage. People are just pushing and shoving and seeing who can, you know, create leverage. And at some point, you just got to relax and try and say, okay, what's the best deal we can get? So in your book, one of the things authors can do and you do well is share stories. Good friend of ours, Peter Adler, read your book and he said, it's terrific. So here's a public endorsement of it. But in addition to that, there are lessons learned that certainly you took pains to share with people. What are some of those that your book tries to get out there and share? You know, and thanks for asking about the book. You know, writing a book is always both an exercise in vanity and a labor of love and an attempt to make sense of what happened. You know, just trying to put it all into perspective and figure out, well, what the heck happened here? And so that was a good exercise for me and I enjoyed that. I think, you know, in terms of the best advice that was given to me and the lessons learned, one of the things that I got from a US retired judge, Charles Breyer, the brother of Stephen Breyer, the Supreme Court judge. But Charles Breyer told me this story about this legendary, I want to say fixer because that back 50 years ago, that's what they were. They were fixers. They were consigliaries, but they could make things happen. And there was this legendary guy who was a confidant of Pat Brown, Governor Pat Brown of California, National Figures. And he carried a little small paper notebook in his pocket. And when people would ask him for a favor, he would write it down. And then, but then the secret was, he always tried to do something immediately. So that if somebody asked him for a favor, if they had gone out of their way to ask him for a favor, he knew that if you immediately acted on that, that and in fact, if you've got a result, if you picked up the phone, you called somebody and then you got a result right there, that person would think you were a magician. Okay. And they would be forever grateful that you had taken the time out of your day to do something for them. And it got an immediate result. And even if you didn't get an immediate result, the fact that you were willing to try was very important to them.  You know, it just wouldn't be as good. And part of the thing is, is that, and I always like to say this when I became a GI says, well, be nice to all the people on your way up because you really hope that they'll be nice to you on the way down. And, and it's really all about the people. I mean, that's how a lot of things get done is people do things for people, for people who are their friends or people that they like, or now they won't go out of their way and we're not talking about doing things illegally and doing things immorally or unethical. But people do like more back in those days, you could do that stuff. But, but you know, people do like to, to assist people who are friendly. And so that was the that was an important piece of advice I got. And the other important piece of advice I got from was from John Radcliffe, who said, put yourself out there, just put yourself out there. People if you people are thinking about trying to serve in government or be a leader or even in an organization, just put yourself out there and volunteer, get skills, get, get experience, working a nonprofit. And, and the thing that John said was is that he ran for Congress, he went for a Congress and, and he got clobbered. He said, he said it was terrible.  And people respected that. And his career took off, you know, and he was working in and he got a lot of positive feedback from a lot of people. John was one of the most successful union people in this state ever, and one of the most successful lobbyists in this state ever. And may he rest in peace. You know, he passed away, but he was great man. You know, and John did something that you and few others have managed to do, which is to build respect, admiration and appreciation among really diverse sectors of people. And that's a gift. I'm not sure you can teach it. But in your years in key state leadership, decision making seated the C suite table in state government, looking at where we are now, what's out there right now that most concerns you that deserves the highest priorities in your view? Yeah, you know, there's so many issues, so many critical issues on the table. It was I was thinking about this concept the other day. And there's this song from Hamilton, the musical that that I love. It's called something I forget. Anyway, the wording of the song is look around, look around how lucky we are to be alive today. And that was true, you know, back in the Revolutionary War, but it's true today. You look around, look at all the advances in technology, look at all the advances in social justice, look at all the great things that are happening that, you know, and the opportunities that people have now that they didn't have 30, 40, 50 years ago, maybe even 10 years ago. And yet, paradoxically, we also have forces of evil and darkness of Mr. Putin declaring war in Ukraine. Yeah, you have the January 6 insurrectionists trying to drag this country back into the 1800s, where they could discriminate against people of color. You have people vying for dominance and to trying to subjugate other people and to trying to deprive them of their rights. And, and, you know, it's terrible. So there's all kinds of terrible things out there, but there's all kinds of fabulous great things out there. And so there are opportunities so as far as what I think for this state, for Hawaii, I think, you know, Hawaii is a really special place. Hawaii has been very, very good to me. And Hawaii is a unique place because we, we have this culture of acceptance of, you know, mediators actually do very well here because there's this, it's a larger community culture of treating people with dignity and respect. And, and trying to be inclusive. And I think part of that comes from the native Hawaiian culture. And part of that comes from just the fact that there are all these amalgamated communities, the Chinese, the Japanese Americans who came to work on the plantations, the Filipinos who came and then settled here to have families and the fact that there's been all this intermarriage. And so people treat each other with respect in Hawaii, which is not always the case in a lot of places on the mainland. If you don't look like you're one of the majority culture. And so it's really important in my mind that Hawaii maintain and preserve that, that cultural aspect of treating people with respect.  But how we approach the problems, how we try to solve the problem so that we all live together in harmony going forward, those are, those are the important things to me. And that raises the question in these times, is that harder now than it was when we were younger? Yeah, you know, I think it's harder and easier. It's a, it's a paradox kind of a thing and sometimes harder, sometimes easier. Both. We, we face some tremendously huge problems today, tremendously huge problems that really only concerted government action and private action can solve. And hopefully we'll continue to be able to do that. That's really my hope and my wish that we'll be able to do that. You know, there's a lot of forces trying to drag us all down, trying to separate us, trying to, trying to smash that, that consensus and the idea of a shared future together. But I think there's enough people out there that they believe in it that we can persevere. Fantastic. So, David, with your decades of experience, what's your vision? Where do you see us going? What's it going to take to get there? In a way? You know, that and that's that's the $64,000 question or the $64 million question these days is $1,000 doesn't buy you as much anymore. How are we going to solve these problems? Are we going to solve climate change? I mean, there's global forces and things that happen outside of the shores of Hawaii. But the thing that, you know, you can only control what you can control, right? And, and so we're all we're going to have to adapt. We're all we don't know what's going to come. We don't know what's going to happen with climate change. I think, fortunately, war is not on our doorstep, like it is on the people of Ukraine.  Tourism is a very good engine. The military is a very good engine. Some people don't like either, but, but they really help. And so I come back to how do you approach the problems? How do you approach getting solutions that are negotiated solutions that everybody can live with and live for over the long haul over the long term, not just a zero sum game of I win today and you lose, but we both win. We both win together. That's a great response. We're out of time for today, but thanks, David, Louis, and for bringing us. If there's not an answer, there's at least a direction. If we're going to get to that vision, it's going to be together. It's going to be collaboratively. And I think you've brought out in ways that those of us who have known you for a long time can appreciate it. It has to be the Hawaiian way in the truest sense of Aloha. David, thank you for all your work, all your service, your thoughts, your insights. Thank you, folks, for joining us. Come back and see us again next time. Thank you so much, Chuck. Aloha. Pleasure.


All righty, welcome back to Operating System. So you're gonna need this for lab 4. So we were talking about U-Context and Qs. So before we start that, I will start with this visualization of what a process looks like with 4 threads. So if a process has 4 threads, those 4 threads would have their own independent registers and stack, hopefully, and all the stacks would still live in virtual memory. So they could access the stacks if, for some reason, they got a pointer to it, but they shouldn't. And then the other things that exist in virtual memory are like the heap and global variables, and then the only other thing in a process that we know so far is open file descriptors. So any questions about this visualization? This is what a process with 4 threads looks like. All the threads live within a process. So they can access any of the resources that a process has. Good, good, good. All right. So remember with all these, you can access these examples. This is a clickable link. You can access this repository. It's the materials repository, and today it's lectures 18. We will see some code. So this is going to be all code and all your implementing cooperative user threads. So the heavy lifting of threads is saving all the registers and doing the context switches and all that stuff. Thankfully for you, all the heavy lifting is done by this you context library that you are allowed to use. So here's all the header files you will ever need for this lab. They're included for you and in the comments I put in what function I used from these. Most of these just you don't have to use. You really only have to use these ones. So I will have a function called die that does the same thing where it saves the error. No prints error message and then exits the process. This should be only for debugging for you because everything should work properly. You should not have any errors from system calls or anything in lab four. So this is primarily for you to do debugging. This should never execute whenever you actually test your code. There is a provided function called new stack and that will allocate a stack for you. If you need a stack for a new user thread, you should use this function. So it does an M map call for you that you can execute code on all that fun stuff. And it has this little helper function called Valgrind stack register. So what that does is if you use Valgrind on your code to debug memory leaks and that fun stuff. Well, turns out it doesn't really expect you to have your own threads that use their own stacks. If you do not have this function called Valgrind will just yell at you for literally anything.  This is a natural stack. Leave me alone. So that's why one of the reasons why you should use this helper function. And it declares a stack of this SIG stack size. So that's just a default stack size. We'll just use it for everything to make sure everything's consistent. The delete stack just unmapped some memory and just does an M map system call. And then here we get into the real meat and potatoes. So here we are declaring three you context types and this you context type will essentially hold all of the values for all of the registers if we want to save them. So we're and since they're saving the registers, they pretty much represent the important part of the thread. If we need to context anything because, well, stack pointer is just a register. And other than that, it's just memory. So we will set up three threads, thread zero, thread one and thread two. In here, I will set up two stacks. So a stack for thread one and a stack for thread two. You might ask why I don't have a stack for thread zero because I will bless thread zero as the current main thread that is executing in this process.  So the first function call we use that uses you context is called get context. And what get context will do is it will initialize this you context and essentially save the current registers of the current executing thread into the structure and also set up the stack pointer that if you were to context, switch back in those registers, it looks like it would resume from here. So it would resume from right after the get context call. So everyone okay with that a little bit. So let's see how we would use it. So the counterpart to get context is called set context. So what set context will do is it will take this you context. So whatever this is pointing to, which will have values for all the registers and everything and it will replace whatever is currently executing and swap all the registers back to whatever was last saved in that you context. So in this case, it would set everything back from the last time it saved, which would have been this get context. So it would go resume here. So if I, if I compile this, what I should see is something like oh no. So I should initialize this context here. If I do a set context back to it, it'll be resume from here. So if I set context back to it, it resumes here, it would print oh no, then do a set context back to the last get context, which is still here. Print oh no, that the dot, that the dot, we can see where this is going, right? So if I go ahead and execute that, whoops, I didn't compile it, that probably would help. I get oh no over and over and over again. This is an infinite loop, probably our first of May today. So does that make sense why that's an infinite loop? It goes over and over again. All right, any questions about that fun infinite loop or other fun stuff? So let's make something fun or at least the other class asked about this. So let's say I make a variable called x, it would be a local variable. So it's on thread zero stack. And then let's say I increment it plus plus x. Then I say oh no, x equals whatever x is. So anyone guess what this will do? Yeah, so I should see like x zero x one two, yeah, always one or increment. Yeah. He convinced you? That easy? Okay. Well, let's see who's right. She's stuck to your guns. So why is that? Yeah, so X is on the stack, right? So here we would have allocated space for an integer on the stack. So it would have bumped the stack pointer up. It would have been allocated. Then it calls get context, which also would have saved the stack pointer and everything like that. So here, whatever we increment x, it would increment, do that same load and store thing and it would be somewhere on the stack. So it would go from zero to one. We print it off and then we set context back to here where the stack pointer doesn't change. So it didn't change. We didn't allocate a new variable or anything. So its memory is still around. It's in virtual memory. So we increment it from one or one to two, print it out. How would I make you write? Well, but by moving a single line. Yeah. So, so here's another guess. All right. So this will make it keep incrementing again. You want to change your mind? You want the, oh, that's cheating. Yeah. So this is always one. Or does this increment? Oh, we got always one. Yeah. All right. Let's see. Always one. So why is it always one? Yeah. Yeah. Yeah. We're also adding at to the stack. So whenever we get context here, the stack pointer will be at a point where before it wasn't allocated, right? So it's just the default stack pointer. So this line would allocate it on the stack. So it would bump it up four and then initialize it to zero and then increment it from zero to one and then print it. And then if we do a set context, it resets the stack pointer back to its original one. So then it would bump it up to four again, which would get the same address. But it doesn't matter because we reinitialize it to zero. So it would override it and then increment it from zero to one, go back up print. Oh, no, one again. That just keeps on going in front loop. Yeah. No. So the, so it set context only changes the registers. The memory doesn't do anything. So if for some reason in here, I like had an if statement I could tell and I just guessed like if I just read the old stack value, I would get one or whatever because the memory doesn't change back. It's just the registers that change. So yeah. So this is changing this, changing values on the stack. Whenever I change the value of X, but whenever I do a site context back, the set or the stack pointer gets reset. And then this will just follow the same thing again. So I'll do the same steps, expand the stack by four again, and then that would have the old value still on it, but then it overwrites it with one or zero and then increments it again. So yeah, important thing to know that that will be a fun thing to debug that values on the stack don't stay the same. Yeah. No, this gets overwritten. So here, like stack gets saved here, increments it by four. And then when it set context back, it's the old one that was for less than whatever it currently was whenever it did set context. So then just grows it to the same amount. So yeah, that's why it's an infinite loop. And I don't get a stack overflow or anything like that. Just keeps on going forever. Okay. So that's cool. All right. So that's fun. I will show you how to make a new user thread. So I will declare a stack for my new thread because I'm not going to reuse whatever is currently executing main. So I will declare a stack for thread one by calling new stack. Then I have to call get context on it, which will save the main threads registers and everything like that. You just always have to do this whenever you initialize a new stack. There is another call we will use to use to manipulate the register values, but you just always have to initialize it with a get context here. Some things I can manipulate about the context is this UC stack. So I can set the stack pointer through this. So I will set the stack pointer to thread one stack. And then I will tell it the size of the new stack, which just uses macro and then I will do this make context. So what make context will do is go ahead, set the register, find out whatever your machine stack pointer register actually is, make sure it's consistent with that UC stack argument. And then you can also give it a function. So this will change the program counter so that whenever you do a set context to this T1U context now, it's as if it starts executing that function instead of resuming from wherever the get context call was. So if I do a set context on this now, it will try and execute T1 run. You can also give it how many argument. You can also pass it integers. So you can only pass it integers. So I have to do this casting because C types don't really like that. So here you can specify how many arguments you want to pass it. They have to be integers. And then here I'm going to pass an integer called 42 because you might find it useful for the lab or you might not. So yeah, let's go back and see what thread one run does. So thread one run, all it does is it prints whatever the argument we gave it, which in this case should be 42. So if we just make that context and before doing anything, we do a set context to it, T1, what should happen? Yeah, then what's going to happen after I print? So we got an infinite loop because this is going to call set context or something. So this returns and then it's going to come back here and then just call it again and then infinite loop. All right, let's see what happens. Whoops, what did I do? Oh, oh, whoops, I am fairly myself at the beginning. Whoops. So here just prints off once. So that was due to a rule that I haven't told you. So the rule is I would set context to T1. So yeah, I would start executing this function. But the rule is whenever this function returns, that thread would have like exited. So through you context, if you don't do anything special, it will just if that or if that returns, the process ends. It just calls exit in the process, process is no more. So everything ends. So what you could do, which is similar to what you said, is I can set it up, I can uncomment this. So there's a field called you see link and that will change the behavior of whatever happens whenever this function returns. So if I set you see link, it will use that use you context. And then whenever that function it returns, it will automatically do a set context on that. So it would automatically whenever that returns. Here it would be like essentially it did a set context T zero. And then where would it go back to? Yeah, last time I called get context on the T zero context. So then it would go through here, reinitialize that T1 you context then set context to it. If I do this, I should get myself in another fun pickle where this is another infant loop, but I just did it more. So that is our second infant loop of the day. So that was fun. Any questions about that infant loop? OK, so let us go back. So I will do this so I remember. All right, so. Let's come at this. So let's create another thread because that's more fun. So we'll create thread to initialize it with get context. And then we will set it stacked like we did before. And then we'll just do a make context that looks a bit better because we don't use any argument. So you just tell it the thing you want to initialize. And then what function to run. So we set up thread to execute T2 run. So if we have that, yeah, so if we have that, we can go ahead and let's do a set context to. So if we do a set context to T1 context, well, what should happen is we go through, we execute T1 run, we print and because I commented out that you see link again, it should just exit the process and nothing should happen. So let's go ahead and make sure that I am right. So just print hooray, yay, nothing happens. So if you want to make sure that something does happen, well, I can do this so I can make it such that whatever T1 exits, then it will switch to thread to. So in this case, I should see hooray got and then T1 run finishes. And then this will execute. So it should say T2 should be done, switch back to thread zero. In this case, I will delete thread one stack and then set context back to thread zero, which is that a good thing to do? Probably not. So if I do this, well, I'm at another infinite loop because I resume again back to the last get context, which I did not. It's at the beginning of the whole program, so it just runs again. So it creates a whole two threads, they execute each other, it comes back and oh, geez, it killed my computer. Oh, that's not good. Oh, bad things are happening. I did not kill it quick enough. Oh, that's not good. Oh, I can't even log into my virtual machine in another terminal. That's great. OK, we're back. Sweet. All right. So if we don't want to be in an infinite loop, let's see. We do it instead of calling set context to thread one. Well, we can use this thing called swap context and that will do a very nice thing for us. So swap context will essentially call a get context on the first argument, so it would look like it resumes back from this swap context call. So thread zero would resume here. And then the second argument, it does a set context on that argument. So that will save the current state of thread zero to the thread zero you context. And then do a set context to thread one context. So now in this case, what should happen is, well, thread one run would execute print hurray and then return. You see link is set so that when it returns, it automatically does a set context to thread two here. Then thread two would say, hey, thread two should be done. Deletes thread one stack. And then does a set context to thread zero, which should look like it resumes here. Then it should print main is back in town. Delete thread two stack and be all good. And then my program just exits because I returned from me. So that had three threads and I switched between all of them. Yeah. So, yeah. So instead of doing set context, I did the swap context instead. Yeah. So here, the last thing thread two does is do a set context to thread zero. So before swap context, the last time I called get context on thread zero was here. So it just restarted the whole program again and then went through that. But because I did swap context here, it's like calling get context on the first argument. So if I do a set context back to thread zero, it would resume right after that swap context line. And also does me the benefit of doing a swap set context to this. So this would start executing thread one. And then if we do a set context on thread zero, it will come back here. So any questions about that? So that's most of the threading library, right? That's essentially threads and then on top of this, you are implementing some behavior that makes it easier to use in this. Yeah. If I just delete them here. Yeah. Oh, like if I just do this. So if I do this, that will probably be bad because, I don't know. OK, it shouldn't have worked. I guess an MAP twice is fine. But this would delete thread one stack twice. Oh, if you didn't. Yeah. If you just remove this, then that's fine. But technically should delete it as soon as it's not used anymore. At this point, this is like the soonest time that I can detect that that stack is not used anymore. But yeah, you could delete it there. Lucky thing about Valgrind and them being stacks is if you don't delete it, Valgrind will not complain at you. Even though probably should. So swap context will essentially simultaneously do a get context and a set context in a way that makes your life a lot easier. So it will essentially do a get context on this. So it would write all the values for all of its registers to that you context, whatever just executed it. But it's going to play with the program counter such that if you do a set context back to it, it resumes after that call and not as part of it. And then what it does on this side is it just does a set context on this one. But you can imagine if you had to do them both at the same time. So you want to save your values and then do it set context as the last thing. But if I didn't have swap context, it would be a bit trickier to implement. I mean, you could probably do it because it would essentially get and then do a set. And I have to do it in such a way that whenever I return from this get, I have to make sure I don't call set. Otherwise, I just didn't fit loop myself immediately. So I could have been mean and say do this lab without using swap context. Technically, you can. But I will just shave off a good five hours for you. All right. Any questions about that fun stuff? Okay. So I will show you how to use a link list. So there is a sysq.h you are allowed to use. And it will define a doubly link list for you if you use a tail queue. Why they call it tail queue? I don't know. It's a tail queue. Don't worry about it. It works. So how you use it is you define a struct and in that struct, you put whatever fields you want. So in this case, for this lab, the only thing that should be in a link list is probably your ready queue. You should probably not have your process control block as part of a link list. All you really need to do is keep track of whatever the IDs of the threads are that are in your waiting or ready queue. So in ID is the only thing I want in here. And then there is this tail queue entry macro. So that needs, as a parameter, the name of the struct it lives in. And then it just needs a name for this field.  So you can think of this macro as just defining previous and next. Then this tail queue head will define the structure for you. It will name it whatever is in this argument. And then it will be a link list of these types of structures to it. So it should be the same as entry. Then here I can declare a list head. And that is basically just declaring a new list. So this list head element, it won't have an ID or anything associated with it. It would just have a pointer to the front and the back of the list in this case because it's a double-ended link list. So that's what this list head would represent. If you wanted to, you could just call it list. I just call it list head because that's what it's named. Then how would you, you would use it where it actually saves some code is if you want to print the list, I could print f list. Then you declare a pointer to your list entry. And then you can use this till queue for each method. So you give it the pointer you want it to set for you in every iteration of the loop. Tell it the address of the list you want to use. In this case it is that global called list head. And then you have to tell it the name of the fields that you set right here. So these two things just need to match. So after that it will just iterate through that list in order. You don't have to do anything else special. It will not print the last element of the list. There won't be anything null or anything like that. You should use this to iterate through lists if you need to. Mostly in this lab you'll only have to do iterations for debugging. And that's pretty much all you need to use it for. But in this case I just print off what the idea is of every element that is currently in the list. If you want there's also some things where you can get a list entry directly. So like you could ask for the last element of the list. So you just give it the name of the, or the pointer to your list. And then the name of the data structure whatever you named it just has to be consistent. Then here it would print off whatever the last entry is of the list. So how do I use it? So let's have a main. In here we initialize that list. So we'll go ahead initialize the front and the back pointer for you. And then you don't have to deal with pointers. There is a macro to just ask if the list is empty. So here they generally just want the address of the list you use. So here I just assert that the list is entry because I just initialized it. There should be nothing in it. Then here I declare a list entry on the stack because I'm just showing you how to use this. For your program if you want to last longer well this should probably be some malloc space. So here I just set id equal to one and then I use insert tail which needs the address of the list. Then a pointer to the entry to add to the list. And then the name of the pointers field that has the next in the previous. And then it will just insert it at the back of the list in this case because it's called insert tail. There's also an insert head. So if you do man let's just call it tail queue init. It should tell you the name of every function you can use for it. You can see what the arguments are supposed to be. So for instance for us if we're like just putting stuff at the back and running stuff from the front. Well you insert it to the tail and then you might want to see what's at the head of the list. And then that will give you a pointer to the entry. And then you know you can go ahead you can use tail queue remove to remove it from the list. Let's see how that looks. So we insert one we print the list so hopefully it just contains one. Here we declare another new list entry. Set the ID to two. We insert it at the tail so it should be at the end. So our list should be one two. Nothing terribly special. We'll print list and then we'll print the last element of the list which should be two. Then we do a remove. So remove again needs the address of the list. A pointer to the entry to remove and the name of the pointer fields. So if we remove one it should be gone from the list and this should be like super not surprising. So we insert one. The list has element one in it. We insert two at the back. Our list has one two. The last element is two. If we remove one our list just has two in it. Any questions about that? Hopefully not surprising. Highly suggest you use this instead of implementing your own link list. This works. Yours may not. This plays with all the pointers for you. It's a full link list implementation. So tail queue is a doubly link list. So it has next day and previous and then the head. You have fast access to the front and the back. If you look through the documentation there's like... Do they have... It's not here but in that queue.h there's like all types of different lists. So if you want to change it to a singly link list for whatever reason all you have to do is change the name of tail queue to whatever the hell they call it. I forget what they call it. It's like an S. I think it's just an S list or something like that. And also you should have practice reading this because I use it in lab five. So but it's just a link list. Yeah. Yeah. So the pointers is just whatever you call this tail queue entry thing. So as long as that's consistent you could call it whatever you want. I would probably just call it pointers. But you could call it whatever you want. It doesn't matter as long as you're consistent. So this is just a magical macro that will create in this case and next and previous. If you change it to be a singly link list it would just create a next for you. It saves you some typing. You don't have to. You can easily change your list implementation if you really wanted to. All right. Well, let us do an exam question then and see how much we have learned about you context. So I will give you this question. Whoops. No, I will give you this question. Here we go. So this is from some exam where they say, OK, we have some global variables. We have an int i initialized to zero. And then we have two U context, one for thread A and one for thread B. And then they're initialized so that the context for A starts executing thread A and the U context for thread B starts executing the function called thread B. So it says they get all initialized and then the kernel or one kernel thread does a set context to U A. What happens? Do I see any output? If I see any output, what is it? Let's have a look at that and I will give you a minute and then you can give me your guesses after you think about what in the heck that does. Any initial guesses? It won't work. So when it does a set context to B, it's initialized here to start executing thread B. So it should work. That part should work. Prince 1? That's the start. Prince 1 at the start. That's a good start. A0, B0, A1, B1, and then ping pong like that. But not an infinite loop. Stop at 3. Okay. A infinite loopers? We got some infinite loopers. All right. Let's see what actually happens. So here, U context for A set up to start thread A, right? So it declares a variable called D. Where does that live? Stack, right? Thread 1 stack specifically. So in thread 1 stack, there'd be a variable called D and it's initialized to 0. Let's just say it's initialized to 0. So go in the while loop. So what's the value for I? Currently 0, hopefully. So is 0 less than 3? I hope to God it is. Then it would increment I from 0 to 1. Then it would print A, whatever the value for I is. What's the value for I? 1. So far not a trick question. So it would print A1. Then it sets the value for D equal to 0. And that is on A stack. So 0 gets replaced by 0. That does a get context for thread A. So now if UA returns, it would return right here after the get context call. Then it checks the value of D. What's the value of D right now? 0. So that is true. Then it sets D equals to 1. So if it sets D equals to 1, well, now its value is 1. Then it does a set context to B. So now we start going from the purple. So thread B, it declares AD. Where does that D variable live? On thread B stack, thread 2 stack, whatever you want to call it. And it's initialized to 1. So here, what is the value of I? 1 less than 3. So it would increment I from 1 to 2. Then it would print off B2. And then it would set its value of D from 1 to 1. Then do a get context of UB. So if UB gets a set context on it, it will now resume there. Then it checks the value of D. What's the value of D? 1. So that is true. So then it would change D to be 0. And then do a set context to A. So now we are back to A. Now it's going to check its value of D. What is A's value of D right now? 1. Because it was on its stack. So we resume back. Stack doesn't change. We didn't reallocate it or anything. So its value is 1. So it would not go into the if statement. So it skips through that. And then it goes back to the beginning of the while loop. So what is the current value of I? 2 is 2 less than 3. Hopefully not. 2 is less than 3. Okay. Woo. Alright. Been doing this too long. Alright. So I gets incremented. So if 2 goes to 3, it would print off A3. Then it would set its value of D to be 0. Then after that, it does a get context of UA again. Doesn't move it. It checks its value of D. Is its value of D 0? Sure is. So it would set its value of D to 1. Then do a set context to UB. So UB starts executing what's thread B's value of D? 0. So would it go into that if statement? No. Then it would go here. Check the condition. What's the current value of I? 3 is 3 less than 3. Hopefully not. So it would fall out. And then it would hit the end of the function and then return. If I don't say UC link is set to anything, just assume it's not set. So the process is now done like this. We're done. So we get A1, B2, A3. And spoiler alert. If you want to implement swap context, this is essentially kind of like swap context.  So you could actually implement swap context if you really want. Yeah. So git context just saves the value of the registers. That's it. Like where the stack pointer is. If you modify your stack, that's not saved as part of the git context at all. If you modify values on your stack, that's not part of git context at all. It doesn't care. It just saves your stack pointer. So if you change any values to anything, stays the same. So I'm only modifying thread one stack. Nothing else will modify it for me unlike the global because they both see the global stacks should be independent, which is why it stays the same whenever I come back to it. It's the same value it was when I left. All right. Any questions about that? Oh, it's time anyways. Yeah. If thread A just finishes, and then thread A finishes, then if it doesn't have a UC link, that process just exits. Yeah. All right. So just remember, phone for you. We're all in this together.


Well, good afternoon and thank you everyone for being here today. Last week we concluded the interview for the next Secretary of Education and I'm pleased to introduce Dan French as our finalist. Dan started his career in education as a high school social studies teacher, moved to K through 12 principal, and then superintendent in Canaan, Vermont. After living and working in the Northeast Kingdom for 15 years, he moved south to serve as a superintendent of the Bennington-Rotland Supervisory Union from 2007 to 2016. In 2009, Dan was named Vermont Superintendent of the Year and served as president of the Vermont Superintendent's Association from 2010 to 2012. Since 2016, he has been the coordinator of the school leadership graduate program at St. Michael's College where he taught graduate courses in leadership, the legal and financial management of schools, and using data to improve schools. He's the right person with the right experience at the right time, and I want to thank Krista Hewling and the State Board of Education for their diligence and urgency in sending me three highly qualified candidates. We're fortunate to have someone with his expertise in this critically important post because this is a pivotal moment in the history of public education in Vermont. We spend about $1.7 billion every year funding education. It's the single largest investment and expenditure we make as a state, and the fact is, like many other areas, the education system is being weakened by our challenging and changing demographics in an increasingly inefficient system that's diverting budget dollars away from the kids. As most Vermonters know, the K-12 system was built to educate more than 100,000 kids. Today we're educating fewer than 80,000, that's 27,000 fewer than 20 years ago, and the declines continue at a rate of about three students per day. Our student to staff ratio is decreased from about six kids for every one employee to about four to one. Even since Act 46 of 2015, which streamlines school governance costs grew by more than $60 million, while the number of students has continued to decrease by about 2,000. These trends have contributed significantly to the affordability crisis we face as a state and many families face as well. They have caused inequality between districts and inefficiencies that divert millions of dollars away from our kids. To be very clear, my focus is not on cutting spending. Everything we have done and everything we will do in this area is all about spending money far better than we do today, so we can do more for our kids and make our education system the very best in the country. Think of it this way, we are now spending more than $1.7 billion to educate fewer students. According to the National Education Association, we have the largest per student investment in the country, spending twice the national average. And while we have a good graduation rate, our student test scores are only two percentage points higher than the national average. Unfortunately, despite the spending, we are not making substantial gains in improving outcomes for disadvantaged students, and only about half of our high school graduates go on to receive a technical or trade credential or earn a college degree. Outcomes in funding from school to school also remain unequal. We have some offering a wide range of foreign languages, environmental studies, planning-edge science, technology and engineering programs, and we have other schools that can't offer any of these opportunities. The fact is, it's time to have the courage to admit we can achieve better outcomes for kids and attract more families, and that is why I am appointing Dan to be our very next Secretary of Education. Dan sees the opportunity and the necessity to transform our system from good to great, and he has the expertise to work with districts and local education leaders to re-center the entire system's focus on expanding opportunities and improving outcomes within available resources and at a cost we can afford. Finally, I want to thank Acting Secretary Heather Boucher for her leadership and all the staff at the Agency of Education for their hard work through this transition. Over the last four months, Heather has been a valuable and relentlessly positive member of my cabinet and has worked closely with the staff to manage the day-to-day operations at the Agency without interruption. We are so very fortunate to have had Heather at the Agency of Education for during this transition and will continue into the future. With that, I would like to turn it over to our new Secretary of Education, Dan French. I want to thank Governor Scott for the opportunity to serve as Remind's next Secretary of Education. Although we have challenges in our education system, we are fortunate to have significant talent and capacity for innovation at all levels. Because of this capacity, I'm optimistic about our future. Many of our challenges in education could be seen as systems or organizational challenges. Act 46 has been very successful in moving us down a path towards right-sizing our governance structure. I believe now we must consider how we can leverage this work to transform our system into a world-class education system, a system that offers expanded learning opportunities for every Vermonner, and a system that can serve as a catalyst for the broader social and economic development of our state. I'm excited about this work and the opportunity to help modernize our education system to better meet the future needs of our students, their families, and our state. Thank you. I'd now like to invite Krista Huling, our Chair of the State Board, up, say a few words, as well as Cora, class of 2034. 2034. That's right. So we want to be a family-friendly state. Here we go, with a press conference quickly. So I just want to, this whole process has really thanked the Governor for going through it. It was our pleasure as a State Board to put forward three highly qualified candidates. I think the tough job as the Governor was picking them on the three, and he did a great job. We are very lucky in the State of Vermont to have Dan French in his experience. I'm very excited as a State Board member and Chair to have the experience going into Act 46 in his perspective and looking forward to working with him. And I hope, you know, really building, you want to touch the flag, building an education system for her and all of her classmates. So I can't wait to start that good work. Yeah. You just want to touch the flag. It's very exciting. Thank you very much. Yeah. Thank you. With that, we'd be happy to answer any questions you might have. Mr. French, how old are you and where is your brother? Almost 55 years old. I live in Manchester, Southern Vermont. Okay. 54. Yes, that's correct. Are you going to move to Vermont for zero? Yeah, I'm going to figure out a way to certainly work from the area, so, yeah. And what's your most recent professional? Recently, the coordinator of school leadership program at St. Michael's College. I've been there for two years. Prior to that, I was a superintendent for nine years in Manchester. One of the philosophical struggles you walk into here is this disagreement between the governor and a lot of lawmakers over how forceful a hand a Montpelier should have spending at the local level. Do you think that the legislature, the executive branch, should be doing more to get a handle on school spending than they've done to date? Yeah, it's a complicated issue, and as the governor said, I've been involved on the other end as a school leader at the local level for a number of years, going back to the inception of Act 60. So I've been around Act 60, Act 68, Act 130, with Union High School funding, and now with Act 46. I think, you know, through all that experience and time, we've had to struggle, you know, trying to figure out a way to control our spending. I think spending is an issue as well as figuring out how to pay for it. But I think it's something, I have some experience working with the legislature. I think I'm fairly well known to them as well. So I'm hoping we can partner to find a solution to its very complex situation, but we have to do so rather urgently because many of our ideals that we hope for outcomes for kids aren't going to be possible unless we figure out a way to make a more sustainable system. The governor, did he answer your question? The governor put forward a five-year education plan headed a number of activities. Can you say you 100% back everything in that plan? Yes, I mean, I threw the, as Krista said, through the search process. I mean, that's one of the things I had to check on. And I'm very attracted to strategic nature of the governor's plan. I think it's something I've very consistently tried to work as my local level as a school district leader is to try to evolve the system. I'm very concerned about modernizing our system, but making it more relevant for students. And I think there's a lot we can do around efficiency and particularly use of technology to make our infrastructure more responsive to the public. Do you think we should not have had any property tax rate increase this year? Well, that gets down the weeds a bit on that. You're the wheat man now. Yeah, I was, I will be on August 13th, but not back three months ago. So I think, yeah, ask me that next year and I'll tell you how it goes. I mean, this is a pretty big statewide debate. Sure. You've been following and you're taking over, so. Right. I mean, was that the way to go? Was the governor's no property taxes? Yeah, I wouldn't say taking over. I think it's important to acknowledge that we have a partnership with local decision makers on that. And that's something, what I hope to bring to the table is an understanding of school governance practices. And I think we are a local control state. Yes, the state's ultimately responsible, but we delegate a lot of authority to local decision makers and we need school boards to be effective in their governance practice. A lot of the consulting work I do with boards is around that issue. It's for them to use their policy more forcefully to measure for student outcomes on an incremental basis. So we don't wait just to the end of the year to find out how we did. And also to really work hard on superintendent evaluation to ensure the superintendents are being evaluated on those student outcomes incrementally. I think of the idea that there needs to be a higher staff to child ratio. Yeah, I think it's symptomatic of the overarching system. I think it's, you know, it's going to be a question, are we treating the symptoms versus the underlying causes? I think it's a great bellwether and it's something that should be of concern and has been a concern for the professional associations in the state for a number of years. It's something we're going to have to address. Governor, I'm sure you all tell us who the other two finalists were, but were they both from Vermont or were any of them from elsewhere? Again, you know, it's a human resources issue and we're not going to divulge any of the circumstances. There were three finalists sent to you. Three finalists. What was the total pool of the board of education in your national search? I, yeah, I believe it was a national search. Maybe Christa would be able to tell us that. What's your game plan in terms of pursuing education reform over the next year, criticized by some people in the legislature for not coming to the table on January 1st with fully formed, ready-to-go legislative proposals? What happens between now and January in terms of preparations for the next round of debate in the legislature? I'll first have to get through this little election that's going on in August and then in November. But suffice it to say, we'll try a different approach. We've tried two different approaches. They didn't work out quite as well as we had hoped. We'll continue to work on an initiative that we feel would be in keeping with our goals to grow the economy, make Vermont more affordable, as well as grow our workforce. So from all those standpoints, we'll be moving forward with a different initiative to work with the legislature because we all should have the same goals. We need to provide for an education system that is sustainable, spending that is sustainable for Vermont so that we can attract more people into Vermont and keep more businesses here as well. What did you turn to for advice or guidance as you worked through these three names and figured out who you would select? Well, again, three very highly qualified names and we're very fortunate to have the state board forward those names to us. But I look at every interview, every time that I'm looking, seeking to add a member to my team, I go through those four C's that I talk about a lot and character means a lot to me as well as competence and commitment. But chemistry is probably one of the most important and being able to work with a team of the common goal and putting the team ahead of their own egos and Dan fit all those buckets. Were there any outside people you turned to though for advice? No, I mean we worked together. Again, I believe in a team approach. So we had many cabinet members involved in this process as well. So it's what we saw with the fit that we needed for the team. How much talk was there about your approach to education reform, education finance reform? Did you ask the candidates? Yeah, we didn't get into the specifics in terms of what my goals are other than that we have a system that I believe is inefficient, that we need to transform to something, think outside the box, have the courage to think about that as well. So there was no litmus test of any sort. It was just trying to get a flavor of where their stance were and what their commitment was to the process. I would say we've had them for the last month, maybe? I've heard about two months and I was just wondering why two months? Well, two things. It's an important decision, first of all. Secondly, I need to get through the legislative session. We had a very, very, we had a very competent person as acting secretary leaving the agency as well as working with us. So at that point in time there just wasn't any rush in doing so. I'd like to ask Mr. French, I assume you'll be a key part of the team that will be developing the governor's approach for next year. What are you thinking about? How would you approach these issues around funding and quality? Well, right now I'm just looking forward to getting into the agency on August 13th and certainly reviewing their work. There's a number of priorities that emerged in the last session, particularly special ed funding, and certainly working with the state board on the statewide governance plan. So there's a couple things in motion right now that are pretty significant, but I intend to enjoy going through that organization and seeing what's going on and get ready for the legislative session. How does your experience working in local schools informed? I think it'll inform. Like I said earlier, my inclination right now is to really put some emphasis, I think, on working with school boards in particular. That's where I've done a lot of my consulting work. Act 46 has really taken a lot of energy on their part, so they're spending a lot of their local capacity just in the act of merging itself. So I think what we need to start to do is to turn that corner and say, okay, now we've merged, now what? See if we can realize new opportunities and get better organizational performance. I think that's probably based on my experience where I look forward the most to making an impact. Any ideas about new initiatives, do you think? School districts might want to look at after merging. You know, it's a little premature. I think I'll wait until I finish that assessment with the agency and get my team organized there and try to make sense of that. We received the list from the State Board for the NFA.