Welcome to this week's edition of This Week in Civil Engineering, also known as TWICE, a weekly news show focused on providing civil engineering professionals with the most important and relevant industry updates. We hope you enjoyed Kamini's first episode. I'm your host for this episode, Jeff Smith. I'm a licensed professional engineer practicing structural engineering in New York City. I oversee a team of the most creative designers, building, renovating, and sustaining the world's future landmarks. You can find all of the episodes of This Week in Civil Engineering at TWICE.News. That's TWICE, T-W-I-C-E.News. References to all of the news stories covered will be in the episode show notes. And if you're watching on YouTube, be sure to subscribe to the TWICE playlist to receive weekly episodes. Now it's time for What's Happening This Week in Civil Engineering. Now it's time for This Week's News. You are about to hear excerpts from the story's reference, links to all the full articles can be found at TWICE.News. Let's cover the biggest breaking news stories from this week that might affect civil engineering companies and professionals. The U.S. Department of Transportation awards $1 billion in the latest round of build grants from Tom Ichnowski at ENR.com. The U.S. DOT awarded 70 projects totaling $1 billion in 44 states for improvements to highways, bridges, transit systems, and other types of infrastructure under the better utilizing investments to leverage development, also known as build grants. Congress capped the total grant amount for an individual state at $100 million. 75% of the amount is for highways, roads, and bridges. This is subject to a maximum of $25 million for six projects, one each in Florida, Iowa, Maine and Pennsylvania, and two in Texas. The grant will finance the replacement of the Teconic Bridge over the Kennebec River connecting Waterville and Winslow to the extent of $40.5 million. The biggest amount, $50 million, was received by Texas for two projects, followed by Florida at $49 million, also for two projects. Highway and Bridge projects got 77% of the total 54 awards. How will this latest round of grants affect your organization? Next up, why specifications and codes are the key to more concrete innovation? From Matthew Jetmore at ENR.com. The purpose of codes or specifications for concrete structures is important to ensure safety, sturdiness, and resilience. There is a perpetual debate between the need for prescriptive or composition and procedure of concrete mix versus performance specifications for concrete. Historically, it was sufficient to specify the recipe and the procedure to obtain a certain strength, but what we are really concerned with is the performance. The same concrete mix and process can lead to varying results and performance depending on many factors, including the quality of the ingredients and the ambient conditions. This goes on to show that the performance specifications are the best to use. Prescription specifications do not take into account the innovation in chemical admixtures to enhance performance. The fast-changing requirements of dense high-rise structures needed in record time and the fast-changing safety norms makes innovation to get the required performance necessary. Instead of using prescribed ingredients based on historic generalized assumptions, to set an example, the use of carbon dioxide mineralized concrete to reduce the carbon footprint did not exist decades ago. It is not the case that prescriptive specifications do not change the procedures and ingredients to suit specific performance needs from time to time. Pre-certification, quality control, and testing are needed, but we also need to specify performance to accommodate innovation and better methods. You can find the entire article at ENR.com. Also, episode 153 of EMI's The Civil Engineering Podcast features an interview with Ron Berg of ACI covering current concrete trends which can be found at civilengineeringpodcast.com. Next, let's look at the biggest civil engineering stories in the United States. First up, Congressional Transportation leaders back a one-year extension of the FAST Act from Eugene Malero at TTNews.com. The 2015 FAST Act, which expires on September 30th, has the support of Congressional Transportation leaders for an extension of one year. Chairman of the Environment and Public Works Committee, Bissaro believes the Act should not be allowed to expire and should not be extended on a month-to-month basis, but that there should be a five-year, $287 billion reauthorization of the Highway Law. Making long-term investments in roads and bridges will reduce red tape, ensure environmental protection, and recovery of the economy. FASIO, Chairman of the Transportation and Infrastructure Committee, agrees to backing a year-long extension, but neither agency has come up with a concrete roadmap for the extension. It is felt that it is likely to ride piggyback on a must-pass federal funding legislation rather than coming to a separate bill. Like the Highway Law, federal funding authority expires at the end of the month. During the State of the Union Address, the President urged Congress to pass Bissaro's Highway Bill, which gained pie-partisan support in committee. The Democrats desired the extension of the nationwide high-speed internet, a five-year surface transportation rebuilding plan, and further streamlining of environmental permanent guidance. Nearly 100 groups, like the American Association of Port Authorities, propose a year-long extension of the FAS Act, saving the need for $37 billion and $32 billion in emergency funding for departments of transportation and public transit agencies, respectively. The COVID-19 pandemic has resulted in public agencies revenues drying up, leading to delays or cancellations of $8 billion in surface transportation projects, with no support from the federal government in sight. ATA spokesman Sean McNally stated that an extension should not take the pressure off Congress to act on a long-term bill. This is an interesting and important story in the CE world. It seems unlikely that the long-term approach will succeed, but a one-year extension may be favored in view of the uncertain situation that exists in our economy. Civil engineers with an interest in infrastructure will await the outcome with baited breath. Next up, New Oregon Inlet Bridge to get behavior tests with billions of laser points from Jeff Hampton of the Virginian pilot. Engineers are conducting a high-tech survey marking billions of points on the New Oregon Inlet Bridge to make sure it reacts as designed in the harsh, out-of-banks elements. When it is complete, state officials will have a three-dimensional map covering every fraction of an inch along the 2.8-mile-long concrete span, said Pablo Hernandez, a bridge engineer for the North Carolina Department of Transportation. It's the best way to make sure it behaves, he says. The bridge is an infant in its life. We're making sure it's behaving according to its design, said Hernandez. The $252 million Mark Bassanite Bridge opened in February of 2019 to replace the old Bonner Bridge that had lasted 56 years. All beyond its expected lifespan. Set on North Carolina 12, the bridge connects northern outer banks to Hatteras Island. The bridge won awards for its strength and design, and is expected to last 100 years even in the harsh, out-of-banks environment. Many of its supports sink 140 feet into the bottom of the volatile waterway. Nearly 50 flexible steel tendons run lengthwise through holes in the upper bridge parts to tie it all together. The old span was crunched by a loose barge in the 1990s and had to be closed for repairs. It endured dozens of hurricanes and winter storms. Seven years ago, currents in the Oregon Inlet scoured sand away from the support pilings to a precarious level. The state closed the bridge while replenishing the sand below and stabilizing the pilings. At times, pieces of its concrete fell into the water and rusting reinforcement steel was exposed. For the last several years, the bridge needed one repair after another, but the bridge was also monitored by GPS surveys, and despite its age and propensity for repairs, it never moved, Hernandez said. State engineers want to be sure that the new bridge behaves in the exact same way. EMI is currently seeking a guest from the project team to pair on the Structural Engineering Channel podcast, which can be found at structuralengineeringchannel.com. Let's take a quick break from the news for this week's Civil Engineering Career Inspiration, a story from my days as a new engineer. About two weeks into my first engineering job at Sillman, Bob Sillman, the firm's founder and president, asked me to join him for a meeting. For those who didn't get a chance to meet or work with Bob, you should know he was not only a great engineer, but an even better person and mentor. Given Bob's talent and standing in the industry, I assumed I would be tagging along with him to be a fly on the wall and just get my feet wet seeing the type of work I could expect to encounter during my career. During the meeting, when the architect asked Bob a direct question, he looked at me and said, I don't know, Jeff, what do you think? I was completely stunned. After I composed myself, I gave what I thought was a reasonable answer and Bob agreed. It was a small moment in the meeting and probably nothing out of the ordinary for anyone else in the room, but it stuck with me to this day for so many reasons. One, Bob knew the answer and did not need me to respond, but he gave me the opportunity so that I would get used to speaking meetings and practicing skills not often taught in school. Two, Bob had confidence that I would not put my foot in my mouth. His confidence gave my own confidence a big boost and ensured that the architect would take me seriously in any future meetings. And three, it reminded me to never lose focus in a meeting because you never know when you're going to be asked a question or put in the spotlight. I took these lessons as I grew to be a manager and have tried to recreate these opportunities with my own staff. Given the impact this small moment had on my career, I recommend all engineers, no matter how junior or senior, find their ways of doing the same. And now back to the news. Next, let's move on to some international news and civil engineering from this week. First up, Network Rail to design and build composite footbridges from Rob Horgan at newscivilengineer.com. Network Rail, in partnership with National Composite Center, will design and build prefabricated composite footbridges Futura at its station. Composites are low carbon, corrosion resistant construction materials and will be installed faster and maintained easier. This will lead to less disruption and passenger inconvenience. This will also lead to cost reduction. The components will be prefabricated in factories with electronic controls for easy and fast precision fit assembly at the stations. This may be a welcome innovation in the CE space. We will continue to update you on this innovative topic. Next, the opening of the Rotong tunnel completed at a cost of about three thousand two hundred crore Indian rupees is crucial at a time when there are border issues with China in Ladakh from Suresh Sharma and Himanshi Duwan of timesofindia.indiatimes.com. The world's longest motorable tunnel at a height of three thousand meters and a length of nine point zero two kilometers constructed at a cost of four point four billion US dollars is located in the Rotong pass in the Eastern Pier Punjal range on the Lamanali Highway in India is now ready to open. It is 10.5 meters wide, 5.52 meters high with a foot path of one meter on both sides with a maximum speed of 80 kilometers per hour. It is estimated that the tunnel will see the traffic of three thousand cars and one thousand five hundred trucks a day. The distance between Manali and Le will now be 46 kilometers or 28.5 miles less, reducing travel time by four hours. The tunnel has fire hydrants every 60 meters, emergency exits every 500 meters, turning caverns every 2.2 kilometers, air quality monitoring every kilometer. In addition to the 4G internet network, emergency telephones are at regular intervals, broadcasting system and automatic incident detection system with CCTV every 250 meters. It has 11 KVA electricity and UPS power source in case of power failure. The opening of this tunnel is of great strategic importance as it will allow faster movement of defense equipment at a time when India is facing problems with China at the Ladakh border. It is certain that the construction of this tunnel has many stories of trials and tribulations faced by the design engineers and construction engineers. Detail, as they may become available, will be a great learning experience for engineers interested in tunnel construction. Next up, Japan's tallest skyscraper to be named Torch Tower to be built in Tokyo from Kyoto at scmp.com. Developer Mitsubishi estate has revealed that they plan to build the tallest 390 meter or 1280 foot high skyscraper named Torch Tower in Tokyo. It will be located in the Maranuchi Business and Commercial District in front of Tokyo Station. It will have 63 floors above ground and four floors underground. The Torch Tower will have offices, a luxury hotel, a hall for 2,000 people and an observation deck from where visitors can view Japan's tallest mountain, Mount Fuji. It will have three other buildings and a 7,000 square meter plaza. The total area of the project will be 31,400 square meters. The project is expected to cost 4.7 billion dollars and will be ready by 2027. At present, the tallest building in Japan is the 300 meter Abeno Harukas in Osaka and a 330 meter construction is underway by Mori Building Company in central Tokyo with the target year of completion of 2023. The tallest building in the world is the Burj Khalifa in the United Arab Emirates and stands at 828 meters. The race to reach the skies by architects and builders is on. The unique challenges faced in each of these marvels of construction will produce even more learning experiences for civil engineers and structural engineers alike. On that note, let's cover a few infrastructure related stories. Hurricane Sally, Pensacola Bay Bridge may be out of commission for a month or more. From Kevin Robinson at PNJ.com. A part of the road on the Pensacola Bay Bridge was destroyed recently during Hurricane Sally. Florida Senator Doug Broxen stated that it is likely to take more than a month to repair. The hurricane was expected to make landfall considerably west of Pensacola, but it came near Gulf Shores, Alabama, causing destruction in Pensacola. It caused a lot more damage than what would have been expected as it had been classified as a category two hurricane. Several barges had broken loose. Five washed up near downtown, a sixth was found near Escambia Bay and the Interstate 10 Bridge and a seventh was lodged against the Garcon Point Bridge. DOT staff will check and report the extent of the damages to local structures as soon as it is safe to do so. Hurricane Sally left 95 percent of Escambia County and 66 percent of Santa Rosa without power with no clear idea when power will be restored. The weather continues to create challenges to infrastructure worldwide and there is no doubt civil engineers will continue to be on the call to help to respond and to repair or help replace damages. And last but not least, Road Runner, crucial hurdle cleared for $1.2 billion project improving I-10 Barraza Aviation from Shaq Davis at Tucson.com. The plan for a $1.2 billion interstate 10 widening project in reconfiguration of the Barraza Aviation Parkway recently cleared an important hurdle in the efforts to one day provide better travel experiences in Pima County. The Arizona Department of Transportation's final environmental assessment to determine the impacts to the areas surrounding the project was determined to have no significant impact, the report says. The goal is to widen I-10 from I-19 to Colb Road and provide an extension of Arizona 210 Barraza Aviation Parkway from Golf Links Road to I-10. Alvaron Way in this area would be designated Barraza Aviation Parkway along with an interchange that provides direct access from Palo Verde Road to I-10, a dot said. Adding a connection between I-10 and State Route 210 in Southeast Tucson would facilitate the use of State Route 210 as a business spur, providing local downtown traffic with a desirable alternative to I-10, offloading traffic and thereby improving traffic operations on I-10, a dot said. Overall, the project would add up to two lanes in each direction from the I-10, I-19 interchange to Alvaron Way, up to four lanes on I-10 from Alvaron Way to Colb Road, as well as improvements to the corridors, interchanges, and bridges about 15 miles of road would be addressed. To wrap up, here's an inspiring quote to motivate you for the rest of your day. Obstacles are what you see when you take your eye off the goal by Vince Lombardi. What obstacles are currently in your path to success? There you have it. That's what's happening this week in civil engineering. You can find references to all of the stories mentioned at twice.news and all episodes are also published in video on EMI's YouTube channel at youtube.com slash engineering careers. Remember to subscribe on Apple Podcasts, Spotify, or wherever you listen to podcasts. And of course, YouTube for the video version. This is Jeff Smith, signing off. We'll see you next week in the meantime. Go be the best civil engineering professional you can be.


guess some of it would be to keep going and to keep trying and there is being there is great change being made and I guess some of the wonderings is well what do we do now like as far as you know your your support that was provided provincially and I know where do we go to now but I think you know when I hear that and I say well people need to know it's in you like you have what it takes to keep going and so I think that's important to know and for people to believe and understand well the project apart but I think when you're you're sharing like and even throughout today is that and yesterday was we're doing a lot of like the same things like we're headed in the same direction and so sometimes we think like we need to reach outside of our district or school walls to reach out to other people and so like with the project apart e-book and you know that's been exciting because working with you know you've been helping to connect with other districts for the work and it's you know collaborating with other schools across the province and to come together collectively to create something for use for all and we talk about like where is this work going to go and you talk about well ideally in it is to support our kids and our students within the schools but we think it's useful for you know educators community members within our own school communities but provincially and then you know Canada wide and I imagine others outside Canada will look at will look to this resource to to to help them understand you know residential school education from a first nation maintenance perspective from Alberta we're all working on a lot of the the same things and so you know we talk about well we don't need to reinvent the wheel because that is wasting our time and that we could work together to collaborate and share and then move forward and so people are anyone is more than welcome to access our resources in our website and we encourage people to make them their own because what works for MS in public schools doesn't necessarily work for all but it's a good starting point and so we we work hard on trying to role model you know the idea of generosity for others and I know for some people they they are shy to share their resources because they feel that others might may judge them or you know evaluate their resources but I think we need to move past that and to think about we're doing it for our kids and you know working hard to help support first nation maintenance students and eliminating the achievement gap and supporting first nation maintenance education and culture and building capacity within our school systems to support our kids our first nation maintenance education team we just want to be like massive district wide everyone is going to do this and it's mandated that everyone has to implement this resource or more make this change but we know that to make effective sustainable change we need to completely no one understand the reason why we're doing what we do and we to personally believe in what we're doing and so I think the change it it takes time and and you know talk talk about celebrating the small small successes within schools within system leaders and you know it's like we were thrilled when our superintendent and our board of trustees were willing and wanted to go through the blanket exercise and that is just been amazing and and I find it's you know when we talk about our circle of influence and you know when you impact that one person we know that they will impact others and it will continue to grow and grow and so to have faith in the process and to trust the process because I see it happening and it's just been absolutely amazing you know when we talk about reconciliation and knowing that our superintendent is you know completely 100% on board and believe strongly in that and when you have someone like our superintendent that can role model that for others is very effective and it's just it has been amazing and I'm quite proud of the work that our district is doing so it makes me happy well every talk about relationships right and building relationships with people to to trust that you're going to take them in the right place because you know I know you and we talked about I don't know what I don't know right and it's well you they you need to build that relationship with them so they trust that what you're gonna what you're gonna share and where you're gonna take them is a place that's authentic and meaningful and they continue to grow off of that I would like to share it with all of our lead teachers and our upcoming lead teacher sessions and so I would like for teachers to to experience it because I know with the blanket exercise we did that with our lead teachers and it has been phenomenal the amount of people that have requested it either in their classrooms or for their staff meetings so I feel that that will happen with the brand game I feel it's another avenue for people to to reflect on their own understanding of historical and contemporary realities for our First Nation Métis and anyone students families and community members so I know that for for some people it's you you share with them something but sometimes it's not that what they want to hear at that moment and so using different tools to help inspire people to want to keep moving forward so I I feel the brand game is another one of those great learning tools that we can share with our district you know I was excited about this day but I I guess reflecting now I just feel like you know it's been great having you as a resource as a go-to person and you have shared so much within the time that you have been with them and like joining the supporting our district so I guess I just want to thank you thank you so much I look forward I know that when people are involved in in this work it it isn't because they have to do something it's because they want to do something and so I am thank you because I know that your heart is in the right place


The Church exists to extend the love of Jesus to the weak, the poor, the young, the old, the down and out, and the powerless, but it doesn't always work out that way. In the sanctuary of vulnerable expressions of love, we will always find those who seek to use that space for power or glory or lust. People are abused in the name of Jesus Christ. The book of Jude reminds us that this is wrong.


As you can see my name is Ivan. I'm not even going to pronounce my surname. Some time ago I started working in KDE and that's mostly my background as far as Qt is concerned. I love giving talks, I love teaching and obviously I'm a functional programming guy. If you ever saw any of the presentations I had at Qt Dev Days or Meeting C++ or somewhere else. So first a couple of disclaimers. I usually start my presentations with...  So at least you can read what's written. So the first disclaimer is that you should make your code readable because somebody who can read your code afterwards might be a psychopath and you know where you're located at. That doesn't mean that you should actually write the code like you're writing for a high schooler. You should write advanced code and proper code, just don't use stuff that nobody will understand ever. The second part is that these are slides, this is not production code and blah blah blah. So why I decided to talk about the Qfuture. Quite a long time ago, the first time when I was at Qt Dev Days, I was talking about something related to futures and I mentioned Qfuture and everybody started laughing because we all know that Qfuture is a really crappy class. And because of that, from that point on, I always put some code snippet of Qfuture so that the audience can laugh and always I say okay, we are not going to go into a rant about the Qfuture and this time I decided to actually do a rant about Qfuture and you will see why. So first, let's talk about the future concept itself. In essence, the normal way to call a function is you call a function, when the function completes whatever it is intended to do, it will return a value and then you can use that value. But what if that function takes a lot of time to complete? What if the function is, for example, you're asking the user to type you're reading something from the drive, which can be slow, you do network communication, which again, you cannot guarantee that it will happen quickly. Instead of having a function which returns an actual value, what is the future? Okay, we usually build with this with callbacks, signal slots and creating a new thread and do the actual work on the thread. And our code starts looking really crappy.  This is a spaghetti code by George Hart and this is actually how a lot of cute projects really look like. And although this is really nice as art, it wouldn't be really nice as project design. So instead of having calls, callbacks and directly calling functions that return values, we want to have some advanced, simple but advanced concept called the future. What is a future? It's a handle that will eventually get a value. So you're getting a handle like a small box in which somebody will at some point in the future put the actual value. And that's a really, really simple concept. Now, how do you get the value from the future? The most obvious way when you see the API is to call.get. Who can see the problem in this pattern? Get is going to block. Essentially, somebody gave you a future for a reason. It's an expensive operation which will yield its result much later.  Like a normal function, you're blocking your main code. So this is something that you absolutely should never do. There are use cases for .get, but we are not going to go into those. Some of the libraries that you will be able to use with futures don't actually allow you to call .get on a future that is not completed. You will get a segmentation fault or an exception or something. Unfortunately, both Qt and STD send a library block when .get is being called. So what you should do instead of calling .get, when you get the handle, you don't care about the result. You just want to tell, okay, this is my box which will eventually get a value. And that box, you should explain to that box what it should do with the value when it gets it. So you don't anymore, you don't care about the value that you will get. You're just explaining the future, what it should do with the value once the value is available. So in this case, some set of the code. We have a handler and we want to, when the future arrives, we want to call a lambda on that value. But it will look like this in C++ 17, the middle line, handler.dan. You can pass, similar to this, not exactly, you can pass a lambda that will be able to use the value once it's completed. And fortunately in C++ 20 something, we will have a rate which will be a magical thing and it will be inspired by mornads and stuff like that. So we are going to skip that unless somebody is interested. If somebody is interested, you can ask at the end of the talk what the rate will be like. Okay, one quote from John Carmichael, we don't care. So in his blog post about functional programming in C++, he said that usually most of our bugs are because we don't understand the state of our program and in which different states our program can be in. And when you actually add threading and synchronous computations like futures and everything else, you just create much worse problems for yourself. So in C++, we have a couple of libraries that provide us with futures. One is the STD future, which is not so great at this point. In C++ 17 it will be nice. Boost future, which is what STD future will be. So it has .dan, it has everything that you wanted to do to have. And we have Folly future, which is a Facebook library. Folly future is designed after the same class in the Scala programming language. And this is the one that will throw an exception if you call a .get on an unfinished future, which is a beautiful design because it will force you not to use .get. And obviously we have the Q future and here begins the rant. So Q future started its life as a part of the Qt concurrent. And the idea was if you need to process a large collection of data, for example, some huge list of numbers.  Each of the threads calculates its part and then it returns the final value, for example, if you want to get a sum of a collection of numbers. So you had operations like filtering, mapping, so map reduce and everything else. And the main use case, especially with the .get method was the fork-join pattern. So you fork your process into a few threads. When all the threads finish, you join them and you get back the result. And that works really well for the use cases that Qt concurrent does. Unfortunately, in Qt 5, the idea was to make the Q future much more useful. So Mark from KDAB argued that Q future should not be in Qt concurrent, that it should be moved to Qt Core because it's a really useful concept. And it can be used outside of the Qt concurrent. So on the road to Qt 5, this is one of the mails Mark wrote. And finally we have the Q future as a part of Qt Core and all is well. At least that was the idea. The problem is that Q future is still meant to handle only thread-based asynchronous operations. So for example, you need to have a thread pool in order for it to work correctly and everything else. And still Qt has a lot of classes inside or a lot of methods that could have used Q future, but they're not because Q future is actually not meant to be used as a proper future. We have a Q meta object invoke method, which is something that can invoke Qt's meta methods. And from the documentation, you can see if the invocation is asynchronous, so you pass the Q invocation argument. The return value cannot be evaluated. Why? Why doesn't evoke method return a Q future? The second thing we have at least one class that is similar to Qdbus pending reply, which is who knows Dbus? Okay, so Dbus is IPC protocol on Linux. You call something, then you get the result. And because it can be an expensive operation, it can take some time. The pending reply is something that will allow you to register and know when the reply actually arrived. What is the difference between Qdbus pending reply and the concept of futures? Absolutely nothing. It's again, it's something, it's a handler, to a value that will appear sometime in the future. Then we have Q network reply, again, you're asking for something, you're getting a value at some point in the future back. And that thing also is not a Q future. So we have at least, I've listed at least three items from Qt, one item from Kd frameworks, and all of those essentially are futures. But we cannot use them as futures because Q future was not meant to be used like that. So why it would be really a nice thing to have a normal future that can model everything that we already have seen. Sometimes you want just to implement your own stuff, and you don't care whether your process result function will be called on a network reply, on a Dbus reply, on a user input, or anything else. You just need to pass it and tell it, this value will appear sometime in the future. You can't do it, you have to write process result for each and every of the Qt classes. That can return you a value sometime in the future because Q future is not the super class of all of those. And Q future cannot be legally used to model all of those. So it would be really, really beneficial if we could use Q futures in a normal way. So the next thing, if we kind of see for what we can use Q futures and we told that it's now Qt core and not Qt concurrent, how can we create a future, an instance of it? First thing, you open the API, you see there are two constructors. One constructor is the default one and one is the copy constructor. The default one creates an invalid future and the copy constructor obviously copies the future. So from the normal part of the API, at least as far as the Qt core is concerned, the only future that you're ever going to be able to create is an invalid future and copy it around. Which is again completely useless, right? Then you open the API documentation and what do you get? From the docs, to start a computation, use one of the APIs in the concurrent framework. So in a class that is in a Qt core, the only way to construct it is by going through Qt concurrent. So it's not really separate, right? And that's one of my favorite pet pills with Qt future. How do you get the value? You can call dot get, which we already said it's a bad thing to do. Alternatively, if you want to chain a continuation to a future, instead of calling dot then, which we don't have in Qt, we need to get this snippet of code. Because Qt future is not meant to be used like this. It's meant for the pork joint pattern. So let's continue. There are quite a few peculiarities regarding Qt future. Usually when you say this is a future of integer, you mean after a while an integer will pop up, right? With Qt future, it's not really a single integer. You can get a list of integers. A single future of int is not a single future value of int, but a series of values of integer. Again, why? Because it was useful for Qt concurrent. So whenever you see Qt future of t, you should just think for yourself in your head it's a Qt future of a list of t's. Okay? The second thing is that it can store an exception. So for example, you called the Qt concurrent run and the function that was run asynchronously throws an exception. It will be stored in the future so that you can access it somehow. The problem is that you don't have the API to access it. The only way to access the stored error inside the Qt future is to actually call .get to force the C++ runtime to actually throw the exception again to catch it with a tricad block, which is everything but efficient. And that's something that I actually tried to push a patch to Qt and got rejected because who would ever need to actually check for an error inside the Qt future? But who cares? The last strange thing is that when I tell you, you ask me for the time and I'll tell you later, I'm just doing something else. Is it normal for you to in the middle of my work to tell me, okay, pause that? No, when you say I want a Qt future it's not something that you should be able to pause. It's not a job, it's not a task, it's not called Qt job, it's called Qt future. But Qt future has set pause, it has canceled, it has a lot of methods that are just not meant for futures. And I think this is the end of the rant. So since the Qt future is a really nice concept and it's ABI stable so you can use it in your APIs and everything else, it's really a shame that you can't really use it. So I decided to take a dive into the code and see how the Qt future is actually implemented and whether I can count on the internal implementation to be API and ABI compatible. So every Qt future that you have is instantiated by a class called Qt future interface which you can implement for yourself. So we are now going to see a couple of examples. Obviously, if you read the first paragraph we are going to pretend that we are legal programmers, we are not going to subvert C++ to actually access private parts of Qt future. We are going to do just the things that C++ allows us to do legally. And legally, I say... Okay, so what is the simplest way to create a future with a predefined value? You create a new Qt future interface, create a future from it, then say, okay, this future, the thing that calculates it has started, it reported the result which is specified by the value variable, and you report that you have finished. Now you have created a future which already has a value. Unlike the default API which only allows you to create a canceled future, now you can even create a future that already has a value, not much use for that, but it's a start. If you want to create a future that has an error, it's almost the same just instead of reporting a value, report an exception. Okay, what if you want to create actually something a little bit more advanced? For example, you want to create a delayed future which will be able to return you a specified value after some amount of time. For example, you want to get, you're contacting a server and you want to get a default value after a minute if the connection broke or something like that. You want to have a delayed future with default value. You would inherit from QObject in order to be able to use Qtimers properly and then you inherit the Qfuture interface of T. How do you implement the method that actually returns a new future called start? Simply the same code that we already had, you say report started and when the timer hits off, you report the result, you report it is finished and you delete later the delayed future interface. So now we have a little bit more advanced block. Instead of just having the rudimentary, we already have a value. We are now able to create a future that will actually return us a value after a specified amount of time. And because I was bored at some point in my life, I decided to start writing a better library just as a playground thingy that kind of digs through all of the Qfuture backstuff in order to provide an API that could actually be used. So how do I create a Qfuture when you have wrappers for a lot of stuff? If you want to create a future that is already here, you just write make ready future. This is a pendant for the make ready future that will be in STD, the standard template library, for the STD future. If you want to create a canceled future, you can create the void one or the integer one or whatever you want. You can create, instantiate the thing that we saw earlier, make delayed future. It will return the value 42 after an hour and 30 minutes has passed. And by the way, this works obviously only in C++14. Now, these futures might have not been that useful. You can create wrappers for a lot of different things. For example, debas as in call. Instead of returning a debas pending reply, it will return a proper future which you can pass on to an API that requires futures. Then you have process get output. It will wait for all the whole process to finish and it will return your result. Again, exec and similar stuff. For everything that you actually need, you will be able to create a wrapper that in as efficient as possible way creates a new QFuture. How do you get a value from a QFuture you don't? One of the benefits of the strange implementation of the QFuture proper is that if you don't base it on threads and thread pools, when somebody calls .get on your customer made future, he will get a segfault. That's one of the things that I actually like because that way anybody who actually uses my library that returns him a future will have to avoid calling .get, which is so freaking cool. Some people actually thought it was a bug, but I took an hour to explain that it's a feature. So you never should call .get on a future. What you should do is pass it on to something else. So what have I started implementing? Most of these things are functioning properly. Some of the things need to be continued. So one of the things that you can do on a future is pipe it through a transformation. So for example, you want to get user input, some block of text, and you want to have length of that text when that text appears. You just need to do input, pipe, transform, transform with what function with Q string, column, column length. Who has seen the boost range or the range proposal for C++ null 20 something? Okay, so the approach is the same. You have a collection and you pass it through a series of transformations. Something like SQL, something like shell programming and stuff like that. And a future is again, it's a kind of a collection. It's not a collection that immediately has all the data, but it's a collection that will sometimes, at some point in the future, have data. So it's kind of obvious that we should be able to use it as if it were a collection. Alternatively, you can pass the input through a filter. You got an array of lines from the user. You want to validate and remove all the invalid ones. You just pipe through a filter function. Okay. And just remember, QFuture of string is essentially QFuture of list of strings. So the filter here will get a list of strings and just remove all those that are not valid. Now the next thing. Both Q string length and input validation functions are fast functions. They are not functions that will block your main thread or anything else. What should you do if you actually have a couple of functions that you want to chain and all of those functions should be asynchronous? So all of those functions should return a QFuture. For example, I want to send a request to a web page. That web page will return HTML code to me. I will parse the HTML code and then send a synchronous request for all the images that are inside that web page. So all of those are kind of asynchronous functions. You can't do anything apart, maybe from parsing and extracting images. Everything else needs to be done asynchronously in order not to block the main thread. So what can you do? You can just pipe it directly to something else. And this is something that in functional programming is called the monadic bind. So you have two functions that return a QFuture. They ask for a value and return a QFuture. And you want to compose them so that when the result of the first one, the future arrives, it automatically passes to the second one. If you use the transform like in the previous slide, what would happen? Input transforms some function that returns a QFuture. The whole type will be QFuture over QFuture over value. Okay, let me repeat. So is it obvious what transform does? Okay, so you have a QFuture of some type. Some type T, T1. And you have a function that takes a T1 and returns T2. Okay? When you call transform on a QFuture of T1, it will return a QFuture of T2. Okay? But if that function actually doesn't take a T1 and returns a T2 but takes a T1 and returns a QFuture of T2, transform would transform from the QFuture T1 to a QFuture, QFuture T2. Okay? It's a little bit sick, but bear with me. And QFutures of futures are really useless. So there is a method called flatten, which would get an array of nested futures and just give you a proper future of T. Instead of always chaining transform and flatten, the API just provides the ability... Okay, this is the wrong slide, sorry. The ability to directly pipe through some QFuture returning function, and it will automatically do the transform and the flattening. Okay? No? Questions? Yeah. That's why I said monadic bind. And usually I do talk about monads. Apparently you should have said that in the microphone. I'm recognizing monads all over the place. Okay, so a member of the audience said that he was recognizing monads and they said that, yeah, this is all monadic, monad-based. Essentially QFuture is... general concept of futures is one of... aspect, one of the different types of monads. But I didn't want to actually talk about monads this time as well. Okay, so the idea here is that you should be able to use a QFuture and compose as many functions as you want to it until you get the result that you actually want to have. And when that result arrives, you just process it and pass it to the handler. Unlike the normal Qt signal slot stuff, in signals and slots you have a signal and you connect it directly to a function that will process the result. Here you can chain as many things as you want before actually connecting it to the handler. Okay? And the usual things that you should always have in all libraries like this, if you have a collection of multiple futures, it would be nice that you have the API that will return you a future of the collection. And others. I think these few should be quite obvious what they're doing. Okay, so this was really fast. I thought that I'll have half an hour for my talk. Now, what are the limitations, even with this idea that you can compose futures as much as you want? The limitations are that although the future of T is a future of list of T, you can't really use it in a normal reactive stream kind of stuff. For example, one of the useful things to have is to map all the user input as a stream of events, right? So you have every time that the user moves a mouse, you want to have a stream that returns you coordinate, coordinate, coordinate, coordinate. Okay? And for the first coordinate, you can use the QFuture because the first time the user moves the mouse, you'll get the value for the future that you created. The problem is that you cannot model the whole stream with QFutures. Why is that? Because QFuture keeps everything in memory. Every single value that you have in the list will always be in that future. So it's completely unlike, for example, standard input streams. Just imagine if the standard input stream remembered all the lines that you read before, the line that you currently are reading, which would be completely useless, right? The QFuture unfortunately doesn't have the ability to forget some of the previous values. So you can't model a lot of advanced stuff with QFutures. You can essentially model just the simplest ones like I have a single value or a couple of them. Okay? I don't think that anything else is worth mentioning. So, now questions. Okay, before the questions, one thing that I didn't talk about is how would you design your software so that you do these transformations, filtering, and everything else, and to design huge programs with it? I didn't talk about it mainly because I talked about it in the previous year, and because you can't use QFutures for that. One of the great ideas of functional programming is that you have some input. You transform it, transform it, do whatever you want with it, and then you have the values that you want to use. And that's something that I was hoping I would be able to do with QFutures. Unfortunately, because of the simple limitation that, for example, this thing with the memory, you can do really, really rudimentary stuff with a QFuture. But the idea of having something like a QFuture that you can pipe through transformations, that you can chain, that you can do whatever you want, that is a really, really powerful and useful thing. Unfortunately, QFuture will not help you with that. And now questions. Here's your hand. Actually, why you based it on QFuture or not on the next standard future? I don't see 17. The reason why is that I maintain one of the frameworks in KDE and it is really D-Bus Harry. And the first version was synchronous and it blocked everywhere because D-Bus is freaking slow. And I decided, okay, I need something like a QFuture. Should I create my own, which will be ABI stable? Probably not because that framework is not for creating the futures. Then I considered STD-Future. Unfortunately, it's not ready. And unfortunately, KDE frameworks are still pre-C++, C11. We need to remain compatible and everything else. And STD-Future doesn't really guarantee ABI. At least GCC's implementations sometimes break ABI from major versions and stuff like that. And the reason is that I use QFuture because it was in Qt. I was able to hack through it to actually achieve what I wanted without much overhead like spinning off threads are necessary and keeping the ABI. But yes, I would have probably gone for the Facebook one. First, then Boost and then in the future I would choose the STD-Future. Are STD-Future supported? Sorry? Are STD-Future supported? Share. Honestly, I hate anything that has the share name inside. Essentially, okay, I'm not in the real world. I'm after all a free software guy, right? But anytime that you have concurrent stuff, anything that is shared is bad. So you should either not share and keep things to yourself or you should not have concurrency. Anytime you try to mix those, you need to lock. You need new taxes, you need all of the things that will just slow your software down. And you should all, if possible, you should always avoid it in your design, software design. Next. Just a quick one. Could you do me a little favor and just share the presentation please, if possible? Which part? What I want to say is share, the presentation, the file. Sorry? I think... Sorry, I heard you. Could you show? Okay, let's go. Okay, okay. There was a question in the back. Although I would recommend not looking at this one. In the past year I was talking about reactive queue. And this year at Meeting C++ I've been talking a little bit continuing on the reactive stuff. And usually I talk about these things but in a more useful way than just talking how bad queue future is. But I will post it. I have a question regarding this get how you hate it so much. Because I think get gives you synchronization. And that's sometimes good thing, I guess. Synchronization is sometimes necessary. I wouldn't say it is good at any point. There is one really nice comment about New Texts in general by David Butenhol. He said that in one of the mailing lists he said that we shouldn't have called the mutex mutex because it's a cute name and everybody likes it. We should have called it bottleneck. So bottlenecks are sometimes necessary. They're useful. But you should never put them in your code if you don't actually need to. If you design your software in a proper way you should never be... You should never need to do ecstasy synchronization on a top level. In the library it's okay to build to something but I would say that most of the time unless you're doing parallel processing graphics and stuff like that which is the fork drawing pattern what it's made for I would say .get should be destroyed. Essentially, if you want to have a system asynchronous as soon as you call .get it's not and that destroys the idea of having the asynchronous system in the first place. So useful, yes, sometimes. Good, never. It should work in a reasonable predictable way. For me, the reasonable way for .get is to crash. For example, you have a pointer that is invalid. When you try to dereference it, what does it do? It's a segfold. When you try to dereference a future it's not yet here, it should be a segfold. I'm not saying that this is the only way to think about it but it is as valid or more valid than let's block our program until the pointer gets valid. In this way, yes, but if we get as a synchronization point it's different. I do agree. But as I said, I don't want to treat it as a synchronization point. The last question. But even if you don't use it as a synchronization point it gives you access to the exception. How would you handle the exception in another way if you only passed the value to the receiving function, to the handler function? You wouldn't think this way. For example, when you have a queue future and you do a transform something if it's a value it will get transformed. If it's an error it will produce a queue future that returns an error. So that's one of the things again, I didn't want to mention more nets but the idea is you have a box. If you have a value, do whatever you want with it. If you don't have a value you have a box. We'll inherit all the backlog from this from this box. So whether it's an error, whether it's an a log how that value was produced or anything else. So you would handle the errors in that way. Thank you. Thank you for this talk. Thanks to Yvonne. I'm not going to try my surname, right? You don't want to try to pronounce my surname? Oh no, I tried to avoid it. We have 15 minutes pause and the afterwards is going to be the talk from last in this room. So come back. Thank you.


In this study, spider silks, SS, collagen, and polyurethane, PU, nanofiber scaffolds were fabricated by electrospinning technique and their physical chemical properties and in vitro biocompatibility were investigated. Results showed that SS scaffolds had stronger hydrophobic surface, superior water stability, higher porosity, and promoted better cell growth and proliferation than other scaffolds. Suggesting the potential application of SS nanofibers as vascular engineering scaffolds. This article was authored by Chuanglong He, Lei Zhang, Hongxing Wang, and others.


On the dummy form we do it here, we do the kao sao up here, or kao sao here, like that. So I am going around and then controlling this arm on the inside. So it's a circular motion, one hand with this hand like this. And on the dummy it's often combined with other techniques. For example, it's usually kao sao with the right and the low palm, or kao sao with the left and the high palm. Kao sao with the right and the low left palm, or kao sao with the left with the high jing jang.


Most of this information comes from publication 946 how to depreciate property tax year 2022 you can find on the IRS website irs.gov irs.gov looking at the income tax formula we're focused online one income remember and the first half of the income tax formula is in essence and income statement although it's just an outline a scaffolding other forms and schedules flowing into these line items one of those the schedule see business income in essence and income statement in and of itself with business income minus business expenses the net business income rolling into line one of the income tax formula page one 1040 noting the schedule see would roll into the schedule one which would roll into the first page of the form 1040 line number eight the schedule see format is the profit or loss from business has an income section and expenses section like an income statement we're focused on the expenses in particular the depreciation remembering that even if you're on a cash based system you will have to do an accrual based type thing when you purchase property plant and equipment because of the big difference between the time in which you consumed the goods in order to help generate revenue and the time that it's that you paid for it possibly so even if you use a cash based system we have to have that deviation generally so once we do that then we have to think about our depreciation schedules how we're going to be depreciating these fixed assets over their useful life which lines up to some degree with accounting concepts but remember the tax code will deviate from the accounting concepts so we have to use the tax code to figure this stuff out sometimes we'll have similar concepts the makers methods now will be similar to like a double declining balance oftentimes possibly using some kind of half year or mid quarter convention or something like that and sometimes the tax code will input some things that aren't bookkeeping conceptual ideas to stimulate the economy or do whatever they're trying to do those are represented with like 179 deductions and special deductions all right so now our focus is figuring depreciation under makers now that's going to be one of the general kind of conceptual frameworks for calculating depreciation under the tax law system noting that you always want to think about this as first starting from I would think about it first starting conceptually from a straight line kind of depreciation method and then layer on top of that some of these other concepts accelerated depreciation methods double decline in often in a makers kind of situation and then other tax kind of related things to that which would be the 179 deductions and the special depreciation and that kind of stuff so introduction the modified accelerated cost recovery system the main kind of system you'll be dealing with oftentimes with taxes is used to recover the basis of most business and investment property placed in service after 1986 makers consists of two depreciation systems the general depreciation system the gds and the alternative depreciation system the ads generally these systems provide different methods and recovery periods to use in figuring depreciation deductions so if you have experience from a bookkeeping standpoint generally accepted accounting principles you might have more leeway in those cases to kind of figure what the useful life is for a particular piece of property and the related depreciation methods you're going to use straight line double declining and so on your objective there is to get your financial statements correctly aligned for reporting purposes and decision making both in turtle and x turtle oftentimes for management and for external investors or banks or whatever as well the tax code however you're concerned generally from a taxpayer standpoint to get as big a deduction as soon as possible and from the tax code side of things then what they're going to do is try to limit you in terms of assigning more strictly what kind of depreciation is available to you so that the obviously the incentives are a little bit different that also means that we might have different depreciation methods from a book standpoint and a tax standpoint small business needing to decide whether or not they want to have their depreciation just line up to the tax code or whether they want to have different depreciation methods tax software often having the capacity to calculate both book and tax depreciation so that's just something to keep in mind when talking to your tax professional or doing taxes and kind of integrating the bookkeeping side of it all right so which depreciation system gds or ads applies so your use of either the general depreciation system otherwise known as the gds or the alternative depreciation system the ads to depreciate property under makers determines what depreciation method and recovery period you use you must generally use gds unless you are specifically required by law to use ads or you elect to use ads so like the default then is going to be the gds general depreciation system unless you're required to deviate that or make an election to do so if you place your property in service in 2022 complete part three a form 4562 to report depreciation using makers complete section b of part three to report depreciation using gds and complete select section c of part three to report depreciation using ads if you place your property in service before 2021 and are required to file form 4562 report depreciation using either gds or ads online 17 of part three okay required use of ads you must use ads this is the deviation when we have to use ads would might that be the case you must use ads for the following property non-residential real property residential real property and qualified improvement property held by the electing real property trade or business so that's so that's going to be as defined in section 163 j7b of the internal revenue code for more information see the revenue procedure 2019-8 on page 347 of internal revenue bulletin 2019-3 available at the IRS website so any property with a recovery period of 10 years or more under gds held by an electing farming business so farming also have these kind of exceptions that could be applied as defined in section 163 j7c of the internal revenue code for more information there you can see the revenue procedure 2019-8 obviously we're going to put some more of our focus on some of the more normal calculations for for most people so we won't going to deviate too much on on a lot of the special kind of circumstances but you can of course research those on your own any tax exempt use property any tax exempt bond financed property all property use predominantly in a farming business and placed in service in any tax year doing which an election not to apply the uniform capitalism rules to certain farming costs is in effect any property imported from a foreign country for which an executive order is in effect because the country maintains trade restrictions or engages in other discriminatory acts so any tangible property used predominantly outside the united states during the tax year and any listed property used 50% or less in a qualified business used during the tax year discussed later all right caution if you are required to use a ds to depreciate your property you cannot claim any special depreciation allowance we talked about special depreciation in a prior presentation or two discussed in chapter three for property


Okay, good morning everyone We're gonna do Disney Okay, let's do 40 by 40. It's a really good entry of the sets 40 by 40 Disney 40 by 40 and don't jump the gun and get the stop in right now. Here we go 89 89 88 Disney make sure you have a stop in and Make sure you size yourself right some of you didn't yesterday Can't can't can't mess it up Can't mess that up Ever spread a little wider than I thought let's put it at 60 And I'm only saying that just because of the spread just put it at 91 60 this one minute It's tight next minute. It's not 90 160 to stop get it in here now It's I don't know why it was so wide there a minute Just stay with this for a minute. I'm taking the screen off. I want to look at I want to look at something here Just be in the trade I mean you're ready in it if you want to be in it. Here we go Gotta be in it. Here we go Here we go. Here we go. We just broke 90 really hard 89 I'm trying to look at some options. You just have to bear with me here You could be you could actually be out of this you could just get out right here to be honest with you Here we go. I'm only one person Here we go Disney. I'm gonna be out of this soon soon soon one more push through 89 One more push. You could be out of it right here, though You don't even have to mess around you could just take it here a great call Fabulous entry but literally here. Whoa, this could still go to 88 87 86 85 I think it's a lot better to hold the option quite frankly here here 16 be careful if you're in this is a great trade and this is such an easy day Hand of the button if you're still in it, you really got to make sure you don't let this get away from you For the option, I'd say even 85 85 Don't exit this in a balance. You got to get out of this in the drop people That's my day Let's look at the market quick. Anyways Hunter. I think you were messing around with numbers yesterday I was talking about Disney. I've realized that last night I'm like you wrote down numbers when I was speaking about Disney not the trade we were in yesterday That's what I was talking about when I was saying 93 and 92 and all the numbers I was giving it That's what you were doing anybody still in this I think I had a really good exit on this if you squeezed more out of it good for you But just be careful here again. You got to be bar by barring it We had we had a beautiful entry literally Perfect perfect entry perfect exit perfect stop perfect gap Perfect everything perfect day and the market should roll over today too. So again Let's just see what else we have going on for tonight


Dr. Singer, we'll start with you. Chairman Thornberry and ranking member Smith, members of the committee, it's an honor to speak at this important discussion today designed to reboot the cybersecurity conversation. It's all the more needed as the United States was recently the victim of what was arguably the most important cyber attack campaign in history. Hackers reported as working on behalf of the Russian government have attacked a wide variety of American citizens and institutions. They include political organizations of both parties, the Republican National Committee and the Democrat National Committee, as well as prominent Democrat and Republican leaders, as well as civil society groups like various American universities and academic research programs. These attacks started years back, but have continued after the 2016 election. They've been reported as hitting clearly government sites like the Pentagon's email system, as well as clearly private networks like U.S. banks. They've also been reported as targeting a wide variety of American allies ranging from government, military and civilian targets in states that range from Norway to the United Kingdom, as well as now trying to influence upcoming elections in Germany, France and the Netherlands. While Vladimir Putin has denied the existence of this campaign, its activities have been identified by groups that include all the different agencies of the U.S. intelligence community, the FBI, and in statements by both the prior and present U.S. president. This campaign has also been well-established by the marketplace. Five different well-regarded cybersecurity firms have identified it. This campaign is not a cyber war of the kind that's often envisioned, with power grids going down and fiery cyber pearl harbors. Instead, it's a competition more akin to the Cold War's pre-digital battles that crossed influence operations with espionage and subversion. However, while Russia's attacks are the most notable events in cybersecurity in the last year, unlike in the Cold War, our strategy must recognize they are only one aspect of a larger threat landscape. In cyberspace, the malevolent actors presently engage in attacks on U.S. persons and institutions range from criminals who are stealing personal information or holding ransom valuable corporate data, although here, too, there is a prominent Russian link with reportedly 75% of ransomware coming from Russian-speaking parts of the online criminal underground, to governments like China, which have been accused of large-scale intellectual property theft, as well as breaking into government databases like the OPM and the cyber version of traditional espionage. And finally, our strategy must face that all of this ongoing activity must account for the risk of an actual cyber war, the activities that would occur in outright conflict, including cyber attacks to cause physical damage. So what can be done to defend America in this challenging realm? In my written testimony, I submitted a series of 30 actions that can be taken by the Congress to raise cybersecurity, notably in reflecting the nature of this nonpartisan realm, the overall strategy, and each of the proposed 30 measures are designed to be amenable to and implementable by the leaders of both parties. I've submitted this strategy for the record, which I hope will be a useful resource to you and your staff in your important work ahead. Rather than restating it in detail, I would note that it involves three core elements. First, activities that can be taken to restore deterrence from making key new investments in training, cutting-edge technology like artificial intelligence, and organizational changes in our Defense Department approach, including disentangling cybercom and the NSA, to utilizing all our tools of power to better influence current and future adversary thinking in the wake of Russia's attack, most especially by turning sanctions into law and strengthening them. Second, actions to raise resilience, our ability to shake off attacks and thus create what is known as deterrence by denial, where we are not only better protected, but adversaries gain less and are thus less incentivized to attack. Importantly, a strategic effort to raise U.S. resilience would be a useful investment against any type of attack or attacker. The steps that can be taken by Congress here range from measures to better utilize Pentagon buying power to oversight on the implementation of industry best practices into government. They also include innovative means to deal with our cybersecurity human resource challenge from supporting better pipelines into government and the military and better organizing the wealth of talent that lies outside of government and the military reserves, such as through the creation of a program akin to Estonia's world-respected approaches to societal resilience. The final track looks at the broader challenge we face in a world of social media and online influence operations. Here, too, there are a range of suggested congressional actions, including enhancing cybersecurity information sharing among likely U.S. political targets, raising the ability of the U.S. military to better utilize social media and integrate it into our own training environments and supporting the recreation of the Active Measures Working Group, an interagency Cold War program designed to debunk foreign propaganda and limit the impact of lies spread by what the Soviets aptly called useful idiots. In conclusion, we must recognize that for as long as we use the Internet, adversaries like Putin's Russia and many others will seek to exploit this technology and our dependence on it, and realms that range from politics to business to warfare itself. In response, the United States can build a new set of approaches to deliver true cybersecurity, aiming to better protect ourselves while reshaping adversary attitudes and options, or we can continue to be a victim. Thank you. Thank you.