Before I get into the meat of the talk, though, I'd first like to just thank Francis and all the great Garouko folks. This is quite a conference, a lot of fun so far. Give him a big round of applause. I'd also like to thank you folks for coming out and supporting the Ruby community and conferences like this that I think are a big part of what make the community special. I came out here from LA, but I grew up in Detroit, so I have no problem saying I love New York City and it's been too long since I've been here, so it's a great opportunity to come out and meet a lot of new folks. A little bit just to introduce myself a little bit. In the program, it says that I'm from AT&T Interactive as of about three days ago. That's no longer true. I've moved to a startup in Santa Monica called sharespost.com. If you've ever thought to yourself, man, I'd like to get in on buying some Facebook stock or Twitter stock. That's what we're trying to make possible private equity trading. I'm also the lead developer for WAVES and in the role that I had at AT&T, I was doing a lot more managing, so my GitHub account shows a little bit of a lull and commits over the last few months. I'm hoping to kind of get back and be a little bit more hands-on. But I still am allegedly the lead developer for WAVES. There's some of my contact info there and part of the fun for me of doing these talks is meeting all of you folks. So I genuinely hope that you will, if there's anything in here at all that's interesting or that you think you might at some point want to talk more about or you have ideas that you think might influence the direction that we're trying to go with this project. I really do hope that you'll reach out and get in touch and we can get to know each other. Google, a couple of days ago at Google I.O., announced a project called Google WAVE. So I'm either now faced with changing the name or answering the question about what this has to do with Google, which is nothing, at least not with that project, nothing directly. Also, thanks to a certain incident I've had to do away with the Surfer Babe, which was at the end of each one of my presentations. I won't say any more on that. So first I want to pimp WAVES a little bit. I think I've made the mistake in the past on these of not really talking enough about what WAVES really can do today already. I mean, it is under development, but it's in use on production systems. It's a fairly sophisticated framework already. I tend to like to talk more about the things that we're going to try to do in the future than what it already does, but I don't want to sell the framework short, so I'm going to talk real quickly about a couple of things about WAVES just to kind of give you an idea about what it already does. So there seems to be a couple of different themes in terms of Ruby development. Initially, it was all about MVC and Rails. That was the big sort of initially it was before Rails, it was about a lot of other things, but the really big kind of Ruby blowing up and coming of age was the emergence of a viable MVC framework. Then we sort of started getting into an area where people started saying, you know, I don't always need a full-fledged MVC framework. So I want to do something real simple. A lot of people have used Sinatra for that. I just want to make the case that you can come pretty close to the kind of compactness that you get with Sinatra, but just by using WAVES. And what you see here is an example of the power of one of WAVES core features, which is, and this just illustrates one aspect of it, hopefully the code is big enough to read, probably maybe not, but it has basically, it has a nice DSL for accessing and mapping to HTTP requests that you can sort of use in a lot of different contexts. So it's a little different than conventional MVC style routing that you see with, say, Rails. And so I can match on a lot of things the accept header, the query, and I can do it, you know, as not, it's not a unnatural thing to do. So in this case, you see I'm matching, I'm saying, look, there must be a query parameter in the request called name. There are a number of those kinds of primitives. In this case, we're using the Compact Foundation, which allows me to build a very, very sort of small compact kind of Sinatra-like app. But if I get new requirements, you know, I can also go to handle more sophisticated things. This is a more traditional web app that uses what's called the MVC Foundation. So these foundations are sort of pluggable into WAVES and give WAVES different kind of character, depending on what your requirements are. The nice thing about that is you can start simple and then as your application evolves, you can bring in whatever foundation makes sense or additional, what we call layers.  You can build your own foundation. So this is an example, one of the, I think both Gregory and Eleanor mentioned, Rubinius. So one of the Rubinius developers has been working on a DSL for building more restful web apps and was able to add that in as a foundation. So this is an experimental foundation that's been being worked on by Eros and Akari. Another one, this is a little bit more for services. This is one that I had proposed, we haven't implemented this one. But these are the kinds of things, and then this is more about what I'm, so this transitions into kind of going forward. So here you see an attempt to sort of represent an actual resource server with the DSL that directly expresses the abstractions around rest computing and resource oriented. Some other things, so again WAVES is pretty full-featured. It has things like inheritable configurations that Rails still does not have. I actually thought about pulling that out and some of the other features into a gem. There are really nice kind of decoupled implementations for workers and dispatchers, so you can really, you know, really do quite a bit in terms of customizing and creating your own sort of flavor of web server. Some of the other features there, I won't go through them all, except to mention one in particular, I think it was Gregory had mentioned how great JRuby is. We've had the same experience. And the nice thing with JRuby is from a scalability standpoint, it's very simple to deploy, right? Because you don't really have to figure out how many, I think Eleanor mentioned, you know, letting somebody else do the work of figuring out how to leverage a multi-core architecture. And JVM sort of have that characteristic, right? There's somebody that's spent probably a whole team of people on any given architecture that have spent a lot of time making sure that a given JVM is optimized for a given systems architecture. And you can leverage that. You just run one JVM and you can basically scale up to the limit of the machine. And there's nothing, there's nothing more to do. And we've been doing that not on huge load, but actual production stuff just has never gone down. We've been running that for months on, you know, hundreds of thousands of requests. Now, one of the things that I get a lot after I go through some of the more arcane, interesting things that we're trying to accomplish with waves is people saying, you know, that's fascinating, but it doesn't really impact me at all. Everything I'm doing really fits perfectly well within the MVC paradigm. And that's probably true for most of you.  But what this really is is a symptom of the fact that the, by far the most successful web client is the browser. But that's not necessarily going to be the case for the indefinite future. We've already sort of seen people start to do things within the browser where they're effectively tunneling with things like Ajax and Comet, right? And, you know, we're really starting to do more and more stuff where you start to worry about, hey, I should set the accept header in the request. Or, you know, I don't want to rely on the browser's built-in content negotiation in some fashion. And with the emergence, I think the last time I checked on Programmable Web a few months back, there was well over 1,000 publicly available APIs. That's going to continue to grow. I think more and more of our applications are going to be putting together multiple APIs, right? So, mobile is a big inflection point where we see these sort of hybrid clients where people want to build sort of native functionality, but they also want to leverage the fact that they have a server where they can update some features or update the business logic and so on and not have to release a new app. And I think that starts to go towards, you know, more and more where we're going to see people really using the web as a services infrastructure and not just something where, you know, you have a way to put an app in a browser. So, my favorite example of this is, how many of you are familiar with an open source project called Boxe? So, we already see the IPTV coming to us, right? The Apple TV sort of has one. It's only a matter of time before, by the way, I'd love to see a Ruby Boxe. I don't know if anybody's working on something like that, but if you are, please let me know. But once you get there, you know, you start to realize, hey, you know, the potential for interactive TV for, let's say, you're watching a news program, right? And there's something that you do, some country or person that you want to know more about but, you know, the natural language is being parsed as it comes through and things are popping up on the bottom of the screen. On the name, it brings up some information or data about that particular thing. How many of you have been following the World From Alpha launch? So, there's another example, right, where this guy has built a search engine that sort of semantically parses web content and allows, makes it possible to do some analysis. So, I think we're moving more and more towards a very, very different kind of web and so if it hasn't impacted you yet, you know, it's something to kind of keep your eye on that, you know, the MVC view of the world and the browser-centric view of the world isn't going to be with us forever. And one of the profound things about this is HTTP itself is actually not MVC and I'll talk about what it is here in a minute, but one of the things I want to get across and this kind of goes to the theme of using not just Ruby but really the web itself to its full potential. You've heard the, I don't know, there's some statistic that we only use like 3% of our brains or something and we really only use about 3% of the power of the web and the idea is that Waves is there to help you as our collective requirements evolve past MVC, Waves is there to sort of help us figure out how to, you know, how to write frameworks and build applications that take advantage of that. So again, you saw earlier, I talked about the foundations and layers. Waves just is much more flexible than traditional frameworks. It allows you to mix in the features that you want and then build from there. So you can start very simply and then go on. Now, I want to talk a little bit about the terminology I'm using. REST is a very controversial term, right? And if anybody's followed Roy Fielding's blog, you know that he's very irritable. And one of the things that he gets kind of, I think, reasonably upset about is he invented the term REST and then finds himself in arguments with people about what it means. So you can imagine, it reminds me of, if any of you are old enough to remember use cases and when they first started and a guy named Ivar Jacobson invented the concept and then, you know, there was this endless debate about what use cases were even though he'd written a book on it and it was all pretty much defined clearly in the book. REST is sort of like that where I think if we want to move beyond talking about REST, an appropriate term is a resource-oriented architecture. So if you want to freelance a little bit and you want to get outside of what's strictly speaking, you know, Roy's definition of REST, then I like to use the term resource-oriented for that. And resource-oriented, unlike REST, isn't just a set of constraints. We can actually talk about a real architecture and try to pin down, okay, it's HTTP-based, it's, you know, it's got these conventions, uses these standards and so on, which, like for example REST, it doesn't talk really specifically about HTTP at all. So what I'm really trying to talk about from here on out is HTTP-based resource-oriented architecture. The great thing with the web is that we've already got a huge proven infrastructure in place, right? So we don't, it kind of amuses me, I had a recent discussion with a colleague who was talking about wanting to implement a custom protocol for something. And as soon as you do that, right, you kind of throw away the advantages of load balancers and firewalls and all these things that are already sort of there to help you scale something, help you manage it, managing and monitoring, you know, any kind of HTTP-based services already sort of built in. And HTTP itself is a pretty sophisticated protocol. So, but the funny thing is there's been a lot of the confusion has been around the different verbs and how to use them. I think the best way, and I think this is based on a fair amount of study of what, you know, looking at the REST distortion and reading between the lines of Roy's blog, which is a little obfuscated, I think. But when you really kind of get down to it, what you're talking about is a distributed hash table, which is an incredibly powerful abstraction. So if you take, you know, things like memcached or shared memory, right, I mean, what we're really talking about is key value pairs. So it's a very, very flexible way to do a lot of different things from, you know, messaging to caching to whatever. And this is what HTTP is providing us, a distributed hash table. And that makes a lot more sense of the verbs, because now you can sort of see the construction, right, get and put and delete. And you can use, you know, head to sort of check to see if a value is there. Well, Dan, you know, what about post? Well, post is sort of everything else. Post is the fallback. And it's not at the same sort of level. It's not of the same level of primacy. The other verbs, for example, are idempotent. Post is not. And the reason for that is because we know the semantics of the other verbs that are defined much more clearly. Post is saying, look, not everything fits cleanly in the constructs of a distributed hash.  So what goes in the hash are these things called resources. And we put things in and out using representations. I'm going to talk a little bit more about the split here. The keys are the URIs. And we put representations in and out. But we're really putting resources in and out of this big hash. So what's a resource? Well, it's really kind of, if you think back to your object-oriented programming days, what we're really talking about is objects, except that in objects, usually we're talking about within a single programming language, right? So we don't worry too much about the difference between the representation of an object and the actual object itself. In the cloud, however, we are assuming a very, very heterogeneous environment where the odds are, in fact, that the client and server are going to be different platforms. So what we want is a platform-neutral way to approach this problem. And I think on top of that, you know, objects are sort of, the term is overloaded. So the nice thing is saying, look, let's just forget about all the history here, but remember the construct. We want some kind of thing of saying, this is an entity, a thing, a noun. And now, so I've got my resource. And then in order to support a number of platforms, I've got my representations of that resource. So I'm taking the concept of an object, splitting it into two pieces. Again, going back a little bit, if you're old enough to remember, this is like the holy grail of computing. This is a big deal. There's been many, many attempts to solve this problem. And HTTP, sort of while we were sleeping, has actually solved the problem quite elegantly. But I think resource-oriented goes a little bit beyond even that. How many of you are familiar with a resource description framework, RDF? I think it's something that's worth getting familiar with. And the reason is that it's sort of a crucial, you need something like RDF. If you're familiar with service-oriented architecture, you've probably seen Wisdolls and XML schemas and so on. Well, RDF is kind of the restful answer to those things. It's much more flexible. It sort of unifies both the schema side of it and the resource description side of it into a single framework that's quite extensible. You should check out Freebase to get a freebase.com, I believe it is, to get sort of an initial idea of the kind of power of RDF. And what RDF allows you to do is sort of provide a generic standard entry point into a set of resources so that you don't have a whole lot of things where a programmer has to sit down and read your documentation to figure out how to call your services. And what we're really trying to do is the same thing that I think Ruby has done quite elegantly itself as a language, right? Which is principle of least surprise and that sort of begets all kinds of benefits. If you get a nice, elegant architecture underneath the covers, you know, you start finding that you could do things that you didn't realize you could do. You can combine things that, you know, you hadn't thought of combining when you first designed a system. And so going beyond the original conception or design of a system, that's sort of the essence of mashups as well and that's what cloud computing I think is really going to be all about. So being able to have a sort of machine-readable and discoverable and dynamically composable set of services is actually the key to, you know, getting this kind of fusion reaction inside of the cloud. I just made that metaphor up off the top of my head. A great case study of this is RSS and Atom where I don't really need to know the specific link structure of your blog. I don't care whether you made your URLs readable or if they're MD5 hashes. I don't care because I have, in effect, sort of an RDF file. It's a little bit, it's sort of a derivative of RDF that describes the structure of your blog. And in fact, because it also provides for content negotiation, we got the unintended consequence of podcasts came out of that where I could describe other media types besides just an HTML web page. And I can get all of this with a single link. And that's the kind of the key thing we're looking for is I can write generic clients. I can give you an RDF for a given service or services and you can take it from there because that's the only dependency that I have. And that's kind of the essence of loose coupling. And so we've already seen it in action. And if you kind of ever get like, okay, wait, why am I doing this again as you're playing around with these things? This is what we're trying to get to. Now, I'm going to sort of, yeah. Oh, sorry. I thought somebody was raising their hand. I'm going to kind of go through just some different practical examples of wins in HTTP that I think are interesting and that we're trying to make easier to take advantage of in waves. One of them is the notion of edge caching. HTTP has an incredibly brilliant way of handling caching. Well, it's actually kind of more the definition of caching in a sense. What we think of in particularly, I think in the MVC world, we think of caching in terms of offloading things from the database. But from a scalability standpoint, what you really want is to offload it from your server entirely. And the caching policies that HTTP already provides, which allows the actual client to cache things. So it doesn't even go across the network at all. A request is never made because I know this data is in all likelihood still good. In a lot of ways, a much, much bigger win than using something like M-M-Cached. In waves, for example, you could use Rack Cache or you could just do this with Rack as well. But you can write a simple wave server, put it out in front of your different application servers to handle caching and offload it from your servers entirely. But you don't really even need that because a lot of intermediaries along the way, no matter how many hops it takes, I mean it can either get cached at the client or if I as a client have never seen this data before, it may be one of the intermediate hops that I'm looking at will have seen it. So if you ever have used CDNs or anything like that, this is the same concept. But we can apply this to our applications. We don't really necessarily need to have CDNs and or just M-M-Cache. I mean you can do this yourself. Another example is making the network itself smarter or another example I guess of making the network smarter is refactoring things that are complex or error prone like security protocols out into a firewall type of node so that anything that you want can now actually use the same implementation. So you get one implementation of something like OpenID, you get it right, and now you just can use that across all of your servers instead of trying to embed it within each single server. And again, Waves allows you to do things like you don't really need a URI, it's not a URI centric, the HTTP request handling is not URI centric. So you don't even need to define a URI, I can say look, on any request that's a post, put or delete, I want to make sure that it's an authenticated request and now I've just picked that up for my entire, no matter how many nodes I might have, no matter how many different applications I might be running, I now know that there's no way requests are getting through that aren't authenticated. Now you can of course do that in many firewalls, you can do things like that as well, but sometimes it's nice to be able to use the same kind of application logic where I just want to write a Ruby OpenID server or client really to check authentication, right? So I do that and I don't have to worry about that on each one of my applications and I don't have to go into a configuration that's not in Ruby in order to do it. Another kind of interesting best practice is that a lot of times people using the term RESTful kind of violate this rather badly is instead of, in this example, I've got a link as the value for updates and fans. So I've got this sort of Twitter clone, instead of followers, I've got fans and... So, you know, now the URLs there are sort of semantically meaningful, but they could be anything. The point is again that the client doesn't have to know them in advance because they're embedded in the data. It's like a reference in the data. And what you'll see though with a lot of APIs is they won't even have those attributes at all. Instead what they'll have is a web page that says, okay, now if you happen to need to get the fans of a user or followers or whatever, call this URL. And that starts to increase the coupling between the client and the server. I now have more things that the client has to sort of know about in advance. If I just put the links inside the data that I'm returning, then I have this sort of nice property that I can change that URL to anything and the client will still work properly. Another thing that you sort of see a lot is people putting the format specifier in the URL. Again, this is a bad practice just because what I'm trying to do is describe a key for a resource. I don't want to specify the representation as well. And when you look at linked data, you can kind of see the value of this, right? Because I don't know, you know, what if the client decides, hey, I want to get the followers as a web page and I want to get it as JSON or I want to retrieve it as XML. I mean, it should be up to the client to be able to say I want to dereference this link and I want to get this representation. What's more is that the extensions don't really fully describe what we're asking for. If I start dealing with multiple languages, now I have to have that embedded into the URL somehow. And if I'm dealing with, God forbid, different character sets, I have to put that somehow in the URL. And all of these things increase the coupling in the server. I have more things that the client sort of has to, the programmer himself, a person has to know about. So I'm losing the properties of machine discoverability and dynamic composition by doing that. So it's rather simple and I put the curl statement up here just to kind of illustrate that it's really not that hard.  The team that I was working with at AT&T, we've gone through a definite learning curve on getting used to this and the resistance, especially for programmers that are really, really good at the MVC paradigm. It gets a little frustrating because they have to kind of unlearn some things. But once you start getting going with it, it actually starts to become quite natural because this all really makes sense. I have RDF for an entry point. I have my content negotiation to decide what representations I'm getting. And I have linked data to be able to navigate to find whatever it is that I want without having to know ahead of time what the URLs are. So, again, going back to the question of, well, what is Waves really trying to do? And I showed you earlier that listing where we were working on a couple of different REST DSLs, one for sort of resourceful web apps and one for resourceful services, because it turns out they have... We may be able to unify those later, but Iro and I have been in sort of in this back-and-forth argument about whether to make services more, to emphasize the services side of it or if we should have a really good way to do resourceful web apps first and then build the services off of that, I guess, is... And that's all happening, by the way, on the Google Groups. And, again, I'd love to have more people participating and giving their two cents on it to kind of get us to a point where we have some really useful DSLs in place, what we call foundations, again, in Waves. So, again, this is kind of a... It's a new paradigm, really, in a lot of ways that allows us to fully leverage the power of the web, which is really a distributed object, distributed computing architecture that's platform and protocol-neutral, really. It's extremely powerful, and we're only really using the... We've only kind of discovered the tip of the iceberg, I guess. So, please check out. We've got a new release. If you go to GitHub Waves, there's a stable in edge. So, edge right now is the basis for what's going to be the O9 release. We'd love to get people playing around with that. You know, we'd love to have other people working on foundations or taking the foundations that we have and mucking about with them and that sort of thing. So, again, there's my contact info. Are there any questions that people have? I'd be happy to take a few questions. So, you had said that the URL or the pressing URL itself shouldn't specify the format of the resource. So, in your example, like .xml is too specific to move that into the accept header. But, I guess in your example, let's say if I wanted to request shoe number one from some website and said to shoe slash one .xml, and then let's say I want to see in Japanese, like where would you move that other I guess requested format in your exact language? Right, yeah, exactly. Dan, I'm following that which is that. The header stuff is pretty awesome in theory, but unfortunately not all the parts of the stack have implemented yet. We've had a problem at sling, actually, where we try to get calls that you post their gets. And they do accept js. There's no .js, or JSON, or I forget what it was, or whatever, but it's overwritten with it also to return html. Oftentimes it doesn't track these. So, we'll get these things where someone will first hit do this get on this URL with an accept and we'll return html. And then the second way that someone will do a second get on the exact same, the URL is the same, but the accept is the header is different. Altima doesn't care. It just thinks it's giving you html. So, we've actually had to, we last restful, unfortunately, and that's an area that we should just not use up on, obviously. So, I guess the point of raising is that I think all this stuff is really awesome, but I think also html is a set of conventions that the entire stack is working on, where how well they implement everything is a varying quality. So, we've had similar problems. In fact, the browsers themselves will just blatantly overwrite the accept headers with things sometimes for, you know, like if you have a .jpeg on a URL and it'll just say, okay, I'll accept some of the browsers and just do star dot star. You know, I'll take anything. There's definitely some gotchas. It's like any kind of new paradigm. You have to kind of work through the issues. And I think saying to people like Akamai, like, hey, this is a bug, man. I mean, we need either a version of this that works for more restful stuff or we're going to use somebody else. Yes. I suspect that they're trying to work around a bug or an implementation detail in Internet Explorer. Anything that has to do with Internet Explorer is going to have to have some special features.  But there's a lot of fuss about restful and what do I lose if I say, I'll forget about it. Forget about it.  Sorry, that was the whole point of my talk, I guess. No, I think what you lose is the discoverability, the composability, the sort of unintended benefits that come out of synergies between all kinds of different things in the same way. You as an individual today probably don't lose a whole lot but if we all continue to go off and create our own little silos and I don't think that's where this is going. You look at things like OpenID and the social network APIs or Amazon's web services where I can now do monitoring and I can do auto scaling and stuff. Clearly this is all moving towards this big, vast collection of services in the cloud and I compose to do probably today maybe 10% of what we really want to do but it's going to increase over time so today you probably don't pay too much of a price. But I think over time that price will increase. Partly to follow on from that what you lose if you're not restful is you're fighting the physics of the net. You can describe rest as a distributed hash table but the other way to look at it is it's fundamentally the physics around networks that can lose nodes at any point in time. So you don't for a lot of application development it doesn't necessarily gain you anything now but if you can leverage it you make a lot of scalability issues just fundamentally disappear because they're part of the network structure then on your problem which is great. But related to that and it's all coming back to the linked data aspect a couple of years ago there's a bunch of DNS stuff and there's an area of DNS called Naptur resource records they are exactly that they are abstractions of URLs away from URLs their service all reacted and they're doing almost exactly the same thing you're doing there with RDF and they're right the way down they're in the network they're in the actual lookup of machines and I've banged on about this at conferences for a couple of years now I don't know about data publishing in DNS but all of this it's about moving us away from caring about the physical infrastructure and the DNS folks are trying to do it but they're finding it very difficult to publicise it last year Boyfield and gave a keynote about the computer that forward was clear from sort of like half way back was just clear before he was 20 minutes into what he was talking about and there were people outside he was like I don't see the point what's this got to do with web development well that's what the web is if you're a web developer and you don't get that you don't get the web so that's I'll talk to you about that separately it might be interesting stuff to actually try and fit into building that stuff into the DNS is actually a really interesting idea your scalability becomes phenomenal it is I think a symptom of the confusion around it I think is related a lot to we've been building browser apps but the web is potentially about a lot more than that so what does this have to do with Google again? starting already did you have any comments on the proposed HTTP patch method? no but I'd love to get your thoughts on it I haven't really looked at it I haven't I just kind of a random question but you know if we're talking about keys to resources and caching and browsers are really good at figuring out how to do caching but if you've got these keys in your restable app and your code do you have to also program all of the caching mechanisms into your code to decide when and where to update a new resource? yeah and in fact if you look at the oh yeah the question was you know how much logic do you have to put into your code to manage the caching to manage HTTP caching is that a fair and in the DSL the one that we're still kind of fiddling around with for services you'll see that in fact I'll just quickly put this up you'll see that there we go if you can read I don't know if you can actually read that but one of the core things when you're defining a resource is for given methods is when does that how long does that is that request request cacheable for when does that object expire yeah you do have to put that kind of thought into your app but the thing that we found that was sort of interesting is the more resources tend to be much more fine grained it's almost at the level of like when you do fragment caching if you have resources that are sort of fine grained you get to the point where you get things like fragment caching for free so it's if you've gotten to the point with your apps where you're doing like fragment caching and doing observers and all this kind of stuff then this is you know no different it's probably even a little simpler but yes you do have to put that into the application alright thank you very much


Hell on wheels. That's us. Second armored division. Now a boss, general plumber. Quite an outfit. Tanks, infantry, artillery, and engineers look pretty sharp. It's our last show in the state. We were alerted a couple of days ago. One of the new men, a joker, put an open letter on the bulletin board. A letter to Uncle Joe. Funny history seems to repeat itself. About ten years ago, there was another dictator named Adolf. He, too, thought he had the world in his pocket. I had just joined the second then at Fort Benning. We were starting to organize. Don't ask me with plot. Our guns were made of wood. When it came to tanks, we had to use our imagination.  But as supplies started pouring in, it began to look like the real thing. We were really training now. You heard of Georgie Patton? He was our CG. With him around, you just kept going. The brother had looked as if the training would never end. Was he proud of us the way we came through those maneuvers in Louisiana and Carolina? We were a crack outfit now.  Three invasion teams were picked from units of the second then sent to Norfolk, Virginia. We practiced amphibious landings until water ran out of our ears. Soon enough, I found out why. We were going to be in on the African invasion. At 0400 on 8 November 1942, we hit the coast of Africa. Saffy, Fadela, Port Leote. Our mission was to secure these ports and to envelop Casablanca. It looked a lot different from the movie. Nobody invited us to come to the Casbah. Old Georgie, who was the commander of the Western Task Force, ordered us to the French-Spanish-Morocco border in case there should be trouble. Then in April, we folded our tents and moved to Algeria, to a small town near Iran, where we started training for the next jump, Sicily. We were getting used to the water now. In fact, some of the GIs put in for sea pay. Ah, Sicily. The traveler gets a friendly welcome as he arrives at its sunny shores. Sure enough, the Herman-Gering Division sent us a tank battalion as a special welcoming committee. But we knocked the H out of Herman. The 14th and the 78th field did a swell job there. Then we moved on. We advanced steadily over mined mountain roads that were blown off the cliffs, over tank traps, over blown bridges, through a lot of Italian towns that sounded like the menu of a spaghetti joint. Until we reached the end of the road, Palermo, the last dish on that Italian menu. After setting up the administration of the Western part of the island, we took another boat ride. Arriving in England the short time later, the first combat-tested armor to hit Great Britain. There was something in the air. We knew the big show in France was about to pop and we were going to be in it. We could almost smell it because the training was stepped up. Because a lot of big boys came to visit us, even Mr. Great Britain himself. And then one morning in June we were on the water, getting our last-minute briefings. The date was D-Day plus three. Omaha Beach was a lot different from Omaha, Nebraska. I'll take Nebraska any time. On D-Day plus five, we were in it up to our necks, slugging it out with the Germans at Carintham. It was hydro-country. Natural barriers 10, 12 feet high that Jerry thought would stop us dead. Here's one time we threw the book away, used our tanks as battering ramps. This was only the warm-up, the main event. The famous St. Louis breakthrough. Combat Command Day, led by the 66, fought in the vicinity of Tessie-sur-Veer during the left shoulder of the opening. The 67th, meanwhile, spearheaded CCB's drive toward Sorensys, cutting off the withdrawal of the Germans in that area. Old Man Churchill was right. Sweat, blood, cheers. Fighting street by street, out of house, hand to hand. Jerry's reaction to our breakthrough was to cover attack in the more tamed Berenton area. We smashed it. And how? We were picking up speed now. We started chasing Jerry to the same, taking thousands of prisoners. Pursuing him at an even faster pace toward the song, crossing the river at an unexpected point. Here was one time we caught him with his pantsers down. On 2 September 1944, the first allied elements, led by the 82nd recon, rolled over Belgian soil. Driving across to the Dutch border, we bridged the Albert Canal, pushing north on a line through Sitar. Tanks of CCB under General White made the first crossing of Germany's Holy Soil on 18 September at Hillensburg. The holiness of the German Fatherland became even more soiled when we crossed their border for the second time on October 3rd. It was like taking an obstacle course all over again. Only this time it was the real thing and on Jerry's home ground. He was well dug in at the Siegfried Line, the famous impregnable West Wall. We went in after him. We were part of the 9th Army. Combat Command B assisted in capturing Pallenburg-U-Vac, while CCA moved to the south and took a couple of other crowd towns after heavy fighting. The rest of the division pushed southeast, meanwhile, and joined the 1st Army in a ring of steel around Aachen. Late in November, we resumed the offensive, moving further east and south. Town after town fell under the weight of our armor. But Jerry had still another trick up his sleeve. The famous Battle of the Bones began.  Wasn't much time to lose. They had ripped our lines wide open at the Ardennes. We raced south to Cine in Belgium and tore into their 2nd Panzer Division. Ninety-second fields disfigured out. We cuffed the westernmost prong of their assault wedge to pieces, destroying hundreds of their vehicles, including 81 tanks. Monty of Alamain wrote us a fan letter for this job. In Hoefelies, where the 41st did some of their heaviest fighting in snow and ice, we left a junkyard of the German vehicle. We were sure tired when we met Patton's 3rd Army. Tired, but happy. It meant the western half of the bulge was sealed off. That phase of the campaign was over. After a short period of regrouping, we started the new offensive by crossing the Rohr River. Goldenhausen, Kruppel, Herdingen. We never knew where Jerry was. Was he waiting behind that corner? Wherever he was, we hit him. We kept going until we reached the Rhine on 3 March 1945. That's where the 17th engineers showed their stuff, bridging the river under fire at 7 o'clock. Breaking out of the Rhine Bridgehead, we hit the Autobahn Highway southwest of Beckham, cutting off Jerry's main artery of supply between Berlin and the Rohr. At Lippstadt, we linked up with elements of the 3rd Armored Division, closing the trap on Germany's most vital industrial area. Jerry was losing his cockiness now. The attack rolled on, through the Troideberger Forest to the Waser River under the plains of North Germany. At Immendorf, the Hermann Gehring works fell into our hands. It was the beginning of the end for Jerry. On April 12th, we reached the Elbe. The endstation, as they called it. We had overrun an area of 3,000 square miles, taken 45,000 prisoners, captured some big cities like Magdeburg. But the biggest was yet to come, Berlin. It was quite a feeling to march past the barracks of the Adolf Hitler elite guard. We were the first division in Berlin. Our job was to provide security for the American sector of the city and furnish the honor guard for the Potsdam Conference. When President Truman arrived, we showed him that we were on the ball. From mud and dust, we were back to spit and polish, as if we hadn't done anything but parading these last three years. And then finally came that day in 45, when after two amphibious assaults, seven major campaigns, the outfit started on its way home. The proud possessor of the French forager, the Belgian forager, and 13 distinguished unit citations. Back in the States, we took up our peacetime duties at Fort Hood, Texas. A lot of men got out. New men came in. As the world situation grew tense, it was out of the barracks and into the field again. And now we're ready to go overseas. New weapons, new men, but with a fighting spirit that isn't new for this outfit. Ike sent for us. We always were his first team. Always will be. Hell on wheels.


What's going on everyone Sam here with late in sports cards, and I'm doing a three box football and baseball mixer for Steven W We've got two 21 penini chronicles H2 and one 21 tops chrome platinum anniversary hobby So we'll knock the two now. What do you want to do first? This knock tops out first. This has been a cool product. Honestly. I like that I prefer the hobby to the late cuz I like getting the one auto Yeah, I feel like you get a little bit more color in the base in the hobby to It's not not much more expensive, which is good Got lima zilly on the refractor That's from a Zara. I like seeing the names in this there. There's some Robax Oh, yeah, William Contreras rookie braids all-star Smith 87. Yeah, we got a red red Dave Roberts. Nice 50 51 of a hundred solid the red diamond Manager legend right there world series winning manager Is steel every way turn the Red Sox, that's true. Yeah, you know in Moncada stole a second. Oh, yeah Is it that's cool, that's a good one, man Babe Ruth got awesome meadows refractor raise Albert Bray rookie Guzman Garcia. Wow full rookie pack right there nobody super notable, but still a cool one NCRT Charlie Morton show mo check out quiet all of a sudden now Eric Lee got Rod Karoo X Fractor won per box twins. There you go. Nice one there for a Steven Frazier Nick Heath refractor rookie not numbered Royals Coonia got Dale Murphy on the Aqua wave Braves Nate Pearson rookie Fractor Kirby Yates Oh, yeah, he was awesome Tim linsec come the freak What's your name or order number the baboon baboon Christian Pasha rookie Garcia Yes, please do Vaughan. I would like that Sean and I need people to talk to yeah, we don't want to talk to each other anymore. We're sick of it Yeah Sam a Oh, I see you uh Decent amount still Sam I would say there is Like seven breaks before you some pretty easy ones though, so it shouldn't be super long.  That's pretty quick I'm not a ton of base heavy stuff One optic for Jeffrey. That'll be fun Peace like good in refractor mats. There you go. Yeah, no problem, Sam Christian Pasha Aqua wave rookie. There you go. Nice one there and Howie Kendrick on the refractor nationals. That's cool. Oh, Mariano Rivera To 75 Wow, look at this Pac-Man. Look at the next one too. Wow On the bronze mini die or the rose gold and how about a green yellow to 99 Shohei Ohtani? Wow, nice hits there Steven Congrats, man. That's awesome. Nice Ohtani and Mo Zach McKinsey Keegan Aiken should have our auto here. Hopefully Sweet do Joey Bart rookie got Spencer Howard orange rookie auto to 25 Nice one there 11 of 25 Pretty solid there. Nice. Uh, really really nice boxer Steven. Yeah Von I'd prefer you to be quiet I'm not gonna bid on the wander Mike. I Cannot afford your wander. I Can I can assure you I could not afford your wander? Maybe if I sell my car and I Don't know sell all my cards Maybe I could but then I only have one and I'd have no cars Kelsey Hertz Felipe Franks crown Cordero Patterson to 399 Falcons Got Jamar Jefferson. That's turned around for no reason. Nice Anthony Schwartz and Mahomes on the Stars and Stripes They get thrown off by these because like there's no JJ. What's that Wilson? Flock silver I couldn't think of it for a second there Jalen Phillips base In book to 199 Revan Jordan, I'm not gonna get fooled again. Yep silver elite Skridge and Jovante That's fine. I'm good with Devin. Has to be in the goat return men How is that supposed to rile me up? Patrick Sir tan Kenan Wangu Greg Rousseau nice Kyle pissed at 399 Solid one there Ron Dale Moore, that's Fitzpatrick. Oh, okay I was gonna say I thought if you were trying to rile me up. I was like, I don't know how I don't have any beef with Devin Hester Michael Parsons rookie Not not a flux Just a regular take. I want to think of one that will is diesel Jalari Kenneth Gainwell of Bronson 99 a Monterey St. Brown on the Elite silver Sam Ellinger and TMJ bond where you from? I know this where's one from? forgot actually, Florida Got a score Silver not silver, but score base of Mack Jones Najee crown Trevor Lawrence crown Trevor Lawrence elite silver Not numbered Rashad Bateman Panini and Greg Rousseau Jonathan Taylor AJ Brown got tealaw On the okay, that's just not true. We know that Mike etn and Kaderis Tony. What part? Oh That's right. Najee Harris TMJ and fire me Neenie base base there for you and Second box. Good luck here Stephen Okay, Jesus. I was freaking out for a second. I thought I ripped one too many boxes. Oh, we're good We're good carry on is normal All right Thanks again, everybody for getting the stream to over a hundred likes really appreciate that Kind of gain well Mack Jones crown base Devonta Smith crown base Devonta Smith elite silver Trey Lance Panini and kind of gain well Great iron things Miko Collins and Trey Juan Smith. Nice Mack Jones prison black base Felipe Franks and Aziz got Pat Friar me with the 399 on the elite red Devonta Smith and Davis Mills. We got luminance and Neenie base Just north of moon socket nice Mark Chase I'm adding rate Madden ratings think Mike Devonta Najee Harris got Chuba Hubbard to the 399 Chronicles red Niko Collins Sam Ellinger Devonta Smith on the Stars and Stripes Vaughn I'm originally from Gloucester My sister lives in April nice David Montgomery Trey Lance Contenders or contenders Chronicles Mack Jones silver Dynagon Devonta Crown Royale Cleal Herbert Cleal Herbert again Kellan Mond and Justin Fields playoff momentum Corey Davis Aaron Donald Monro St. Brown legacy Trevor Lawrence on the crown Royale base Niko Collins crown Justin Fields silver elite Trevor Lawrence on the Luminance and Kyle Pitts clear vision and last pack. Good luck here, Stephen Jeffrey Simmons and Alvin Kamara how Tresk Flux Remandre Stevenson crown nice Justin Fields to 99 on the blue Chronicles base solid one there and Jamar Chase the 49 nice pack Wow 22 of 49 That's a really cool That's kind of a trippy insert look at that Pretty solid on Etn and Zach Wilson that'll do it for your break there Steven congrats on all the hits get those right out man. Thanks again


Thanks for the introduction. I'd like to thank the organizers for allowing me to talk. OK, so a lot of this will be joined with Michael. And it was helpful. He came with his obstruction, bundle gluing, and intersection theory from ECH. He was kind enough to lend them to the contact tomology. All right, so we're going to start off with a contact manifold. For most of the talk, it'll be three-dimensional. But in some parts, I might get to tell you about what we can do in higher dimensions. This is going to be non-degenerate contact. And it's going to be co-oriented, meaning that there's a global one form that defines the contact structure. And for grading reasons, let's pretend or assume that the first turn class of the contact distribution vanishes. And then R is going to be my rave vector field. OK, and then I'm going to have J is an almost complex structure on R cross M. And I'll take d e to the tau lambda. So here, tau is going to be my coordinate on r. It's going to be translation invariant. Yeah, translation invariant. So I have d tau R is going to be J d d tau is going to be equal to R. And I want J restricted to, I'll just say J is d e to the tau lambda compatible. OK, then we want to count cylindrical curves. So crystallized asymptotically cylindrical curves, R curves, the domain is just going to be a cylinder. So it's not going to be super exciting, but they're still fun to look at. So I'll denote the space of let gamma plus gamma minus be periodic rave orbits. Mj gamma plus gamma minus is going to be the set of J holomorphic curves from a cylinder. R cross S1 J0 into the simpletization equipped with this d lambda R invariant, almost complex structure. And then we want du of J to be J of du. So we want them to be pseudo-holomorphic. And then we want the limit. So if we take R to have the T coordinate, S1 to have the S coordinate, we want the limit. As S goes to plus or minus infinity of the projection of U on the contact manifold component to be a reparameterization of the rave orbit at gamma plus. If we go to positive infinity and gamma minus, if we go to minus infinity.   And then there's also going to be an R action that technically you have to mod out by coming from translations on the target. And so when we go to look at the differential, there will be this translation action. But a lot of times I'll ignore it when it comes to talking about index calculations and stuff. OK. So anything other than the gradient dependent on your assumption that C1 equals 0? No. So I can just drop that and be happy with the Z2 gradient? Yeah, so you can drop that and use the Z2 gradient. Of course, when I define a dynamic convex contact form, you'll need some sort of way of making sense of the gradient on contractable orbits. So the gradient is given by the Conly-Zehnder index. On our chain complex, we have that the virtual dimension of this moduli space is given by gamma plus minus the gradient of gamma minus. And here the gradient is an SFT gradient. So this is going to be Cz of gamma plus n minus 3. So if the dimension of our contact manifold is 3, then you get this is just Cz of gamma minus 1. So then I can tell you what the chain complex is. So this is going to be generated by only good rape orbits.  And so to define a bad rape orbit, it's a little bit annoying. But so the Cz index of a rape orbit can either have the same parity under iteration of your orbit, or it can flip flop between being even and odd. I'm sorry, odd and even.  So bad rape orbits covers. If you want the real definition, or you want an example. So in dimension 3, bad rape orbits are even multiple covers of negative hyperbolic guys, meaning that they have the eigenvalue of the linearized return map. If we restrict it to the contact distribution, is negative and real. Is there a reason for your v there? For which? The ccvq, like in your top line. Is there a reason? It's not a v. It's not a v.  Yeah, sorry. He just thinks the star is a v. Never mind. It's clear enough. Is there another way for why are bad rape orbits bad? So if you keep them in the chain complex, even if you had all the transversality in the world, you'd never be able to prove invariance.  And so when you try to assign orientations, you can get both positive and negative orientations assigned to the same cylinder, and this causes a headache.  Any other questions? This motorized space is a factor between more often parametrization of the cylinder, right? Yeah, so that is kind of incorporated by the fact that this is the projection onto the contact manifold as a reparametrization of gamma plus minus. So that already includes that. And then the differential. So there's actually two equivalent ways over q of defining the contact differential. So either we can define it to, so let me just write this down, and then I'll say, OK, so either you can define it by looking at the multiplicity of the top rape orbit, or you can define it by encoding the multiplicity of the bottom rape orbit. So and this epsilon u is just supposed to be some choice of coherent orientations. M of u is the degree of the covering map of the curve if your curve u is not somewhere injective.  And so it might look like these coefficients are defined are not integral, but they are in fact integral. And so you can see that, because if you have a k to one-fold cover, where you have x is gamma, let's see, plus to the kp, and y is gamma minus to the kp. This would be a k to one-fold cover of a cylinder, gamma plus to the p, gamma minus to the q. And so the multiplicity of x is kp. The multiplicity of y is kp. The multiplicity of this curve u is k. And k obviously divides both kp and kq.  So maybe simple hasn't been defined, but that just means that the map x, which is r mod tz, into your contact manifold is injective, and m of u equals 1 if u is somewhere injective. So that looks like beautiful theory, but it's not really so beautiful. So some of the issues that are going to arise is that we're working with multiple covers. Are there a question? So can you explain the difference between the two? Well, one encodes the multiplicity of the top rape orbit, one encodes the multiplicity of the bottom rape orbit of your cylinder. And it turns out that they're equivalent, sort of if you had all the transfer salinity in the world, that would mean that your differentials were defined and you actually got a homology. And then on the chain level, you could just divide and multiply out by multiple seed of rape orbits to pass from one chain complex to the other chain complex. So the homologies are isometric under this? If you live in magical transfer salinity. They can be of two different branches. Yes, but they're equivalent. So why is this theory possibly not so correct? OK, so the first issue is that we're working with multiply-covered curves. And Chris spent many lectures telling us, as well as Dusa and others telling us about the horrors of multiply-covered curves. And then also, I think Michael mentioned this a few times, but you can look at multiply-covered curves and they can end up having negative index, even though they live in, even though they have to be there and you can't just use a generic perturbation of J to get rid of them. And so this means that compactness issues are going to suck. Well, maybe they don't suck. Maybe they're beautiful, but they make the theory harder. All right, so everyone's favorite congerum from 2000, which is in a paper by Ali Ashbur, Gimental and Hofer, says that, assume there are no contractable rape orbits of index minus 1, 0, or 1. So this is this grading. That's the Conley-Zander index plus n minus 3. And, OK, it also started by saying, what, y, c, v, a non-degenerate contact manifold done. The differential is well-defined. Of course, no one really said which differential they were using, which adds another layer of confusion, but that's OK.  So dq squared is 0. And this homology, which depended on your contact form, your choice of J, was actually an invariant of the contact distribution. So EG independent of the choice of lambda and almost complex structure J. I think should be fair. They didn't quite say that, because they said that some abstract perturbations of the modulate spaces would be needed, but they wouldn't go into the details of that on that paper. Because this one is too much of a problem. Well, it doesn't even appear in this form in their paper. It appears as a series of lemmas or propositions. They said at the beginning, this is all soothing some perturbations of the name. Well, at the beginning it said that this is all conjectural. So this is why it's a congerum. So it's a conjecture of A plus. So the conjecture is that this statement can be corrected to the other side. Well, the other problem is that some people then said you don't need abstract perturbations, and this works anyways. Is anyone happy? No? No one's happy? OK. So what is this beautiful compactness that I alluded to? So this is Bourgeois, Lyoszberg, Hofer, Vizatsky, and Zander. This is a result from 2003. Again, I'll paraphrase this result. So there's no bubbling like in Hamiltonian Fleur theory, but we do have breaking of curves into buildings. So Michael drew some beautiful buildings of asymptotically cylindrical pseudo-holomorphic curves. And so the heuristic reason for why we have this breaking is because there is a maximum principle in the R component of the simplectization, but you can grow minimums. And so if you try to compactify the space, you're going to be allowed to develop new punctures at the bottom end. So you had some index two cylinder. You could conceivably start to have the picture people draw. So you have some sort of a minimum developing in the R direction. And so then if you want to compactify the space, you could pop off a plane. And this would be allowable elements of your compactivification if you could not sort of exclude it for other reasons. And then this makes us sad, broken cylinders in your compactified, modulated space of index two curves.  Why is this breaking and not bubbling? How much? Because you have cylindrical end, which is, as I said, has a real boiling parameter instead of a complex one. It breaks like a trajectory of more stereo or core theory and not like a bubble and a grimoire. OK. That's really great. So I'm not going to draw a complicated sequence of buildings, but you can imagine that sort of, well, Michael was talking about how you can have branched covers of trivial cylinders. Those guys can have index zero. So you could be in some situation where x is gamma squared, z is gamma. And then the cylinder could break to be gamma squared, gamma, gamma, gamma. And this could be a holomorphic plane of index two. This guy has index zero and this guy has index zero. So this would be an allowable compactification. And in dimension three, there is really nice iteration formulas for the Conley-Zander index plus automatic transversality. So I'll explain in a minute how you can salvage this theory in dimension three. But in higher dimensions, you can have cylinders of index one and you take their multiple cover and they suddenly have negative index. And then that means that you, in other elements of your compactified modular space, are going to have to include things like a chain of cylinders where you just have to end up being able to add to two at the end of the day. So that makes things complicated. And philosophy with a lot of this stuff is, well, if we only had somewhere injective curves, you just pick j generically. So all of my modulized spaces have to have positive virtual dimension because we're working in a simplectization and have this r-action. And the only way that you can add to two with positive numbers is one plus one. And this original assumption about no contractable orbits of index minus one zero one come because this sort of building is not excluded by the assumptions, but you could have some building where you have one, one, and one. So this is like why the assumptions in the congerum exist. And then the zero and minus one sort of come up when you try to prove invariance and homotopy depending on what level of transversality you want to assume. So it turns out that in dimension three you can get automatic transversality and index calculations to work favorably. And so in my thesis, I found not a very large class of contact forms, but a class of some contact forms where you could actually define contact tomology. So sort of the definition I came up with is we say a contact form is dynamically separated, provided the conlesander index of gamma is between three and five for gamma simple and contractable. And every time you iterate gamma you're just increasing the conlesander index by four. So this holds and then plus you can do this if you, so I guess I should say if gamma is non-contractable have analogous definition but you have to keep track of free homotopy classes of rape orbits and it just becomes a mess to write down so I'm not going to. Is there a question in the front? And then the theorem that I proved is that if, so this condition, this is usually true up to large action.  So by up to large action I mean for all rape orbits of action less than or equal to something you have this dynamically separated property and these guys all for the most part are rises. There's a natural class of perturbations you can put on pre quantization spaces. So this is where these guys come from. So if my three lambda is non-degenerate dynamically separated then and J generic then the cylindrical contact homology is defined and sometimes up to like some sort of. So if you don't have this dynamically separated for all of your rape orbits but only up to some large action then you can only define cylindrical contact homology up to that large action and index and then there's a way you can take direct limits to actually sort of compute it. Invariance under the choice of J and dynamically separated contact form. Okay, so this is not so awesome because it excludes a lot of examples like dynamically like certain dynamically convex things like ellipsoids.  Hook thing is annoying. Okay, so a dynamically convex contact manifold is something that Hoper-Vazatsky and Zander studied in the 90s and what Katrin knew as HWZ papers was when she was a graduate student. So a dynamically, so Y3 lambda is dynamically convex provided the first churn class of the contact distribution restricted to pi 2 of Y is zero and the Conley-Zander index of gamma is greater than or equal to 3 for all contractable rape orbits. Okay, and so an example is any strictly convex hypersurface in R4 with the standard symplectic structure which is transverse to the radial vector field. So this is a nice class of contact manifold because I erased the theorem but it's basically without sort of a theory of abstract perturbations that's going to be the class of contact manifolds so that all the contractable rape orbits give rise to planes that all have to have virtual dimension at least two. So this would be sort of like a nice class of manifold you'd like to prove contact tomology is defined for an invariance in dimension three. Okay, so, oh yes, okay. No contractable, condition A, C1 of pi 2 is zero or B. So what Michael and I proved is that if Y lambda is dynamically convex, J is generic, then the only buildings of index 2 in R cross M are either just a cylinder, a once broken cylinder or if you, okay, I should also write this. So we're going to assume that Connelly-Zehnder index of gamma is strictly greater than 3 for gamma non-simple and contractable and I'll explain why in just a second or you have a pair of pants, a plane, and a trivial cylinder. So gamma squared gamma is zero, zero, two. Okay, so we have this extra assumption that there should be gamma D, D minus 1, sorry. Okay, so we have this assumption that the Connelly-Zehnder index is strictly greater than 3 for gamma non-simple and contractable. We expect that it's removable, but we have to do a little bit more estimating things to make sure that something bad doesn't happen in the next blackboard, but sort of what we proved is that the only buildings of index 2 are either an unbroken cylinder, a once broken cylinder, or this pair of pants configuration. If you assume, if you don't have this assumption, then your pair of pants configuration can have like this gamma could be gamma to the D1, this could be gamma to the D2 and then this is just a D1 plus D2-fold cover of a trivial cylinder. And the second part of our lemma is that no index 2 cylinder can limit to the third configuration. So we didn't prove that there are no buildings of this type. There certainly are, but we just showed that there's no index 2 cylinder that could limit to it, which means that as a corollary, the cylindrical contact tomology differential is well-defined and it squares to zero. And this is in a simpletization, so the reason why we don't have invariance yet is because this sort of analogous lemma in cubortisms for sure does not hold. Any questions? So a priori, what are the possible configurations for that third one? I mean, I'm looking at this and you're saying if it can't be the case that a cylinder, if it can't be the case that a cylinder of index 2 limits on the third configuration, I'm looking at that thinking, okay, well, if in some world I could perturb and actually glue that thing together in some sense, then it would be an index 2 cylinder. So therefore, if you, like, what kind of perturbing do you want to do? Well, that's sort of my point. So if you were doing obstruction bundle gluing and you decided to try to see if you could do this, the number of ways you could glue it together would be zero. Actually, just to, that's not how you prove it, right? No, no. It's approved by contradiction. Sorry, so we use, yeah, you use intersection theory. You say, like, suppose you have this curve living into this, then you look at some intersection theory properties and prove that you get a contradiction. Therefore, your index 2 cylinder can't limit to a building of that type. True proofs are actually the same if you look deeply enough. Yeah, and since obstruction bundle gluing goes back to winding numbers and, actually, I have, well, can't the obstruction bundle gluing, can it only tell you that the sign counter phrase to glue is zero, whereas this is really telling you there's no way to glue it? I think in this case, you'll actually see if the obstruction section over the adhesives could go to that too. And where do you use the intersection theory stuff? Oh, the intersection theory stuff is to prove that no index 2 cylinder can limit to the third configuration. And where is that to use the fact that it's dynamically convex? Oh, so we use the fact that it's dynamically convex to prove that the only buildings of index 2 are of those three types.  And then you're also using automatic transversality and some index stuff, improving that those are the only three types of buildings. And that's also what's getting you the transversality you need to say that the differential is well-defined. So we also prove that all index 1 and index 2 cylinders and simpletizations are cut out transversely. And do you need dynamic convex for that? So you don't need dynamically convex for that, but you're going to have a problem with looking at your compactified, modulized space of index 2 cylinders. Like, then I'm going to have way more things, and I'm not going to be able to prove that d squared is 0. Let's say you can know that you only have these three kinds. You can only get that if you're dynamically convex. We all have bad vision of people in the front. But what are the indices of the curves in the third building? Zero, zero, and two? Yeah. I didn't want to put the zeros here and here, because then the people in the front row would ask if those curves had genus, and I was counting cylinders. Yeah, no, it was good. I just need plastic. The top bubble there is a branch cover of a trivial cylinder. Yeah, I should have. OK, that's fine. OK. OK. He's a trivial, trivial cylinder. Everyone happy? If you're not happy, I'll get on my hook. I actually really like holding the hook, but I think that makes for a slightly scarier talk. Oh yeah, and I guess, so I was going to move on to the non-equivariant part of the talk, but do people have any other questions about what goes into the Waman corollary? I guess I should maybe upgrade it to a theorem, but anyways. OK, so two, we're stuck on invariants, so we need to do something. So we'll try to define, so we'll define stuff non-equivariant. We'll define a non-equivariant version. Oh yeah. So to clarify, this normal approach looks bad because you can't prove this sort of lemma in co-bordisms. You also don't have the sort of automatic, I mean you have some automatic transversality in co-bordisms, but it's not good enough, and you're not going to be able to prove the chain homotopy equation, so invariance is not really going to go so well. So what we can do is we can define a non-equivariant version and when we set up a non-equivariant version, it's kind of analogous in Hamiltonian Fleur theory to when you pick a time-dependent Hamiltonian, so all of your curves end up being somewhere injective, so we're going to do something similar in the contact world. There's still going to be some things we have to work out, but they're doable, and then it turns out that there's a way to take an S1-equivariant version of this non-equivariant picture, prove that it's isomorphic to classical cylindrical contact homology, and in a very roundabout way, get invariance for the classical cylindrical contact homology. Okay, so this non-equivariant theory is kind of look like the positive part of symplectic homology, whereas this cylindrical theory, if it was defined, it would look like the S1-equivariant version of the positive part of symplectic homology. But we don't want to use symplectic homology because we'd like to define something directly in terms of the rape data and in terms of asymptotically cylindrical pseudoholomorphic curves as opposed to looking at the Fleur equation. Okay, so we're going to take J here. Instead of using one J sort of for all time, we're going to take a domain-dependent J. So J, T for T and S1 is going to be an almost complex structure. And we still want for each time T that it goes to the rape vector field, and we want for each time T that it's D e to the tau lambda compatible. And then we're going to be counting, well, we're not going to be quite counting pseudoholomorphic curves where I just throw this T dependence in because that's not going to, you know, automatically get us a non-equivariant version. We're going to have to be a little bit more careful than that, but the moduli space we're going to start to want to look at and put point constraints on is going to be this guy where we're using a domain-dependent family of almost complex structures. So you just put a T in your J-homomorphic curve equation.  My R coordinate should have been S and my S1 coordinate should have been T. Now it makes a lot more sense. Okay.  Well, so this is forcing in some sense, you can't make your lambda time dependent. This is like the closest you can get to forcing your periodic orbits to be time dependent. I can't make lambda time dependent? It's a contact, like how would you make it time dependent? It's just a contact form. Like it could take a time, a group of contact forms, give them the same context, right? Well, I would rather take a loop. We're not looking at period one orbits, we're looking at arbitrary period one orbits. Oh, yeah, that's the other thing, sorry. I mean, the point is now all the curves that we're multiply covered are no longer going to be multiply covered for a generic family of almost complex structures that depends on the domain. So the good news for a generic family, j gamma plus, gamma minus is a manifold of dimension equal to the Conley's Ender Index of Gamma Plus minus the Conley's Ender Index of Gamma Minus. And I broke some symmetry, so it's got an extra dimension on it. Right, and so you're going to be working in a situation where the, so there's a paper by Fleur, Hofer and Zalaman that gives you transversality in the Hamiltonian Fleur case, and so this is sort of the, you can't pick a time dependent Hamiltonian, but you can pick a time dependent almost complex structure in your J-homomorphic curve equation, and so that's how. So all your curves are going to be somewhere injective and ta-da. Okay, but you're not going to be able to define the differential sort of in this naive way here. So let me tell you how to define the differential. Okay, so to define a differential, we're going to need to throw in some point constraints, and this is kind of how we're forcing a parameterization of our ray orbits in terms of time. So, okay, so here's my curve. I'm going to be able to look at u of r cross zero, and this is going to pick out some line on my cylinder. Okay, and you can use this to define evaluation maps from our modulized space into the image of gamma plus minus, which we define to be the limit as s goes to plus or minus infinity of the projection of the curve when we look at time zero. Okay, so this is supposed to be like when t equals zero, and this is some point that's in my raybar met gamma plus, and you can do the usual thing where you can map this evaluation, map the sense to an evaluation map after you quotient out by r, because even if we do define a differential, we're still going to have to mod out by r where this r is coming from the translation in the simpletization direction. Okay, and then my chain complex. I no longer have to throw out all these bad ray orbits, but I am going to have to have twice the number of ray orbits in it as before. So, you can kind of think of this as a more spot version where your Morsebot manifolds are your raybar bits, and you put a height function on s1, and so that gives you two critical points. One critical point has index zero, one has index one, so we're just going to kind of... That's not really what we're doing, but it's the vestigial motivation for defining our non-equivariant chain complex to be generated, so it has two generators associated to each rayb orbit. So, gamma check and gamma hat. Gamma is any rayb orbit, and then I'm just going to arbitrarily shift the grating up on my gamma hats by one, so we have that gamma... The image of gamma... Okay, I'm just going to say that gamma... Conley-Zehnder index of gamma check is equal to gamma. Conley-Zehnder index of gamma hat is equal to the grating... I reversed this. So, I should have written the inequalities the other way, but the grating on gamma... I'm getting confused with hats and checks. Okay, so the grating of gamma hat is going to be equal to the Conley-Zehnder... The grating of gamma check is going to be equal to the Conley-Zehnder index. The grating of gamma hat is just going to be the Conley-Zehnder index shifted up by one, so the Conley-Zehnder index of gamma hat and gamma check doesn't make sense because it's the same underlying rayb orbit gamma. So this should be the correct formula. So you just think that I have gamma check and gamma hat are formal variables associated to the rayb orbit gamma. Okay, uh-huh. Yeah, this is any rayb orbits. You allow also the bad rayb orbit. So it's just like in symplectic homology you would also see the bad rayb orbits. Okay, and this is kind of... So this non-equivariant picture is sort of not original, but it, you know, is an adaptation from stuff by Bourgeois, Lyoszberg and Ekholm, and also Bourgeois and Wantscha. Okay, all right. And now my differential is going to have a block decomposition and I'm going to have sort of stuff that goes from a check rayb orbits to check rayb orbits. So there's four different ways. Sort of you can go from... Let me just write this out and then we can talk about it. So hat, this is just Z generated by this guy. So I promise that you'll see this evaluation map and I just wrote it down and show up.  Is that something desired or is it just a quarter of this? I mean, so it is desirable and it turns out that this S1-equivariant version, like once we figure out what the S1-equivariant version of this non-equivariant theory is, it's actually defined over Z. And so it's going to have more information coming from bad rayb orbits because it's defined over Z. And it turns out that if you tensor that theory with Q you get the usual cylindrical contact tomology theory. So it's a quirk, but I guess it's good because you get more information. Okay, so what do each of these terms count? So d check, alpha check, beta check. So here you would want the degree between the degree and index between alpha and beta to be one. So you want to count cylinders where you are going to, right, so you want to, you're going to fix a point on the underlying simple rayb orbit associated to alpha. So this is some point on the image of alpha bar is a simple rayb orbit to alpha. And then we want, so this is going to be curves U in this moduli space going from alpha to beta mod R with the positive evaluation map of your curve U being equal to p alpha bar. And we're also going to have to count Morse bot buildings with a cyclic ordering condition. So the evaluation map constraint is supposed to be this sort of point where p alpha bar needs to match up with pi y of U of s zero. And then we'll count these guys. And then we'll also have some buildings that we have to count where you've got a cyclic ordering condition, meaning that you want f minus of the top curve, f plus of the bottom curve, and whatever point you're picking on this intermediate curve. Let's call this guy gamma to be ordered this way as you go around to gamma. So you're going to need to orient to your, like a direction for how you're going around your rib orbit. And then d check of alpha check beta check is going to be something analogous, except instead of having the positive evaluation constraint, you're going to have the negative evaluation constraint. And then d plus alpha check beta hat, this has no constraint. So this looks like the two bad map that you see in the Birch-Wile-Yoschberg-Akholm formulation. So if we look at d plus of alpha check, alpha, sorry, alpha hat, alpha check, you get two points if alpha is bad and zero if alpha is good. And d minus alpha check alpha hat, this has constraints at the top and bottom. And this non-equivariant theory is not really so easy to count because not only are you sort of counting cylinders that either have one point constraint, two point constraints, or zero point constraints, you also need to count more spot buildings that have the cyclic ordering condition. And these more spot buildings, they're not going to be of infinite length because you only have a finite number of rib orbits in each Conley-Zehnder index, but they are going to be some sequence of buildings that you have to figure out how to count. But it turns out that, so if, let's say, okay, so theorem is that, oh, and I should have, sorry, this d minus here, so this also in addition to counting u and m alpha beta with f plus and f minus constraints and more spot buildings, it also will count ways to glue an index 3 curve using obstruction bundle gluing that looks like a branch cover of a cylinder. This is zero, two. What is the j on the cap there? The, it's a 2. No, it's a j. So you fix a family j of t on the remains. Yeah. So it's a bubbling off at a point. Yeah. Yeah. So some j would bump it off. Yeah. Is it clear why you can only have one plane as well? Yeah, index calculations. Is the reason that you've defined this chain problem is to ever see that the high dependence means you can do an isotropy? Yeah. So your curves are always going to be somewhere injective so you don't have the isotropy anymore to deal with. So for y3 lambda dynamically convex or y2n minus 1 lambda, oh, I don't want to say that, this non-equivariant contact tomology in j generic is a chain complex and the homology of it is independent. This is a family of j's of your choice of family of j's and the dynamically convex lambda. Let me tell you how to relate this back to a cylindrical contact tomology in a way that will make everyone much happier than they are now. So if there is sufficient automatic transversality, then as needed to define the classical cylindrical contact tomology differential, then we can use for some generic choice of j, we can use this j to look at this non-equivariant contact tomology. And what's nice is that it turns out, so in this case, d check looks like the standard cylindrical contact tomology differential and d hat looks like the other cylindrical contact tomology differential and you end up having opposite orientation, but that's not so important. But it turns out that you can show that so if y lambda is not degenerate, dynamically convex j generic, then for d0 equal to dq minus d, well, I did not use good notation for this. So the first differential, this is supposed to be the second differential that I told you, d plus d minus and d1 equal to 00 multiplicity of gamma 0. I'll explain what that is in just a sec. You can actually get a chain complex by taking the non-equivariant chain complex, tensoring it with the formal power series of variable 2 that has degree 2. So here u is a formal variable of degree 2 with dz being equal to d0 plus d1 and this is j. This is a chain complex. So then your differentials, they never saw bad orbits before. So they ignored them in the second one. So these ones. So this was kind of a lie. So you still will be able to see your bad orbits and you're not going to have the problems that you had before with orienting them because you have point constraints running around that are going to allow you to deal with orientations. So I'm doing a bad job explaining this because there are a lot of details I'm omitting. Yeah, but then, so the degrees of d0 are coming from a complex where the bad orbits. Okay, this shouldn't be, I should have just written, this isn't technically this differential. It should be, I should have written something like this is counting, my notation is really awful. Yeah, we'll just use d hat and d check and they, but they have a more familiar expression in terms of multiple cities of ray orbits and multiple cities of your pseudo holomorphic curves. So what I should have written here is that if j is, if we can replace j with a single j, then d check counts in mj alpha beta, you still are going to have your checks and hats with a point constraint at the top. And you'll get that d check of alpha check is going to be the sum over the multiplicity of alpha divided by the multiplicity of your curve U that connects them and now my font has become microscopic beta with the orientation. So the chain complex is still this thing that we're using and then the differentials just have more familiar expressions in terms of the previous differential, but that was a very unclear, unhelpful way that I explained that. Can I say one thing? I mean the d hat and d check, they're the same as the differentials before when you're going between good orbits and then something else. Yeah, and you can show that when they do encounter bad ray orbits nothing horrible happens. I should finish the statement of the theorem. And the homology z of this chain complex is independent of lambda and j and a proposition is that CHz tensored with q is isomorphic to CHq. And so this is how you end up getting invariance of cylindrical contact homology and I will end. I mean if you don't have something that's dynamically convex then you're going to have to be working with like full SFT or symplectic homology. Yeah, so if you take the connect sum of two tight spheres you're no longer dynamically convex. So this sort of result doesn't work for connect sums but I mean cylindrical contact homology was never built to being invariance of things that weren't dynamically convex in dimension three and so there was a result that Ko mentioned in his talk where he said that if you have this assumption about conly zander indices then the positive part of symplectic homology is an invariant of the contact structure that's exactly this dynamical convexity condition and it has an analog in higher dimensions. What's your favorite manifold way to compute it? The sphere. You can also compute it for like lens spaces and like pre-quantization spaces. Oh, so well I guess I can just say it in words. For the three sphere you have Q in every even dimension that's greater than or equal to two and for lens spaces you also only have for ln plus 1n you have n copies of Q in dimension zero and n plus 1 copies of Q in every even dimension that's greater than or equal to two. Any more conversation requests? Any other questions? Is the right way to think about why you choose this formal variable that you're doing something analogous that you're a model for symplectic homology? Right so that's what you're doing but you've kind of been able to cheat a little bit so normally your differential would have like an infinite number of terms in it but because we could cheat and use a time independent almost complex structure and still be able to define the complex that's why we were able to drop the extra terms but that's pretty much exactly what's going on. Suppose you took two dynamically convex, just go back to the convex sum idea, you took two dynamically convex and then you did a convex sum but you did a really really really small convex sum where you had very precise control over this sort of, you had very precise control over this hyperbolic orbit in the finite energy place that would be sort of introduced, is there any chance that these ideas could extend in that case? I mean maybe but it's my understanding that even when you do a convex sum you always end up introducing a new... You do, but you know exactly where it is, you know pretty quickly you have pretty much generated longer ones. Yeah you could use action filtration arguments anyway. No because the, so my answer is no. So I mean it's conceivable that we could define some sort of linearized contact tomology if we, there's another type of building that we would have to consider and we'd have to be able to understand how to glue it or exclude curves limiting on it and you'd have to take some sort of like augmentation. So... I'm going to disagree with you on this one. We might be able to do it. Well that's, yeah I was saying you might be able to... Not linearized. Without, okay. I might not. Yeah. Anything is possible. Okay I think Homan's ready to clap for me and get coffee.


When I added up one time, my cousin, we going back and forth talking number. Man, independently, just independently. I under spent over 2.5 million, I'm just bills. Yeah, we on boss talk one on one. So many, you hear so many issues, man. I don't play about certain people, man. I get mad at them about bird, man. That's a lot of stuff I get personal about because I know that being a boss, it's a whole nother level, man.  You know, a lot of times. But a lot of time they get shafted, like you said, behind the fact of being the ones that are in position and the money is in between, they signing them checks. Because see, you don't, if you know the business and know the contract, you'll never have a real problem. Yeah. Because once they present that contract to you or whatever the business is, this is our deal. We gonna do this, blah, blah, blah, you get this, I get this. That's understandable.   You know what I'm saying? Back in the days it was the gifts. Yeah.  So when the chick come, the chicks is in the negative. You like, man, I suppose I had 200,000. Nah, nigga, I gotta deduct that watch. I gotta deduct that train so people who don't understand better. That's why I don't even deal with a, I don't even deal with an artist that don't know business. Yeah, yeah, yeah. Cause they, cause they up in the head. You feel what I'm saying? Yeah, they gotta go school first. No, they see what you got or what you doing. You feel what I'm saying? And first thing in their mind is, well, why I don't got that. Why nigga, you just thought it, you got this many amount of streams. That's not sales. That equate to this amount. You feel what I'm saying? And if they don't know the business, they homeboys getting their head, man. That's happening fast, ain't it? Yeah, man. That's how it be. That's gonna happen fast. That you listening? I've been listening. No, I've been doing this. That's how I wanna trip most of the way. All I know is, man, it's a whole different ball game now with this Instagram. Think that that views on Instagram equate to dollars. And it's totally not, not so. Oh yeah. It's confusing. It's famous folks out here that ain't famous. They broke famous. I done, I done seen them. I made that speech in there probably 10 years ago where I'll say these girls got all these views on equate to no damn money, man. Y'all broke. It's a little frustrating to me, man. That's why they got heavy with the only things that came out. They needed that, bro. That was a good look for. But like independently, one time I added up, bro, like since my son was born, when I added up one time, my cousin, we going back and forth talking no more. Man, independently, just independently. I spent over 2.5 million. Of course. I'm just bills. No, of course. You feel what I'm saying? Yeah. So this game is crazy, bro. And if you don't know how to eat, that's why so many artists get discouraged. Yeah. Because they don't know how to, you know, how to eat, how to equate that to that.  Yeah or no. Hey or no. You know what I'm saying? It ain't even close. You know what I'm saying? Every million views you get, you gonna get by 900s or that. Yeah. It ain't the way people think it is. Not at all. But. Yeah, we on Boss Talk 101.


really well, you know, kind of typical Aaron Judge BP putting on a show and yeah, went really well. Another big step for him to get out on the field and now we'll start, you know, hopefully as he bounces back and continues to be able to bounce back. We'll ramp that up and start to really, now it's about building up the endurance of being able to do that. With the rail riders in the playoffs a little bit longer, do you think that a rehab might be possible or would you be just as content to insert him into the Major League lineup? Yeah, that's something we'll weigh. We're not at that point to where we're gonna throw him in the games yet or something. So if and when that time comes, you know, he may be able to go get simulated at bats in Tampa if we decide that route. If the rail riders becomes an option, we'll consider that, but we just want to get through these next couple of days where he starts ramping up the amount of swings out on the field and continues to build that momentum. In your mind, what do you need to see from him till you know he's ready to take that next step of whether it's a simulated game or rehab? You know what? I mean, that's more a medical, like, you know, they've got a pretty strong plan in place as far as, you know, going through protocols and building him up a certain way. So I just want him to continue to be able to bounce back and and as we add volume to his days, how he handles that, how he bounces back from that and that'll be a big factor with him going forward. Was it to see him put on, as you said, a show? I mean, you guys said it was getting better, but to actually see it, was I encouraging? I mean, it's fun watching Aaron judge take padding practice. So so that's that's nice. But obviously, you know, you understand it's another step in the progression. So you do to get excited when you see, you know, obviously, one of your best players working his way back and and and hopefully what was a big step to him getting back to us for for towards the end of the season.  Does that concern you at all? Yeah, I don't know if that's entirely. It's pretty much out of there. You know, he I mean, he gets warmed up every day with how he, you know, goes through his range of motion and his drills to get ready. But I think for the most part, he's been feeling really good back in the lineup. What led you to put him back in there? Been wanting to get him in there at some point. You know, obviously, Luke's been so good for us and has kind of earned it the every day at bats right now.  Nothing that, you know, he didn't want to try and play through or you know, he's active for us tonight. But I think just a couple of days where he's been a little bit stiff and a matchup that we felt like was good. And again, wanting to keep birdie relevant and trying to get him at bats where we can. Um, hopefully, uh, he can take advantage when you say stiff. Is there one area in particular that he's just had some back stiffness the last couple of days, but we don't think it's anything too serious. But but I also think it's something we're, you know, especially traveling after yesterday, something that I felt like he could benefit from a day today. You haven't been eliminated from the division. If you do look at it, how important is to play that game at home? We want to play at home.  So we feel like when we're playing our best, we can match up with anyone, whether that's home or away. But, um, you know, our goal right now is to, you know, continue to get get guys healthy and hopefully back into the fold, but, but really start to play our best baseball, hopefully, um, at this time of year as, as we get ready for, again, what we hope is a run in October. Standing down to four in the order. What do you like about moving him down a little bit? Yeah, I've been toying with it actually the last few days and just felt like, um, you know, with touch being here, he's doing, he's been doing a really good job of getting on base, which has allowed me to, you know, put guardie down there as kind of that double leadoff hitter in the nine hole and with Aaron as much as he gets on the, on base as well. And then eventually with, with Aaron judge getting back into the mix where he probably slots right back into that two hole, just felt like it was a good time to bump him down to the cleanup spot. Um, just his ability working at bat to, you know, again, as, you know, as I've had with Glaber at times this year, when we were really, you know, at our best, when we had a real, a lot of length to our lineup to have another guy that's capable of getting on base and to have quality of bats, it really helps you, you know, add to the top of the lineup, you know, especially when we typically hit guys like judge and with, with judge down, standing in that two hole to give another guy with speed and the ability to get on base ahead of our leadoff guy. Um, I think it's a valuable spot. Aaron will judge do pretty much tomorrow what he did today. Yeah, I think he'll, um, yeah, I would, I would say, assuming, you know, he comes in and bounces back. Well, um, you know, a few more reps, a few more swings than he did today. You might see him in a BP group, um, during actual BP. Um, but we'll continue to just ramp up his, his workload as this and trying to build up his stamina as, you know, as far as he can tolerate.