Just like that's everyone. So hello, thank you so much for joining me. I'm Ryan Davis and today I'm going to be talking about Minitest 6 and what's coming to help you test feistier. Setting expectations up front. This is something that I always like to do in my talks. This is an overview idea talk also known as a hand wavy talk. There will be a little code in it. It is targeting testers at all levels. It is, my number is correct. I actually updated it. 35 slides within 40 minutes. That's about seven slides a minute, which is an okay pace. Something I don't normally do this, but I'm going to go outside of my comfort zone here and to my own home for a second. I figured out last night a bit drunkenly that I have released more than a thousand gems now and I'm thrilled to pieces to have realized and hit that milestone. So now that's taken care of. Let's go meta for a second. What's the narrative for a talk about a test framework? Yeah, I can't think of one either. As such, I'm stuck doing what is known as a presentation sandwich. Sandwich close enough. Turns out the emoji search is quite strange. So a presentation sandwich is where you tell the audience what you're going to tell them, then you tell them, and then right after that you tell them what you just told them. And this makes me sad. I do not like these talks. I don't like going with these talks because I always feel basic and a bit insulting. You can't track without the extra reminders. As an aside, I thought it'd be kind of fun to do my whole talk in emoji. But you wind up having to learn how to speak Neanderthal in order to do it. Go hamburger, bubble, eagle, bad, and that's just it was taking too much time. So this is about the last one. I certainly don't like giving these types of talks. That would feel hypocritical to me. I really prefer a nice story arc or some device that ties everything together. But there is no story here. Just the goal of telling you what's happening with Manita 6. So for that, I am incredibly sorry. But this just isn't the type of talk where a narrative is easy to come by. I'll do my best to keep you engaged. So to help with that, I'd like to know why you are here.  All right, about five or so.  That looked to be about two-thirds of you, half to two-thirds.  Nice, awesome.  You are not. All are welcome but just know that I heckle back. So Manita's test is my baby. It's a project, this project is a labor of love for me. Testing is something that I've been very passionate about. I've been doing unit testing in one form or another since about 1995, which is actually before Kent Beck's Seminal XP book came out that really popularized the practice. For me, TDD stands for test-driven design, not or at least as well as test-driven development. Coupled with Yagney and other practices from XP, I believe that TDD leads to better software every time, almost. And that's where Minitest comes in. I wrote Minitest using those practices and I wrote Minitest to help support those practices. So what am I talking about today? I'm gonna give a quick introduction to Minitest so that you understand what it's about in case you don't know. I'm gonna give a very quick history of Minitest so you understand where it's come from. I'm gonna talk about the philosophy and purpose of Minitest so that you better understand the decisions that I've made over time. And then I'm gonna detail the major changes coming in Minitest 6. Both architectural, mostly invisible changes that you may not notice as a user. And code changes, the changes that you're more likely to see. Contrasting that, I am not trying to convince you to test. That ship has sailed. If you missed it, you can't be convinced. This talk is not for you and you're probably better in a different talk. I am not trying to convince you that you should use Minitest. If you do, that's fantastic. And if you don't, that's okay too. Hopefully this talk will be informative for you. And I'm not here to bash on our spec as much as it's fun to do sometimes. After all, the maintainers like to get drunk together. Though I might provide statistics that you might not like because the following conditions hold true for all x. Whether it's test time or memory impact, but also the number of users and downloads. But really at the end of the day, I don't care what you use at all as long as you test. Please understand that in its entirety. I do not care as long as you test. That said, Minitest is faster and more direct and it always will be. I'm also not here to explain how Minitest works. Just the what and the why about Minitest and how it's changing. If you do want to know more about how Minitest works, Nate Birkepeck gave a really good talk. I want to say three years ago in RailsConf. Walking through Minitest, three. And I've given a couple talks on how to make a test framework from scratch that builds up to the design of Minitest pretty closely. And mine comes more bottom up, his is more top down, so if you watch both of them, you're covered. Thus concludes the first slice of bread. With that done, let's start with a quick introduction to Minitest. This feels a bit of a dull moment, but Minitest is a testing framework. It does support unit and functional testing using regular classes, methods, and assertions. This is known as X unit style for old geezers like me or test style. It also supports using described blocks, it blocks, and expectations. This is known as spec style. It supports benchmark tests for hardware agnostic performance testing. And it has simple stubbing and mocking. Some might say too simple, but that is actually intentional, as we'll see. It supports both TDD and BDD, which has nothing to do with whether you prefer spec style or not. That's a common misconception. As a very clean architecture, you can understand all the code in one short reading, which usually takes about an hour or two, literally. And it's fast. It's very fast. It's the fastest out there of the full-fledged test frameworks, and its job is to get out of your way. It has flexible reporting architecture that allows you to customize the output and integrate with other systems like CI's. And it's highly extensible using plugins from RubyGems. There are over 200 gems from Minitest. I didn't know that. Now, without other way, let's do the briefest history of Minitest that I can muster without being sarcastic and skipping the whole thing. History talks bore me to death. So this is gonna be very brief. I became the maintainer of test unit that shipped in Ruby in Standard Lib in about 2004. It was big, it was complex. I just didn't understand it, and, quite frankly, I was scared of it. Especially as a new maintainer with core commit bit, that was terrifying. It had a lot of confusing files, a fair amount of code. It was overly complex for what little it did. It had five different runners, including four different GUI libraries. It had two collectors or ways of discovering the tests to run. And it used every design pattern that you could find. Some of this was not the fault of test unit. It was following in JUnit's footsteps. Which was following in Smalltalk's test footsteps. He even had his own text templating engine for generating error messages that it did on every assertion, even if they passed. And everything boiled up to something called assert block instead of assert. And I can never figure out why. So generating all those extra blocks and closures was expensive and needlessly slow. And I thought, why? What does it take to implement only what I use? What is the simplest thing that I can do to ensure that my code is correct? That was failure driven development at its most extreme. I ran my test bare, everything that was undefined, I defined. So the first thing was test was undefined, and then unit was undefined, and then test case was undefined, and then so on and so forth, until very quickly it ran and eventually passed all the tests across all my projects. Which as the best I can spelunk and do software archeology was about 25 projects. Perhaps best of all, it was that it was only 75 lines of code. I don't use that diverse of a set of assertions. I'm a big fan of assert equal, and I use other things now and then. So really I had to implement just what I was using. That was much, hence the mini and mini test. You can actually sort of read this. Actually you can actually sort of read that. That's not bad. On the left, you have the entire framework in one method. Find all the classes, run their tests, set up and tear down. On the right is the test case class with set up and tear down stubs, assert, and all the other varied asserts underneath it using it. That's it. So here's the history in a nutshell. Version one came around 2006. One dot two was all the assertions that I didn't use. And then specs and mocks. That came in 2008. 2010 was benchmarks, yada, yada, yada. Five comes along in 2013, which is really where we're at now. In February I released the latest version, which is 511.3. That's the current functionality. The only real difference between that and 5.0 is that I've expanded the reporters a bit, and it's mostly an internal refactoring to make things easier for plugin writers. Two things of note. Minitas 5 has lasted for five years, and that changed very little other than the reporters I was talking about. It's API stable. And second, Minitas has existed for 11 years. I hadn't thought about that until I wrote this talk. And that feels like an obligatory gross point blank reference to me, which is much better looking than it is on my screen. My screen is really dark. Cool. 11 years, this stuff really sneaks up on you. So, I think this is more interesting data than a table of dates and descriptions. This is Minitas visualized over time. The blue line is the lines of code, and the red line is a complexity metric from a tool I wrote called FLOG. By comparison, here's our spec. Unfortunately, because of a repo split when they changed hands and stuff, I could only gather numbers from version 2.0 to 3.5, which I think is the latest. Here's Minitas numbers of the same scale. So, Minitas has had a number of firsts as a test framework, possibly in any language. That's hard to verify. It is the first test framework to shuffle tests by default. This prevents test order dependency bugs that can lead to production bugs. It was the first to include both test and spec frameworks, as well as TDD and BDD style support, providing options for a developer to choose any style that they want to work from. Mike Moore, who used to run the Mountain West conference, really likes to do something he calls spec assert style. So, he uses describe init, but then he uses asserts inside of there instead of expectations. It was the first framework that I know of to provide benchmark testing, providing platform and hardware agnostic performance testing. The nice thing about that is it means that your very fast laptop and your very slow CI can both pass, and you don't have to have fixed numbers or try to figure out the math to adjust between the two. That'll never work. Okay, now that you know a bit about what and the win of Minitest, let's look at the purpose and the philosophy behind it. As I said before, I subscribe to a lot of XP. Write one failing test at a time, then make it pass. It seems unintuitive at first glance, but it's the perfect carrot to keep you going without leading too far ahead of your actual needs. Do the simplest thing that could possibly work. This pair, I'm not going to try saying that. I've tried like 10 times and I can't. This pairs well with test first.  So, why pretend that you can design for all of its complexities upfront? And you aren't going to need it. At least Yagney is pronounceable. Don't implement anything until you actually need it.  And all of this tries to focus on being incredibly simple, at least as simple as is reasonable for your needs. Ruby has one of the most complex grammars out of today's programming languages. And don't even get me started on the semantics. They're crazy. There is a lot to learn just to get up and running, let alone semi-productive. Both mini-test and R-spec look like magic to a beginner. And that's because to a beginner, Ruby itself is magic. Beginners don't know about singleton methods on instances or why you'd want to use them. Sometimes we lose touch and forget that. I don't want mini-test to contribute to the bewilderment or at least contribute as little as possible to it. Your test framework shouldn't get in the way of learning or doing. But once they do learn a new construct, that beginner can start to use that new tool anywhere. Mini-test tries to expose Ruby with little magic involved. To use mini-test, all you need is a basic understanding of classes and objects, methods and method calls, and the ability to read some basic API.co. That's it. There's nothing extra to learn just to use it. Once you learn a new tool from mini-test like singleton methods, you can use it anywhere, not just in mini-test. Not say that you should because the singleton methods will bite you, but that's beside the point. Here's a minimal test that will actually run as is, and then it'll fail because you haven't implemented Calculate yet. There's a require to mini-test.run, which is the standard way of starting a file. You have a class opening up that has a descriptive name. It doesn't have to have tests in there, but I usually do. It subclasses mini-test test. Then you have a method that starts with the word test, that's important. And you have an assertion with an expected value and a calculation of a natural value. That's it. And here's the equivalent in spec style. Same require, you have a describe this time. You're naming off the class under test or putting a string, it doesn't matter. You're opening up a block, you're saying it, should handle the basics, do. You are pretending to ignore that underscore. You're doing the calculation, you're calling must equal and four, your expected value. You probably noticed the test style and spec style are one-to-one. There's only one extra construct in the spec style and that's basically incidental. They're actually the same thing and that's because spec things are just bridges over to test things. I don't want to reinvent the wheel. I don't want extra things to learn or teach. I don't want to document them. I don't want to implement them. I don't want to support them. I just want to use Ruby. By learning Ruby, you learn everything you need to write tests in Minitest. As well as being incredibly simple, Minitest drives to be incredibly fast. It's been a while since I ran my benchmarks, but Minitest is the fastest of the full-fledged test frameworks out there. By full-fledged, I mean has full functionality you would expect and is test safe. There is a library out there called riot that doesn't instantiate an object to run your test in, which means you can have it infect everything and I don't consider that to be full-fledged. It is slightly faster than Minitest. I'll never be able to catch up with that just because I'm doing the real thing and it's not. Pretty sure that Minitest will always be the fastest out there. It achieves that by doing nothing extra. In short, auto run at the top trips off run, which gathers up all the test classes, which tells each class to run its own tests and they go off and do their thing. See in another way, here's a call diagram to run tests. Call stacks pretty clean. It's easy to understand. We'll see later that I'm thinking of ways to clean this up even more. One way to keep incredibly fast is to store nothing extra. We do this because we want to reduce the impact on GC. Don't create any unnecessary objects. Let go of everything as soon as you can. You'd expect memory to be linear to the amount of testing you're doing, but in Minitest, memory is linear to the amount of failures and errors that you have because Minitest's statistics reporter class only hangs on to failures and errors. In RSpec, memory is exponential to the amount of testing that you're doing. I'm not sure why, but it's easy to see what generated tests and basic UNIX tools. I think that's one of the main reasons why it's so much slower than Minitest. It's just doing a lot more and holding on to all of it. Still here. So story time. There's a gem called Minitest to RSpec that ironically uses my Ruby parser, SexP processor and Ruby to Ruby to convert Minitest test suites to RSpec. So for fun, I ran this against one of my projects that was simpler and cleaner, didn't have any shared tests or anything. I did this and the tests that were in Minitest were already fast, which is what I wanted. I wanted something that would pretty much benchmark the frameworks against each other, not the test content. But in RSpec, they were 30% slower. Is that definitive? Of course not. This is not science. This is funny statistics. So Minitest is opinionated in order to improve testing overall. I have this idea of a testing knob. The idea is that your framework either helps or hinders increasing your testing mojo or your feistiness. So you start with an incredibly fast framework. You provide only meaningful assertions to reduce the nonsensical tests and providing a false sense of security to testers. I'm looking at you a certain nothing raised. You give the user the choice of test or spec style. You provide test randomization to prevent test order dependency bugs. That's a big one. Design for testing your results and side effects. Encourage mock last strategy, making good things easy and questionable things harder. Write benchmark tests against your algorithms. Refactor to custom assertions. It increases the expressivity of your tests. Refactor to abstract test classes and or modules. Require assertions to ensure that you're actually checking something in every test. This was a user contribution that I hadn't even thought of. I was like, of course I'm testing it on my test. So I turned this thing on, I ran all my test suites and I got failures.  And then use test parallelization. I'm going to try to enunciate this well through the talk to drive you to a solid and thread safe strategies. Later we'll see about my ideas of trying to get to 11. Reproducibility. Mini test is pretty much just a fancy tool to reproducibly run things. All it does is call methods. That's it. In testing reproducibility is paramount. Without it, there's really no point in doing any of this stuff at all. You might as well just throw out your tests, throw out your implementation while you're at it. Running with a fixed seed should always reproduce the output allowing you to see the failures again in the same order that they ran before. Being able to selectively run failures allows you to reduce the problem set to a minimal reproduction. And if you really have to, you can declare that your tests need to run in order. Finally, do we need that again? Finally, mini test does not push a testing style, strategy, process or pedagogy. Personally, I like the flexibility of this approach but some people feel lost by this. So maybe it should. If I were to push a testing style it would be something like test first. I love to do quick and dirty sprints but when I'm writing anything that I know I'm gonna keep or if I'm doing exploratory programming I'll always write a failing test first. The design is always better in the end. Especially when you're still figuring out what you want this thing that you're making to be sticking to the essence of what you know keeps complexity and therefore bugs at bay. Like premature optimization I think over mocking is the root of all evil.  So set up a thing, call a method, verify the result or the side effect, nothing can be simpler. Simple, statist, tests. And if you knew this game and you don't know what to test I think this is a perfect rule of thumb. I've talked to Kent a number of times about testing strategies and one of the other things he told me that I really liked is getting the green just means I don't have enough tests yet. You have a gut feel as to when you do and it's just in your stomach. So to understand where Minitest 6 is trying to go it might help to see Minitest 5 a bit. One of the biggest incompatibilities going from Minitest 4 to 5 was namespace changes. I added a compatibility layer for users but a still bit plugin authors. I moved benchmark testing to its own class so they could be isolated. I removed all manager classes and I made tests run themselves. You know, simple objects with responsibilities for doing things. So here's Minitest 4. Do not bother to understand it this much. It's not important. What is important is the difference, not the content. Here's Minitest 5. The latest version 5.11 has been expanded in the reporter's side but that doesn't matter for this talk. Here's the interesting slide. All the new classes are in green and bold just in case deletions are in red and dashed. There were two major namespace changes. A lot of additional architecture. I want to avoid this in Minitest 6. All right, finally moving forward. Looking forward, sorry. Let's start with the architectural changes. For starters, there are no major structural changes. Normal users and plugin authors will be mostly unaffected. I've deleted all the Minitest 4 and 5 cruft old compatibility namespacing assertions that have been deprecated for ages are all gone. If you do need some of that cruft, if you're still, sorry, working on the upgrade path, here's a compatibility chart. If you still need your test suites unshuffled, you need to pin to 5.3.3. 5.11.x is gonna be the last real content release and then 5.12.0 is gonna be the last release and it's gonna just turn deprecations on. Well and good, but who cares? Let's get this to me. Okay, parallelism. Minitest has had parallel testing for quite a while, but I'm considering an architectural overhaul. Right now you use parallelizeMe to opt into parallelization on a class by class basis. And I'm seriously thinking about making this the default. And then maybe we can use serializeMe to opt out or maybe use a different superclass for serial testing. Parallelization is the next step to ensure that you're making solid thread safe design. It's the next thing to do to make your implementations really scale. I'm also seriously thinking about running all tests completely interweaved rather than on a class by class basis. I'll talk about that more in a bit. Easy worker-based distributed testing. So you can distribute locally and run all your workers on the same machine that lets you use all your CPUs and avoid locks. It also helps with tests that stub global methods like time.now. And here's some, there are some serious speed benefits. Here's some numbers that are not faked by Jeremy Evans on his gem Minitest parallel fork. The only, I think, difference between that project and what I'm looking at is to actually go across multiple machines where his just forks. You can also spread your tests run across machines or VMs. And then the worker-based distributed testing avoids the problem of having a file that runs longer than all the others. This will minimize run times automatically and help you on your CI's and any other machines that are resource tied. So how do you do the config and setup for distributed testing? Well, I don't know yet. And what is easy, what easy means at this point is up for debate. Aaron Patterson has contributed a patch that does provide distribution without any config whatsoever. And I'm working over on the config side trying to make it easy to do. And we're gonna meet somewhere in the middle. But a lot of that's up for debate right now. Minitest will make some assumptions about how to access your tests across machines such as SSH access, assuming that you're gonna have the proper ports open or tunnel, not sure which. And assume that you have the same source layout across all the machines. So if you're doing container-based testing, that should be pretty safe to assume. I have no idea if these are safe things to expect on non-unix platforms though. I will definitely need some help here. And if you wanna look at existing libraries for extending parallelization or distributed testing, you can check these projects out. I know that test queue is being used by GitHub. Napsack is apparently a pretty popular project and it has a paid service. And there's some others, I'm sure. I know that Shopify has a really crazy setup. So right now, the result of a test is the test instance itself. But a test can assign instance variables that can't be serialized, like a hash with a default block. Minitest is switching over to a new setup that guarantees safe serialization. This deletes all the custom Marshall code. And I added a result class that pulls the bare minimum needed from a test result in order to do the reporting properly. That guarantees that there are no extra instance variables that are hanging onto un-martialable data like Proxer classes. This makes it easier to do parallel and distributed testing. But it also means that things are easier on the GC because we're not lugging around closures accidentally. Remember, closures see everything above them that they can touch and they hold onto that until they get GC'd. So if one's live, all those other objects are live. But Ruby 2.5 added the ability for an exception to point back to its previous exception. So if you have something that raised, rescues and raises again, both of those things are pointing. That leaves the serialization hole open so I need better 2.5 tests to expose and fix this. Minitest 6 will have a simpler project structure. I'm falling behind on time. Some of the files are getting a bit hefty. For example, reporters have been broken out into their own file. As hinted before, I would really like to make the call stack cleaner. I'd love to do that.  Here's the current call stack. I kind of did a walk-through before, but basically auto run fires off run, which fires off double under run, which walks through all the runnables and tells them to run, and they walk through all their runnable methods and tell them to run. If we were to factor some things, again with the green bold, pull out the filtering from double under run, and then extend runnables to return both runnable classes and their methods, then we can shuffle across all tests. And here's my final crazy dream version with everything just clustered together and chaotic. I'm not settled how far to take this though. This could break a lot of current tests, but maybe they're meant to break. I don't know. There's a lot to say about parallel by default. It's an incredibly powerful and driving you to a safer design, but it's also incredibly problematic with some test strategies, such as non-transactional database testing, or stubbing class methods, because class methods are just global functions. So that's all I have for the architectural changes. It's not much really, but in reality, it's a lot to consider under the code changes. Some people really want a command line runner, so I'm adding one. I'd like to add all the usual bells and whistles without pulling in extra dependencies, but running by line number might be tricky without that. One thing that I really like about this is that it leads to better integration with other tools like Minihas bisect or Autotest. Rakes built-in test task is cumbersome at best. I actually hate it, and I don't use it. I have my own, and it makes it very hard to pass flags around, so maybe I should stop hoarding my own and provide one. There's a lot more bells and whistles, but it'll also be simpler just to pass options into the test run. There are some minor but important improvements to Minitest mock. Improved stubs to clean up testing stubbed methods that take blocks. This gets really hairy, but it's a lot more consistent now than it was in the past. And I'm considering adding fake, which is just a fancy wrapper around object new and that singleton method initializer I was talking about. It seems so simple, but maybe that means that it isn't needed. I don't know. That's up for debate. And assertions have been improved quite a bit. Assert equal with a nil value is no longer allowed that will raise an error. Use a certain nil to be explicit. This makes your tests more explicit and it signals your intent more clearly. It also drives out topological testing, tests that can't fail. Randy Coleman has a really good blog post about this and I highly suggest you read it. I can't explain it in six minutes. Assertions reuse themselves a lot more. For example, assert operator and assert predicate will call assert respond to first. This improves the error messages drastically from an error that is kind of hard to read, to a failure that's more to the point. I've improved failure message construction. If message is passed a proc itself, then that proc overrides all over their output. That allows top level user to find messages to win when passed down to wrapped assertions. I removed the last of the nonsensical assertions like assert send. They can be replaced with better assertions like assert predicate, assert operator, and assert includes, et cetera. Specs have gotten cleaned up a bit. Since expectations are just assertions, all those improvements to the assertions also apply. But I've also deleted all many of the spec expectations from object. This is pretty easy to switch to the new setup. Whereas before, he just called must equal directly. Now you have to use that wrapper to call it. I prefer underscore to wrap the expected value simply because it's short and gets out of my way visually. But the word value is a bit more descriptive and might be preferred. And honestly, I think expect is terrible, but it's there too. This cleans up the global namespace a lot. So last piece of that sandwich to review. First, I gave enough background to understand where Minitest is and how it got there. I went into the major changes company that has six architectural ones like parallelism overhauls, possibly on by default. Distributed testing and serialization guarantees needed for it to run smoothly. The possible overhaul of the call stack and the repercussions that could have. Then I went into detail on code changes coming, things that will impact test plugin or test and plugin writers like the command line runner, better rake integration, cleaning up stub and adding fake, improving assertions like not allowing nil and assert equal and providing better failure messages, and removing expectations from the global namespace. Remember that testing knob? That's really what Minitest and this talk is about. Increase it as much as possible, be feisty, but choose the setting that works for you and your project. And if you wanna help Minitest get to 12, I'm always open to more ways to encourage better testing practices. No one's good going yet, keep reading. All right, so that's basically it.  So when is this coming out? That's a good question. A lot of this is done in an experimental mode and I could put out an alpha quite soon, but some of it, not so much. There's still more debate to be done, more evaluating of different practices and just bake it in and see how well it works. I'm thinking weeks or months. Not really beyond that. As you know, stalling on releases is not really my style. But some of that depends on you. I could really use feedback and contributions. My current draft of this code is available on GitHub at the above URL and on the MT6 branch. Also post these slides today to my website and tweet it. Thank you. And if you appreciate and benefit from my work, I would appreciate it if you or your company would consider sponsoring me. Thank you.


Kajuna State Governor Nasser Arofi says he has provided a comprehensive briefing to President Muhammad Abu Hari on the right-sizing policy of the state-state government and the steps taking so far to implement it. The governor said that Kajuna State will seek accountability for their actions of the Nigerian-labeled Congress in the state by setting up a judicial commission of inquiry into the NLC strike and protest of May 2021. In a statement issued by his special advisor on media and communication, Mouniwa Adekheye on Sunday, Arofi explains that the Kajuna State government is hiring over 10,000 staff because the right-sizing obliges the government to continue the recruitment of teachers, doctors, nurses and other qualified staff to provide vital services.


Hello everybody hooded Cobra Commander 788 here. We have reached the conclusion of Cobra Convergence 6. Yes, all good things must come to an end, but we have had a great event this year. As always, I have invited you to join the Convergence and make your own Cobra creations and send them to me So I can put them in a video each week. This is the last of those videos for this year. My sincere thanks to everyone who contributed. It means a lot to me to see you all get involved. Thank you for making it such a fun event. I hope you will do the same next year. Now, let's see your Cobra creations for the final week of Cobra Convergence 6. A G.O.G. classified scale. Red Ninja Clan. But they're for sure G.O.G. classified red ninjas. Looked like Power Ranger villains. So I bought myself some Marvel Legends hand ninjas but they need a leader. So I bought Snake Eyes Origins Storm Shadow. Now I know he's saying he's not red. How can he be their leader? Greetings Neo-Fights. I am Doctor. Redacted. And today, we continue your background training into Cobra's technological archive. Today, the technology we will be reviewing is 1-3-P-Y-1-3-7-6. Cobra Technology Archive item number 1-3-P-Y-1-3-7-6. Classification. Top secret. Codename. Pyramid of Darkness. And I will see you over at the Rob Vegas Technology Center for all the action. Let's roll. Okay, so we've made it on over to the old Rob Vegas Technology Center. And here we are to check out today, 1994 VAPA. I think it's about version 3 or 4 or thereabouts. And yeah, we've got ourselves a pretty strange figure. But good news, he is in great shape. So no assembly requirements. These moments of fatigue and fear. Times like these challenge and test us and force us to dig deeper and grow stronger, yo-jo. And every time we overcome one of these moments of doubt and fear, we become more resilient and resourceful, yo-jo. In the moment of doubt, we come about. And in the face of fear, we persevere, yo-jo. Because you'll fight for freedom wherever there's trouble. Because you'll never give up and stay till the fight's won. Because you, Joe, you will dare.  And I salute you. Yo, Joe. Converge! I'm Eric Katrina Mason, American citizen with PhDs in Computer Science and Mechanical Engineering with a specialty in mechatronics. Currently a research professor at MIT and working with private industry on cutting-edge advancements in robots. Orders? You will be implanted as a research assistant in Dr. Mason's laboratory. You are to befriend her, then seduce her. She needs to trust you completely. That's everything for this week and this year. You make this event what it is, and the entire G.I. Joe fan community owes a debt of gratitude to you. Thank you very much. I will see you next year. And until then, remember, only Cobra is Cobra!


Okay. Hi everyone, Sean with jaspyscasebrakes.com here doing 2019-2020 Panini Chronicles NBA Fat Pack Random Team number 291, where we're giving away eight spots in Noir after the break. So how this works, 30 spots, high risk, high reward, first do the break, 1920 Chronicles, no vet commonship. At the end of the break, we will randomize all 30 customer names, top eight names when a spot in Noir basketball. So let me copy that list already again into another randomizer here. So we'll go over here. That's for the afterwards, but same list here from Kevin down to Brian and the teams from the Atlanta Hawks down to the Washington Wizards. So dice roll to randomize both teams and match them up or both the lists, five and a six, 11 times, 11th and final time from Dean down to TJ and 11 times on the teams and 11th and final time from Portland down to the Grizzlies. Cool. So no trade window on here, but let's get it all on video. How many of these are we gripping if Tiger wins another mate, if Tiger wins the Masters? All of them, right? I mean, actually, I don't know if I'd rip them, I might just buy them all and just let them sit in the back of my closet in a dark corner. How many is he off from the record? Yeah, I don't know. I mean, how many has Jack won? Like, I feel like, because I knew it was like, it was like a guaranteed thing. And then the whole off the rails happened. That interrupted like two years ago and then he said back trouble. Got neck surgery. Yeah. Then that a Tiger Woods has 15 and I think Jack has like 17 or 18 or something like that. Then that swaffle that long shot one that you guys were talking about the other night, but it wasn't he like, he's doing pretty good so far. Dishambo? No, no, no, no, no. The long shot. Swa, Shwaif Shifely. Xander, Xander, Xander Shuffle. I think Shuffle. Shuffle? Xander Shuffle? Yeah. Yesterday, I don't know how you did the day, but today, yesterday looked pretty good, I think. But Dishambo, Bison Dishambo was like the big He's falling apart. He's falling apart. Yeah. Like They've had to look for his ball twice now. Yeah. Cool. I saw a like, I saw a meme. Here's our list. Bison Dishambo going like, yeah, Augusta is more of like a 67 for me. And then someone was like Augusta, they put a Michael Jordan face on there from the last dance. It was like Michael Jordan, and I took that personally. RJ Barrett going to the Knicks, Michael Bonn-Valanta, Luca Donchich, Dallas Mavericks, Michael Dwan, RJ Barrett again for the Knicks, Michael Bonn-Valanta, Cameron Johnson, Phoenix Sons, Nancy Ripple, Lebron James, Los Angeles Lakers, Michael Bonn-Valanta. Another RJ Barrett for you, Michael. Kobe White, and this one's a bronze. You can see the top up there. That's going to the Bulls, Kevin Miakawa. There you go. That's the break itself. Now let's give away the spots in Noir. So here is the customer list again from Kevin down to Brian. New Dice Roll, and it's top eight names after six and a two, seven and eighth and final time. From spots nine down to 30. Thank you guys very much for getting into this break, and I hope I do better for you next time. But congratulations to Michael Dwan, Dean Sullivan, Anthony Raimondi, Kevin Miakawa, Matt Arnold, Michael Dwan, Michael Dwan, and TJ Leonard. You eight are now in that Noir break, which I believe only has one more filler pack before we can do. That's pack 292. So the break we just finished was at 2019-2020 Panini Chronicles NBA Fat Pack 291. 292 is in the store now, and only 25 spots left, and that'll sell out in Noir. So jaspyscasebreaks.com. I'm Sean. Thanks for hanging out, and we'll see you next time.


Thank you very much for the organizers for having me and for the attendance for coming. It's actually a lovely spot and it's been a great conference especially because of the variety of topics that have been discussed and the variety of points of view that have come up. That makes it definitely keeps us on our toes. So I also am, well let's see, I should tell you what I'm going to talk about and also tell you first maybe my collaborators. This is Amanda French who moved from, who is a student of Michael Taylor who was with me at McMaster for three years and I was moved to Haverford and Chi Ru Yang who came to the fields and then to McMaster. And it's a little bit, what can I say, it's a little bit humbling to not be talking about a new theorem but an old theorem and in fact an old theorem of Sergio's as well as Chateau and Hormander and some others from about 30 years ago if not a little bit more. So okay, I'm sorry. And to my justification for doing this, well maybe it's just a slight shift in point of view. I don't know if there are advantages but at least it articulates something in a different language. So it's nothing new here and I apologize for that but sometimes it's good to revisit older things. So I'm going to tell you about a nonlinear wave equation. I'd like to talk to you about transformation theory because I think that's what we do not do in PDEs is change variables. Okay, we change x to y and we change u sometimes to u squared or u squared minus d by dx of u but we do not, sorry, ugr so Sergio does it all the time but most of us don't and in relativity you are still just doing local coordinate transformations but you're not changing a bonnock space to another coordinates in bonnock space. And so that's part of, so we're starting to do that a little bit but it's really rather undeveloped. So here's a toy example where you change coordinates in a bonnock space to other coordinates in a bonnock space, at least a neighborhood of a bonnock space. And I'm going to do it in a Hamiltonian framework and then I need estimates to make everything work so that's the format of the show. Now it's been implicit since day one of this conference and I'm going to articulate it, I'm not sure anybody else articulated it so I'm talking on the wrong day but okay, why change variables? Well let's just look at scalar ODE's, z dot is equal to z squared has an exact solution, oh for small data or any data but for small data we think z of zero is equal to epsilon, think of epsilon small and z of t is exactly epsilon upon one minus epsilon t and it has a time of singularity one upon epsilon so that's the, that's the what was called the quadratic blow up because z squared and then you can always read my slides, I hate covering people who cover their slides, there's the cubic case, w is equal to w cubed and its exact solution is root of epsilon squared over one minus two epsilon squared t, if I start with, if I started with data at epsilon and then the time of existence is one upon two epsilon squared that is I have an order of magnitude longer existence time and that's the point, cubic lasts faster than quadratic. Okay it's pretty obvious, certainly to everybody in this room and also it doesn't change if you, at least not essentially if you move things around a little bit like I can add a linear term and it makes it a little complicated now z and w are complex and higher order terms don't, normally without special details change the fact that singularities can occur. So let's talk about the real problem which is a non-linear wave equation. So I'd like to talk, I'd like to talk about equations which look like this, two time derivatives equals Laplacian, so really starting with a, with the background linear wave equation and that's the linearization at zero, I want zero to be a solution, then some non-linear term which I'll make more precise later but let's say that it is at least order m minus one in its variables, so like the quadratic case would be square in its variables and cubic would be cubic and I want to solve the cushy problem, so initial data at time equals zero g and initial momentum h and so basic question in PDE is sort of something people spend their careers studying is what's the time of existence? If I give g and h in some, some class of functions, maybe a sub-live space that's what I will use, I'll tell you what my z is going to be later or several z's later, several possible, then you want to know how long does the solution last and of course the best result is if it lasts for all time and so I'm really working in the class of small data all time, you know, global existence. Okay so this was worked on in the 1980s, I think Sergio's thesis is on this and then a lot of work of 80s was fundamental and on this there's work of Hormander at the time and Jalal Shatat at the time and others and I'm probably leaving off people in the room so you can shout at me but do it after the talk so we don't waste, because time is running and Frank is here keeping track and so just real and really short here is here is an existence theorem, a global existence theorem. Suppose that one half times the dimension minus one times m minus two, well the non-moniarity was order m minus one for Hamiltonian reasons so n minus one, dimension minus one times m minus two, if that's bigger than one then for small cosi data, data in an appropriate sub-live space time existence is infinite and as a balance as everyone knows between solution spreading out and decaying which is a dispersion certainly not a strong dispersion but a dispersion of sorts and the non-linear effects trying to focus things and put things together and if the solution is small and that sub-live space the dispersion wins and just I know everyone in this room knows this or most people in the room knows this but what's the linear decay rate for the linear wave equation which for small data will be reflected in the decay rate for the non-linear wave equation and it's of course c over t to n minus one over two which reflects that first factor which is part of the story. So let's just do that just just calculate if m is equal to three so the non-moniarity is m minus one is quadratic then how do then when do we satisfy the hypothesis well I need n minus one n minus two to be bigger than two so n better be bigger than three which is bad luck for us we live in three space well according to us we live in three space dimensions that reminds me of a funny joke about Feynman but I'll tell you afterwards too for reasons for reasons of time but if m were four if you had a higher non-moniarity then you do the calculation and n is greater than two which is also which is good news for us living in three space but a little bit bad because two is also interesting to mention and then the borderline cases have these almost global existence where you get exponential time of existence in the border in the two when you get equality in those two dimensions and two non-linear cases okay so I haven't said anything wrong yet that's more or less how things stand well transformation theory it tells you there's an interest from going z to w right there's an interest in taking a quadratic non-moniarity and making a change of variables maybe in bonnock space maybe in a neighborhood of bonnock space so that you no longer have quadratic terms but only have cubic terms and this was an idea that was developed slightly after the things on the first slide but it's still alive today because there's some Masmoudi has some work here and some of his ideas have entered in hyperbolic situation with Pussetieri and Châtin a couple years ago which which revisit the idea of changes the variables or essentially changes the variables to get rid of that that the obstacle of a quadratic term in the equations and so I think I'd like to prefer to say that in the following way if for special non-linearities to satisfy a special condition which Sergio called a null condition then for dimension three that was the key one you can make t existence time be equal infinity by a transformation which got rid of the of the quadratic term in favor of more complex cubic terms and in dimension two that extended it's a borderline case and you got exponential time existence so the idea is change variables and one thing that strikes me though because we try a number of us a number of us try is if you make a change of variables certainly in the style that of this theorem it's hard to make it again that is you start with an easy non- linearity that's maybe polynomials or something and you make a change of variables and it's complicated and non-local and just try again it's not so not so trivial so what I want to do is introduce Hamiltonian formal form formalism which which helps helps the idea of making changes of variables but you have to do it rigorously but it gives you a gives you a systematic way of of doing this so let's see what I can do well I can't do every end in fact we probably don't want to do every end the ones that interest me are the ones really come from physics they're ones that come from a Lagrangian so I'm interested in a quay in a not only a non-linear wave equations that come from the the principle of least action actually that sounds very pretty in French so the principle de moindre action I like the word moindre and and then the action functional is a time integral of a Lagrangian and the Lagrangian I want to start at the wave equation so there's a quadratic part in the Lagrangian plus other order terms and the reason my non-linearity initially was order m minus 1 is because I want this term to be order m and it satisfies some smallness conditions for small argument and then once you have this form of wave equation you can affect a Lagrangian transform at least locally near zero where you really just do satisfy the follow the form the classical formula formalism you can take a variation of L formally with respect to ut you'll find P and you call that P and that starts out with a ut a u dot plus a higher other terms and this is algebra well or the implicit function theorem but locally in each x and t to come up with a new coordinates u and P where every time in the Lagrangian you're going to see a ut you have to say though that's a function of P and as well as function of gradient u so the Legendre transform and then puts us into gives us a Hamiltonian which is a bonafide Hamiltonian and it's a function of u and P and it's really just this form and you evaluate every time you see a ut in the Lagrangian as I said you have to use that implicit function theorem of course that's a changing from u u dot to up but that's not a change of variable bonac space that's point-wise u of x and P of x it's a an algebra locally so this is of course a Hamiltonian system in Darbou coordinates where u dot is equal to the gradient of h with respect to with respect to P gradient in this case it's Darbou with respect to the L2 and inner product and P dot is minus gradient specter u and it's a first order system of equations equivalent to the above non-linear wave equation it's not the only way to make a first-order system but it is an elegant way of making first-order system that carries through certain certain other structure which I like to use okay let's do it for the non-linear wave equation because I was just doing something kind of general ish and very soft but if L is equal to that quadratic term plus the higher order terms they come from the the the the principle of this action L2 is the Lagrangian quadratic is the difference between kinetic potential energy at least the linear version of kinetic potential energy and then you do that exercise with h and h is h2 which is the sum of potential with kinetic and potential energy plus a changed r which is related to P by that change of variables and they are of order m as I'm indicating by the superscript and then you differentiate as I told you on the previous slide n to get n which is a non-linearity and then it's order m minus 1 non-linearity so that's everything's I think consistent so far so I'm sorry let's do something simple let's find the plane waves it tells me I have to find so it says solve and Fourier transform it's the linear equation this is what averaging theory is about gives you a dispersion relation dispersion relation tells you where the dual light cone is in with a speed 1 the light cone is the same as the dual light cone but still just remember it's the dual light cone and then here's what we want to do I want to make a transformation from from z which is the vector u vector function up which lives in some bonnet some box space it'll be a so-called space to a new variable z prime and I want I insist that this lives in the same bonnet space and I want to that transformation to be the following I want it one to be canonical well it's because I'm going to design transformations to eliminate things and if I make a general change of variable of vector field that involves the Jacobian of a general change of variables and it's harder to invert a relationship which involves a transformation and its Jacobian then to just think about the trans just worry about the transformation itself so being canonical allows you to sit within it allows you to change variables to design what do you say designer change of variables without the Jacobian bothering you the fact that it's canonical is dealing with some algebra of the Jacobian and that tells me that that tells us that we can come to a new system equations for z prime which is just like the old system of equations for z but with a new Hamiltonian where you just compose well here it has to be the inverse z in order to get the new equations and so the new Hamiltonian is going to be change of variables with its with its orders of of nonlinearity and to be in Birkhoff normal form to order capital M it means that you retain every term between 2 and m by this process you don't change 2 by the way in at least what I'm thinking but you change 3 and higher and then you choose what m is and then your your order the the residual will be m plus 1th order and that will remain and you're insist upon your change of variables having these terms of being only resonant terms for example zero sometimes there are no resonances and you want zero and zero is good for example if you get rid of everything that's even better sometimes you can so each is em retains at most only resonant terms so in this in this parenthesis only resonant terms and resonant terms are the ones which you could say plus on commute with this quadratic Hamiltonian another way to say that is that they preserve the same action integrals that the quadrat that the linear wave equation preserves okay it's a vertical reduction to Birkhoff normal form and in dynamical system this part of averaging theory and we only want to do it once in this talk in fact it's work in progress as I said in my second slide so that's all we've done so far okay so when m is equal to 3 and I want to consider the resonances those are known as three wave interactions or triad interactions and those you you you can find by a formalism which has to do with the wave number so I have to preserve I have to conserve momentum so I need three wave oh c is in r n I should have said I could write that because it's a little confusing the the coordinates but my c is a vector in r n and this is space sorry it's a hat of space and that just says that I conserve momentum and then to be resonant the frequencies have to add or subtract so a triad resonance is one with frequencies adding and subtracting three three fold and okay and then back to the PDE you know infinitely many almost infinitely many papers have been written about this on a formal level but back to the PDE I'd like to understand the construction of such a canonical transformation and its mapping properties on which soba space on which bonac space and then you usually think of these these as discrete indices of a of a dynamical system finite dimensional Hamiltonian system finite indices or on a compact manifold they would be discrete but here we're in continuum and continuum plays a role in what we're going to talk about so when x is in r n it's important where x is a wave equation on a torus is going to be a different story so i'm not doing that when x is in r n c is in r n and its continuous variable and things actually sometimes are a bit better that's one of the things we'll find so here's something about wave equation triad interactions proposition is suppose i have a triad interaction then the three Fourier transform vectors each c1 is a vector the three vectors involved in those three modes are collinear proof of the proposition is the picture so the picture okay is transparent but it's not that transparent so i want to redo that on a on a blackboard that'll make it a little bit more clear but what i want to say is the the resonance set is an intersection of light cones so dual light cones dual light cones so the dual light cone positive going forward backwards going negative you make it out of these are n plus one vectors in spacetime c zero is the spacetime component super index are the components of a n plus one vector and it's where c zero is equal to plus or minus the length of c that's the dispersion relation okay now let me interpret that picture for you remember i need omega of c of one i'm going to call omega one plus or minus omega two plus or minus omega three to be when it vanishes that's what it means to be resonant but i my problem conserves momentum so also i have to have these three vectors add to zero so uh since the the the the convention is that omega is always positive i can't have plus plus plus so at least one can be minus and then it's the same as if two are minuses in order to have a non-trivial resonance except for zero zero's special case and that till and since omega is monotone increasing because it's omega is equal to c right omega c is equal to c length of c that tells me that this is the big one and then there are two smaller ones in length that are catching up so let's draw that in one dimension i'll draw a big so i have a big blackboard here so here is um the omega axis here is the c axis and then um and here is say c one and then here's the dual light cone so if i go up to here and over to here this is of course omega one nobody doubts that but i'm have to add the c's so i would say that i go along here and this is going to be minus c two and then this distance here is minus c three so they c one plus c two plus three three equals zero and that tells me that this height is of course omega c two and the thing that my applied mathematician friends taught me is to understand a three wave a triad resonance take the dispersion relation which is by the way over here as well and and put it up here and so if i go from c two to c three that's going from here to here on this copy of the dispersion relation right that's a second copy and so this height is omega three and so that's uh omega one is equal to omega two plus omega three it's completely clear the whole line so everything's three wave resonant okay but i want to make the but that's a picture in higher dimensions so any higher dimension so this is the first component any higher dimension is now here's the all the other components and i think it's best if i fix c two here so we don't get confused minus c two here and i'm going to make a resonance by moving c one around in a circle with a sphere with a fixed radius and then i'm going to see what c three has for us so i'm going to go over here this is going to be c one this is minus c two so minus c three is that and then i do the same picture above c one i draw c two and c three and the result is this here's the big dual light cone that's above c one here's the little dual light cone that's above c two and this height from here to here is c three and it's completely clear they only touch on the axis and that means they're all collinear that's that picture yes do you really need light cones they have the impression that you have just a triangle and one of the sides is some of the the length of one side is the sum of the length of the two other sides that's this triangle i mean you that has nothing to do with light cones no well this is just conserve momentum but up here the intersection of the two graphs of the of the dispersion relation is the resonance i need to satisfy the omegas of those exceeds and so these two have to touch and that's not just a triangle yeah the the the the sides that built a triangle and what the resonance condition for the omega say that the length the longer the length of the longer side is the sum of the length of the for the wave equation you can say that again this is a picture of that this is a picture of that yeah that's a picture of that absolutely okay so proposition proof now everything which is resonant and is collinear by two proofs in fact of this you don't have to prove tonight okay um how do you make canonical transformations that's the second thing because there's a obstacle to doing this you can't just do anything ad hoc you could try you might touch upon one that's a good idea but um there are actually uh there are mechanisms built over history by which you can construct um canonical transformations and one of the famous ones is to use the fact that any flow is a canonical transformation so solve the Hamiltonian system fixed time that move points around that is canonical and so you so the idea which really dates the Birkhoff is uh find an auxiliary Hamiltonian system my wave equation is h so i'm going to solve for k uh hindsight actually foresight tells you that k should be cubic if you want to remove quadratic terms in your equations and flow that k by inform a Hamiltonian vector field with the k and flow that k and the solution map is going to be your canonical transformation so in order to do that in ways to see what k should be it's useful to put the problem in complex symplectic coordinates which is things that many people uh uh many people use for many cases in fact i think kenji had coordinates very similar to this in his talk and then if i rewrite h the regular regular Hamiltonian from at up to z is canonical essentially and in the z coordinates h has form which is modified but nice so the wave equation looks like this this is the linear wave equation looks like that then all those terms involving uh the m equals three and four and five they are now multi-linear uh convolution operators which we saw in other people's talks uh looking something like this and the cpq which depend on the Fourier transform variables are the interaction coefficients and i want this to be multi-linear so i just noted it down there the Hamiltonian satisfies a null condition this is my modification of the statement and i'll explain the relation in in a minute uh if that interaction coefficient these are the if i take m equal three i'll have three z's and i'll have c with three uh indices if those interaction coefficients vanish for every resonant triad and now that's equivalent to Kleinerman's definition well Kleinerman only has one wave number right because you plug you have a polynomial non-linearity of cubic order and you and you make a symbol so to speak out of its derivatives but you put in one wave number and it has to vanish but we've seen that we're in a situation where we have we're taking the Fourier transform of a function so we have double convolution three functions there are three wave numbers they're the same because of the co-linearity that any resonance all three resonant wave resonant Fourier transform variables are just three multiples of some base variable and Kleinerman's definition is testing the base variable that's basically it so without doing a general situation let's do a particular situation here is a cubic Hamiltonian that gives rise to a null a null form and it's probably the simplest one i can think of and i'm going to put that in equation and then i'm going to talk about removing that with a canonical transformation so express this like i did in the previous slide in Fourier transform variables okay it somehow looks a little messier than i usually think but this is easy actually so h3 you can read it off there's a p and then the u squared and a p but you have to write it in z's and so there are a lot of cubic terms well i guess there are eight different possibilities so i put down two characteristic ones and then this distance difference is this difference and the normalization ended up with the factor of normalization so that's a term which expresses h in Fourier coefficient in Fourier coordinates then the formalism to eliminate h uh which is really doing the standard thing but in the continuum on a function space is to find a k3 such that its plus on bracket with h2 gives you h3 because then the time one flow of k3 will eliminate h3 and will modify h4 and higher and you do that despite triad resonances and now the whole the whole rest of the point is to find to show that the Hamiltonian vector field actually has a well-defined solution solution map on an appropriate bonnet space with maybe some continuity and smoothness i'll talk about what you can expect and i need it i need it as a bounded continuous transformation of a neighborhood to a neighborhood in bonnet spaces okay so what so what is the solution of a homological equation look like well it kind of looks like the Hamiltonian with cubic terms of of of z's and this pre-factor which is the interaction coefficients which is what the equation is telling us to do but to get rid of h you have the what are what are the denominators those are the things which can be small and zero and that's what the dangerous part that you have to deal with so think of it is coefficients with interaction coefficients with these powers the other interaction coefficients with different combinations of z's and z bars etc i only i only put two terms down there i think eight or so terms in this okay let's see the first denominator is non-zero except a zero so here are the non-resonant terms so that's cool just that's fine the second denominator is this vanishes on a resonance set which i drew for you right here and then the null condition tells me that the numerator vanishes exactly where the denominator vanishes so it is where it is on on on collinear three Fourier transform vectors and it's completely clear because i made my example with which is sharp which is uh which is uh Geneva's proof of my resonance condition it says that says it's sharp uh sharp kosche Schwartz in rm okay so then i have to solve that vector field and so i have to so now i'm going to solve z dot is equal to Hamiltonian vector field involving k3 which i'll call this Hamiltonian vector field but but solving is not time time is what you do on the physics time is what the wave equation solves it's an auxiliary parameter that i'm going to take to one i start it starts out the identity at time one it is my transformation so i'm going to call it s that's probably a bad choice because there are a lot of s's in our lives but okay and then the flow map is when you evaluate at time one that's going to be my transformation and it's going to be and it's tau three because i want to normalize the cubic terms of the Hamiltonian and the next thing i'm going to do is tau four except this is work in progress so i'm not going to touch it but okay tau three and then the question is does the flow map exist and it's a little bit bizarre because it's not a pde so Hamiltonian vector field is this i differentiated the k3 and put multiply by i and a few things here and it has lots of terms i have lots of dots now it has about 32 terms okay but but we see what the what the difficulty is what we're going to have to worry about is here's a non-resonant denominator two of them because that's the structure of the first term but here's a resonant denominator and we're going to have to make sense of this evolution equation with these coefficients so let's think about it um z was made out of u and p it's l2 norm is not the is not the energy norm so if you forgive me for making a non canonical change so that i have a new function related to the old function w whose l2 norm is the wave energy norm then it's a little bit easier to kernels to be a little bit more easier so more so they're homogeneous they turn out to be homogeneous and so then the analysis is and so then you have to do a local analysis on the resonance set and the resonance set's not too complicated but you do have to do it in in patches and it turns out that the the the kernel looks like this uh plus uh other variation variants of that and here's a local estimate there's a bounded part which gives you no problem but there are singular regions and the singular regions mean that even with a null condition it's not bounded vector field it's not a bounded vector field now how can that be if the numerator vanishes when the denominator vanishes well hey this is in higher dimensions if we're a one dimension numerator denominator canceled but this is high dimension so the singular parts are when the cone fits all the way down to the bottom of the cone or up in the top so there is there is this singularity so it's not a a monger thing not a lipschitz vector field on any reasonable monoc space that i know maybe not none i don't know but anything you could think of where you want to be you have to do something else so what what do you do well we do pde vector fields any interesting vector field is unbounded what we need is not that the vector field is bounded but its inner product with the with the position vector in the Hilbert space is bounded because we don't want norm to grow too fast that's called an energy estimate so consider how if i take just standard so below space and i take the and i and i suppose i have a solution is the is the hs norm controlled of that solution so take d by ds of the l2 of the hs norm of that solution just to see if you have a chance of approximating and get a and getting a well-defined flow map and it's bounded by z cubed and so it will blow up for large time but for sufficiently small data you will have a time one flow map so that's what i want so but then what's the drawback hey the technology for the wave equation can fit here but it's a lot better in invariant norm so below spaces so this is not this is nice to know there's some cancellation it's unbounded vector field but it has energy estimates but it's not quite what we want to do so take angular momentum operators take dilation operators actually only want to use those two what happens under Fourier transform well you know angular momentum the jl angular momentum operator and a function of x that should be a little x sorry is equal to angular momentum operator and c of course it's it's translation it's a it's a Fourier transform invariant a dilation operator if you dilate an x you collapse in c so you just get plus an extra term so under under Fourier transform you get the same operators the operators obey the Leibniz rule with regard to these kernels that's because the kernels are designed for things which are which are which have good behavior under dilation and which are translation invariant not under each c but under simultaneous rotation rotation by c of course it's a it's a frame invariance so you then don't just take linear derivatives of your function but you all you also take angular momentum derivatives and dilation derivatives and actually let me be a little bit more precise so the function space z is where we work but I just want to make that change of variables to get to the w's so I'm going to look at a w so below space and I want w but oh w is a function of c on the Fourier transform side so I want multiplication by c angular momentum by c dilation by c that I want to be in l2 and I want those to be in l2 when you sum their terms up to order s bar and s bar is not s because I need another index but the Fourier transform the un-phoria transform allows derivatives it's actually a disaster to put derivatives on the Fourier transform side because you want a you want a neighborhood which stays stays fixed and and if and if you put derivatives on the Fourier transform side you put weights on the space side and wave equation propagates things and weights make them grow so you want to stay with a space that looks like this here's a little bit of amusement this is a old estimate of Sergio it says that w the the space coordinate version of w is bounded by the l infinity norm is bounded by this invariant norm so below space but it's completely self-evident the Fourier transform is l infinity as well just because in fact you don't even need all those derivatives you can use less a few angular mentums and only one dilation the hard work was energy estimates in the z space so you have to take angular momentum and and lambdas and control the z's but the basic the basic theorem is there the energy estimates work and so you can force force for a ball radius epsilon in the z space solve the the k equation the the the vector field the auxiliary vector field Hamiltonian vector field given by k3 up to time one and then that flow map is your solution is it a flow well what is a flow should a flow be c infinity should a flow be differentiable well you know with PDEs a flow is can be continuous but is rarely differentiable in the same function space in which you're sitting but you do have a Jacobian and i'm sorry got squeezed into the bottom side the Jacobian of the flow that is the z derivative of of the of the solution map at time s minus the identity is bounded by z sublev norm but you lose a derivative and if you look at two derivatives of the map you lose two derivatives so it's a flow what i want to say it's reasonable consider to think of PDE solution maps as flows smooth flows but on scales of spaces because you don't expect to have differentiability in the same space but the Jacobian is bounded a space down et cetera sometimes it doesn't have to go all the way down because sometimes it can go lose half derivative but that's what i think is that was a little bit of propaganda that's what i think transformation the transformation z prime is tau 3 of z which is the flow map at time one achieved a canonical transformation of our Hamiltonian so it's new Hamiltonian remember you you you plug in your new variables it has no z no h3 anymore it only has a remainder of h4 and the remainder at 4 even is very concrete made out of some Poisson brackets of the k3 that we had already had in mind and the old h4 and now m is 4 and we have that improved existence theory of the of the former theorem of the 1980s this just happens to be by a canonical transformation so what's the point well i think i wanted to elucidate the the the Hamiltonian sense of what it means to be a triad resonance which involves three wave numbers and three linear modes and in their non-linear interaction and the null condition which involves one and that was partly the lemma that that almost trivial proposition which says that that thing that such wave numbers such resonant wave numbers have to be collinear and then the estimate which says that you can make a analytic sense of the mapping in such a thing but of course a goal would be to aim for the dimension n equal to where one transformation is not enough and it'd be nice to make a second transformation well this also is an old theorem so it's also coming back to an old theorem i guess so the audience is probably better than me at the at the history of this but alinak has a has a has a theorem also uh hoshige has two papers and Jean-Marc Delors who's been at this conference has at least one paper on global existence for small data in n equals two and there are transformations in it in other considerations i'm not sure that each one of these papers has exactly the same condition for the for the third order terms as as each other but i think those should be the self-evident at least from a Hamiltonian point of view by considering them as resonances between the plane waves and and it's clear that they're not going to be it's not going to involve just one c they can't be collinear as soon as it's for they might be in planes but they're not collinear okay everyone knows okay oh sorry i was going to stay at the state of theorem excuse me uh the standard argument is uh oh that's right so i don't have to go through this argument because it's a sophisticated audience but uh i'll just put it all on the board just so you know that i know it which is if you have linear if you have a decay of linear equations at time n minus one with the k rate time n minus one over two you also do energy estimates in the uh in the space and in the z space and uh you're going to end up with the c one norm of your solution up here this is solving wave c one norm up here but because i've increased m i have an advantage here this is why the m minus two shows up because one m is you've done one of the m minus the the the last m is on the on the ground this is considered the coefficient and you replace this with that uh sobelov estimate from that i showed you us three slides ago and put this on the right hand side it gives you and it gives you a bound a trapping uh zone in in the initial data solution space and uh that shows you cannot form a singularity and if you do it in uh in the borderline case you don't get a trapping zone but you do for a while and for the while is for exponential time and then i'm done so thank you and i'm ahead of time just please it happens for a nonlinear shreddinger can you do some the same type of uh it's a nice idea uh of course we've had that idea but we haven't pursued it but why not why not why not there were papers uh in the last century by high ascii or nonlinear polynomial and at some point there was some kind of almost global existence in some i don't remember the details okay it'd be good to revisit that i did write a paper on the comparison because for small data uh for nls there's a small data scattering result and there's also the normal form so scattering you could think of as a normal form it's just not very explicit tells you the solution is linear if you go forward in time and backward by linear it says you it's a way of conjugating your equation to linear so that's that's one conjugation another conjugation of course flow backward in time and then compare with a linear equation backward there's another conjugation they're related but it's another conjugation and the third conjugation well you've been have to do it time after time you know order by order is bierkoff normal form but if you have scattering why should you bierkoff normal form but scattering is so okay that's a hard question to answer but one thing you have with the normal form that you don't have with scattering is explicit mapping you know what your solution does where you know how you're changing it so i have a paper which compares scattering with bierkoff normal form for small data but it's not a big existence picture well maybe it's it's something maybe it's something our effort there was not the uh compare the existence theory it was sort of discussed scattering but i think the existence theory also would be worth it show more questions comments well yeah there was a paper by shatani pusate where they sort of made this connection between resonance and non-convision right so that i mentioned that was in my slide four i think it was so it's a 2012 they use the method due to masmoudi shatani and yeah bierkoff normal right and it's sort of a space resonance time resonance so that's a it's a it's not a change of variables it's a it's an inspection of a duramel formula i'm just talking about just a yeah connection between resonance yeah because the resonance that would be the same resonance that would be the same and the single and you have to sing it have to you have you handle the singularity in a certain way interesting about that is you need regularity on the Fourier side so that's a piece of this is it comes out that you can control regularity on the Fourier side of the transformation at least yeah and they don't go twice they don't go twice so i'm aiming at twice you have to change variables again that's what bierkoff normal form is you you you change variables and you adjust some coefficients and then you adjust them again yes so basically for the quadratic linearity I mean the condition is correspond to the coefficient of the horizontal term zero you know it needn't be it needn't be my example it turns out to be yes yeah but is there any the analog of the two linear form so in view of the in the formulation of the bierkoff normal form it is not difficult to find out what is like a the coefficient of the the the ternary the linear terms right then the if such such a coefficient is zero then can we have a sort of like a some sort of easy formulation or condition for the the in physical side like the north the north condition the null conditions on the Fourier side oh you but I guess it's on the physical side too yeah I think probably it's the same probably it's the same the the null condition you plug in one wave wave number one one Fourier transform variable space you plug in one spacetime c and you test whether something is zero but but my sense is on when you do go to the quartic non-linearity you will have more resonances which are not all collinear and so you have to compare say pairs of Fourier transform variables it will be like that suppose there's a pair of Fourier transform variables each one on the light cone how can they how can they interact it will be algebra a little bit like that but one thing I want to say but it's not exploited in this which is on a compact domain like a torus making a normal form involves dividing a Fourier series coefficient by the resonant relation and if it's zero you cannot divide that has to stay there but in the continuum it's very possible to divide by something which is zero for example the Hilbert transform is a perfectly bounded operator which which has a singularity so I really haven't you know found a place where it's very nicely articulated but the potential is there that it's too strong to demand the vanishing of the interaction coefficient just should demand that the relevant vector field after you know expressed in Fourier variables has a sufficiently regular singular integral formulation and so you could say that even if they do vanish you see that the vector field has a singularity but it's relatively mild singularity the one I've shown you


All right kids Rudolph won't be making it this year He can't up and if that's not cool enough. Check out this be a meat and be a pate in terms of to try it Actually, I want to take it home, but I have a feeling that customs will take it off me. So silly customers All right, so it's my last day here in Helsinki I'm about to fly north to Oluk Just about an hour flight north Getting up towards the North Pole to find Santa Claus So I'm telling people anyway So it's been a great trip, but I thought I'd Quickly come down into the city and check out the local markets here If you ever come to Helsinki stand one of the Scandic hotels They included breakfast is insane like insane. There's so much food, but it's it's really good stuff as well But yeah, let's go check out these markets and enjoy the last hour or two and in the city So I thought the beer pate can be a pate was pretty cool. I took this up reindeer hide. I've got to get one of these So I ended up buying a reindeer hide. I just really hope that I can get it into customs fingers crossed I just landed in Oluk and Finland, which is a half like north of Helsinki Gonna bite it up to the ordering office which is here in Oluk, so I thought I'd come up and spend Sunday night here and then Get into the office on the Monday Just some interviews with them like podcasts and stuff YouTube about the new ring. So they'll be exciting and yeah for 45 here in the morning and I am about to do my return leg to New Zealand 44 flights. It's about 40 hours of traveling It's going to be a long day. So I just pulled up my flight studs here. This is this is kind of crazy I'll get in midday on Thursday just under 48 hours of traveling.  Yeah, hopefully you guys have enjoyed Some of the insights into Finland Helsinki. I am going to go get ready for this flight And yeah in there very cool airport so I can go up to the lounge Get access to the lounge here since I flew to the business class and it's a really nice lounge Like it's incredible. It's like three or four different cafe restaurants So much going on up there showers and everything but since I got so much time I thought I would wander around check it out a few little shops So I just booked in at the vitality spot Here in Doha airport. Going to get a foot massage Hit the gym and then should be good. Good way to kill 8 or 9 hours. Alright guys the foot massage done was good. Nice and relaxing. It'll be too relaxing actually. I'm just going to go get my gym session and check this out You got to check this gym out. Not too bad for an airport gym, huh? It's like better than It's better than any hotel gym I've seen and it's better than some 24 hour gyms I've seen. Can you see why I'm so excited? There's no one here. No one. But that's not all. I'll pick this up Squash court. Full squash court but not just one. There's two of them. Like what the hell. This is at an airport. I've actually been here about four times now And I've never seen anyone at the gym or in the squash court. It's crazy. So maybe push pull supersets to make it a bit more time efficient. Just press with a row. So horizontal push pull, vertical push pull, some lower body. And what I might do is like work the weight up to start with like a seat of 15s and maybe all the way down to a seat of six and then on that last one I'll just do a massive dropset. And if I'm feeling really good at the end of it I may even do some sprints on the bike or the row. Let's go lift some weights. Horizontal push pull. That was hard. I should practice what I preach and say you know wrap it up now but all I'm going to do is put a bit of load through the back shoulders from the vertical plane and then one or two lower body exercises just to get a bit of load on the muscle on the joint. Again my ordering score has been pathetic so generally I wouldn't even buy the training on with the numbers I'm seeing. You know so many people would get off the plane 24 hours later go back to the usual gym routine. Yeah even me with all my bio hacks and supplements and everything but he's just like yeah we're not up for this so anyway I'm not going to video the next one because the machines are opposite ends of this gym and that would just look you've just seen me walking back and forth. So then I'll video the leg tour leg exercises at the end but again nothing special here just supersets pushing to failure one or two sets and then wrapping it up. All right that's a wrap I'm toast that was really tough so I'm not going to do arms because he really cares about arms anyway and it's not really enjoyable when you feel like that as well like I trained for fun you know I mean there's the health component as well but it's hard to do something you don't enjoy. I know I mentioned I'd finished with like the cardio worker with some sprints because I haven't done them in a long time. I decided that body's not up to it but then I felt bad because I did say I would. So what I'm going to do I'm going to see if I can swim a length of this I'm not the best one though like seriously well it's only 1.2 meters deep so I think I would say if I get to the end and survive okay it's my breath and try and come back and that can be my spring workout two lengths and then I'm going to go eat and relax. Sweet so had a massage had a workout had a swim had a spa had a shower and yeah I'm pretty refreshed now I still got another five hours I think until my flight leaves so I'm gonna go get some Middle Eastern food which I love and just chill for a little bit before I get into work so let's go let's go to the lounge chip is up which is that one there's so much good food yeah it's insane maybe I should have swam a few more lengths. So I'm home well I'm not quite home but back in New Zealand just landed after the 17 hour flight from Doha it's pretty good actually I got a good eight hour sleep I think looking forward to checking my o-ring data because it felt pretty good but airplanes sleep so it's the best. The sun's just coming up here it's like five thirty in the morning here in Auckland so I now have a four and a half five hour wait and then another hour long flight home it's been a big trip big trip but I think I'm going to sit out here and wait for the sun to come up and get some some mornings on how we sit that circadian rhythm do some barefoot grounding use the human charger and uh try to get my body clock back and sing oh and good news I got my reindeer skin and no issues at all so maybe I should have got some of the reindeer meat as well I'm in the beer factor anyway we didn't know all right so the sun's been up it's been about half an hour or 20 minutes at least giving that sun in my eyes I also was uh throwing a bit of grounding at the shoes off sitting there in the grass and it was quite nice and then this lady came over and started smoking right next to me so that kind of ruined it so I had to ship out and since I haven't seen much sun in the past week or two might as well try and maximize it huh 40 hours of traveling four flights too many time zones I'm back in Taranaki New Zealand yay I'm pretty exhausted there uh just waiting for Rebecca now picking up and then I'll go home but it was a really good trip really really good trip made a lot of awesome people Finland's amazing place but yeah remember the leaf feedback and comments uh and so I can know I know what people enjoy and what you don't enjoy and then also make sure you check out my youtube blog youtube channel uh Alex Vegas coach or Alex Vegas dot com I think it is um because I share this is just a summary video that you guys have seen each week I actually do a lot more in-depth detailed videos that I post exclusively on the youtube channel I kind of like more raw unedited videos so um you know I know there was a lot of material probably a couple hours worth of videos on this trip um but only what 10 minutes is going to make it into the weekly vlog so leave your comments and feedback below hey so I'm back home now settled in caught up on some sleep and um just thought I'd do a really quick garden update because a lot's happened since I'm in a way Rebecca's been watering the garden so that's that's good uh what do we got here we got a lot of weeds but um tomatoes are coming up really nice uh potatoes in here skyrocketing that's that's awesome some of the brassicas are coming up but they're getting attacked here by uh caterpillars so I gotta yeah look at all those bloody bloody things so I'm going to have to come out and clear off some of these later potatoes over here yeah huge as well I mean I didn't really need some more soil to to get a bit more uh potatoes growing in there so Rebecca had her first first few zucchini as well as the way I was a bit disappointed I couldn't uh get to myself but we had some more last night there's already two or three other ones on there so getting to that point now where the zucchinis just die uh coming out in abundance pumpkins done to grow corn coming out another tomato plant there I need to stake that our basil over here has come along really well some capsicum growing there this is the the lager which was my experiment so that's behind a bit and then tomatoes again need to stake this got some basil under there there's like two or three tomato plants there I probably put too many in and then some more tomatoes here so um lots of growth lots of growth so it's good uh finally good to get some zucchini so I don't have to buy them anymore and once those tomatoes start coming out I'm gonna have to start making relishes and ketchups I think because we're gonna have a lot of tomatoes and potatoes yeah that was my quick little garden update


Hi, I'm a L. I'm very lucky because I have the logo of the tish of the project here. It's called almonit We started the project like about seven months ago. It's about the central as websites about eight months ago. Sorry We actually call this center as website d websites because in the first talk that I gave I said this center as websites like 50 times And I broke my tongue so d websites is much easier to say and And Normally right now. I would show you what I mean by d websites and I would show you the decentralized Search engine for the center as websites that we created but since the connection does not work. This is not going to happen Yes Okay, so the websites are basically Kind of an alternative to the regular websites. We did not invent the websites So zero net at least was from 2015 and I'm not sure if there was something before We also didn't invent the method that we are using which is connecting Ethereum like a decentralized name system and the IPFS What we do do is tools for the website which basically means kind of Search engine for search and with index all the d websites with people create and we have a Browser extension for you to access the websites because otherwise from the regular browser It doesn't work unless you use opera for mobile where it actually works natively or status browser and stuff like it And we also plan to have kind of building tools for d websites When I Okay, let's begin with a project almonit Almonit maybe sounds a bit strange the name it means anonymous in Hebrew So I'm from Israel. I am living in Berlin and the reason that we have this lion here I'm really lucky to have the t-shirt By the way, we have a five extra t-shirts to sell for 20 euros if anybody wants Because the minimum amount to make was 10 and we we are only five people So we got it really five t-shirts We will be happy to sell them and maybe we'll be able to pay for ourselves for a beer, which is already something for this project Yeah, so if in Israel there is almonit Ellie anonymous Ellie and if you go in the alley There is a statue of a golden lion in the end Which is why we have the golden lion and then the other reason we have the golden lion is that Mozilla have a fox We like Mozilla So when a fox and a lion is already like a jungle and we want the internet to be like a jungle So it's also like kind of a statement Regular websites basically no like explain to me like I'm five years old Or like all of you probably know I'm simplifying here is you go to a DNS you have a name you go to our DNS The DNS tells you in which server Actually, you can find the content of this name Then you go to the server and the server gives you the website and very various all kind of interaction with the server to create dynamics things In a deal website, we do almost the exact same thing you have a name But you don't go to a server you go to a decentralized name service which All the ones that I know are existing on blockchain So you have name coin and you have a E&S and you have a stoppable domains And you have actually quite a few others right now, which are up and coming We use E&S because at the moment, I think it's the most developed one, but basically the concept does not depend on it So we go to E&S and then we get where is the decentralized website existing and what we get is kind of Identifier in our decentralized in our Decentralized storage so in our file sharing system we use IPFS and From there we have a browser extension that does a very simple thing you enter the the name in the URL bar You get you go to E&S you get where is the website you go to IPFS you get the website and Because of IPFS special structure, you can also create some kind of interactive experience between you and the website, which is already nice when you do that you have like three regular advantages of Decentralization so it's super robust even in this native form. There are only a few hundred websites greeting nowadays, but to DDOS then would be to DDOS IPFS and Ethereum blockchain and This is super difficult. So it's really robust. It's also Private at least in a different way the regular website So it is as private as Ethereum and IPFS are and we can argue how much private is that it's a peer-to-peer Network, but certainly it's a different kind of privacy And it's also censorship as if censorship resistance for the same reason that it's robust It's very difficult to send or peer-to-peer networks and the last thing that I really like about it This is my personal favorite thing is that you can do kind of a collective websites so you can do a website which is being created and maintained and controlled by a group of people all over the world and Maintainers controllers control and creation is being done kind of automatically Which means it's really belong to a group of people. There is no one person who does that This is kind of an experiment that I actually came up with so the only Collective website existence existing so far is a demo that I made and I would probably publish in the last two weeks but it's a use case that really excites me because I've been doing open source projects with people all over the world and There were some of them were about blockchain and sometimes like who operates the website really became a difficult Risky or sensitive issue and here we can do it like as a group. So it's something that I really like Then the Al Moniz project as I said basically Does right now three things there the first one is that the center search engine Which we are really proud of it was a lot of work to do We have here the lead developer who did a fantastic job. Hi Muhammad he's a bit disappointed because I don't have the presentation, but I hope I improvise well It's right now runs client side Which means of course it's super private because it's all prior client side You can do it because there are like only a few hundred websites You can also do it will be a few thousands website and the plan to scale it in the future is I don't know how many I mean if people know here know how IPFS work, but basically you can treat IPFS as one big file system And then we can just like divide the index of the search engine to many many parts And when you will quarry you will only quarry some of them, so you will not have to get all of it We have like for the search engine like three parts one of there is a Web crawler which I wrote it just calls the Ethereum blockchain all the time for a new website and update of websites and update the list of websites then we have a scraper which is written in python and we have a Beautiful H. I forgot the name of the package beautiful soup, thank you, which take text from From the website take the website give you text and we have like another package to do the Actually scrapping itself and all the semantic stuff and we have the website itself, which is our progressive web app It really works fantastically in the way that it looks like a search engine like a proper one And we are really proud of it. So if you watch this talk in your curious check on it To really access the descent as website you need some kind of browser extension So other our browser extension for which exists for Mozilla and Chromium or Meta mask There is also gateways to to the center's website. So if you type almonit.eth.link you get it and Then to finish the talk because my time is up Follow us on Twitter. We need followers We what we really need is people who build the website and especially People who experiment with this concept because I think you can do a lot of interesting stuff. Thank you very much