 The T2 Tile project is building an indefinitely scalable computational stack. Follow our progress here on T Tuesday updates. So this week it's demos. This week it's for the first time in the history of the universe, bespoke physics, custom rules of physics written not by me, but by other folks have run on the T2 Tile grid. And so I want to talk about the experience we have with that. We just saw the Sand Rain demo by Luke Wilson. We'll dive into that in a second. So the symbol for all of this is the create S button. The way we're saying the universe begins is by creating one atom of element S, which is the seed to start it all off. And that's the way all of these demos work. So, right. So Sand Rain is written in splat. This spatial programming language, as you text by Luke Wilson. It's got, it's really, it's beautifully simple. And so there are rules for the things that release the sand and then there's rules for the sand. And that's it. The thing that releases the sand is element S, the start symbol. There's, it says a symbol R here, but it's because there was some confusion between splat and Ulam code and so forth. But this is the source of the code that we saw. And it has basically two rules, the at sign again. We don't really need to understand splat in detail, but we just want to see how nice and simple it is. You know, at sign is me, which in this case is the element S. If I have an empty above me, then I swap with it. The empty goes down and I go up. And we saw that happening. It rises up to the ceiling. And then if that doesn't work, if I don't have an empty above me, I go on to the next rule. So if I have an empty to my right, then copy myself into there. And because we had the flip X symmetry specified, then that means that it might also be to my left. So we will spread out and that's it for this guy. And from there, sand, oh, no, sorry. He's got one more rule that once he's up there, if he can't grow in either direction, then he's got a random chance of one in 10, every 10th event on average to, if he's got an empty spot below him to change it into a sand. And that's what causes it to sprinkle down. Once we have the sand rules, which does the reverse. If I have an empty spot below me, then I swap with that. I can also swap diagonally off to the side. And we saw that at the end of that demo where the sand was actually filling in the overhanging tiles in the zigzag grid. And then finally, just stay where I am. If I can't do anything, just stay where I am. And that's it. So, you know, all of the behavior we saw in that demo is less than 500 bytes of source code. It's potent. It's really compact. So that's cool. That's fun. Luke, you know, thanks for, you know, this was the first one that came in. He also brought in a second one. Windower, a colorful fork bomb variant. The fork bomb is, you know, this famous idea of what if you had a program that just reproduces it in Unix? The fork command creates a copy of the process that's currently running. So if you have a process that just calls fork as fast as it can, it'll make more processes that are making more processes that are making more processes. And that's called a fork bomb. So in the context of the T2 tile and the movable feast machine, the MFM, a fork bomb is something that just takes real fill space as fast as it can with more copies of itself. And that's what Windower does. And the key to it is a rule like this. If there's me in the center of this diamond and dot on the left hand side of the rule means anything. I don't care. Replace that all with W, which in this case is another Windower, a copy of me. We've got some extra code here so that we can give it sort of a random color. And when we do one of those replacements, we take a single me and replace it with all copies of me. They'll all be the same color as me so that we can see that entire diamond in the results happening on the screen. And it looks like we're going to have red, green, and blue at random. But then Luke in the chat room posted a picture of what it ought to look like and actually the colors all look to be blue, greens and so forth. And that's because in fact, even though we compute red, blue, green, we just fill in zero for red so that we can have a nice sort of tasteful muted aqua, you know, watery palette. And that's the idea. And I ran it on my little ring tile on my desktop tile ring and it crashed. It crashed very reliably, which is good, right? Because then we can trace it down more quickly. And in fact, I was able to get into the debugger and see what was going on. And it was violating an assertion in the claim that this ci.getcs, whatever it is. It was saying that this particular circuit that I'm talking to another tile about having an intertile event with, of course, was supposed to be in state answered. But in fact, when I went and investigated with the debugger, it was in state talked. And so that's what it was getting upset about. And, you know, with a little bit more thinking, it was coming from this code right here. When we get a cache update from the other side, the event happened over there. They say, okay, here are the changes I made. This code says, okay, I should be in the state answered, which means I acknowledge that you're in charge and I'm waiting for cache updates. But as soon as I actually get to this code and I get a cache update, I set my state to talked, meaning I've gotten a cache update before. And what I hadn't tested, which just goes to show how lightly tested this whole code base is as far as actual high level atomic events. I had never done such a complicated change to an event window that it took more than one packet to deliver the update. So this code got entered twice. And the first time it came in, it was in state answered and it changed itself to state talked. But then another update came and it was blowing up. So the fix was, you know, if we're in state answered, that means the first cache update packet. So then we switched to state to talked. And then we ought to be in state talk, no matter how many packets there are from then on. And then window were worked on the ring. And we should, we really need to see it in order to appreciate what it looks like. So I have another little video. This is on the grid. How fast that goes. This is times one. This is real time. No speed up. So that's essentially the speed of light that's about as fast as change can propagate on the T2 tiles with the current code base. And, you know, if we look at that, we can't see it here. This is, you know, just taking one of the tiles and switching it to tile mode. So we can see the stats on it. And this 0.10 a is the means point 10 air that so it's doing a tenth of an event per site per second on average on this particular tile. And all of the central tiles are about 0.1, which is, you know, a hundred milliare or a tenth of an air. And that's an awful lot of behavior to seek to be seeing considering they're only getting one event every 10 seconds. And that's an important point to stress because even though it's only getting one event that one event gets to redraw that entire diamond all 41 sites. So it looks quite visible when particular transition functions, the behavior of a particular atom is such that it makes a large change to the event window. So that's pretty cool. And similarly, 0.09, 0.09, 0.09. So we're somewhere around 90 to 100 milliare when we're running Luke Wilson's window or code. The air that we get depends tremendously on what physics is running and so in this case. All right, so that's the second one. Dennis Lucero donated, offered two. Well, actually he put up a bunch with like, I don't know, five or something. Splat demos in there. I just had time to pick two of them to try them out. The first one I looked at was this Jacob's ladder because it seemed like it might be a good sort of mad scientist symbol thing that we could use. And again, it's written in Splat. The basic idea being that the seed looks above it for three things and it creates a Jacob's ladder left, a Jacob's ladder arc and a Jacob's ladder right above it. And then the ladder, well, ladder seeds grow to the left and grow to the right and the arc goes up in between it. And there's the rule for the Jacob's ladder itself. And, oh, I'm sorry, that's the rule. Yeah, that's the rule for the base of the thing instantiating a new arc, which will then grow and follow its way up. And the rules for the arc itself, it tries to stick to the electrodes, right, as best it can, and goes up and so forth. So, all right, let's take a look again. First on the ring, this title card we're looking at, I spent a tremendous amount of time on the last two weeks implementing that sad, great ass. And it blows up to T2ITC.CVP line 199 and that's reliable. That's where it always blows up. The weird thing is that sometimes it does, sometimes it doesn't. Sometimes it's reliable for the long term. This one gets off to a good start, line 199 again on the grid. Pretty good. Seems safe. I'll let it run for a long time, fine. I don't know what the distinction is yet. So I tried it several times. It blew up there. This time it was looking, I think, working pretty well. Started with a new one, blew up. Started with two of them, and they were fine as long as I was ready to go. So what's going on there? I don't know. This specific problem, it's a similar case. It's the intertile events, of course, and there's an assertion now that when I get this request to initiate a packet, I should be idle. I shouldn't be doing anything. So the state, my state should be idle, but I caught it in the debugger and my state was cash. So I was waiting for more stuff from a previous event, and it hadn't gotten finished, hadn't gotten cleared up. Don't know whether this is related to the problem that I encountered first with Windower. We'll have to find out at the moment. And again, you know, this is not Jacob's Ladder's fault. This is not Dennis's fault. It's not possible for anything that is written in splat to be at fault if it creates an assertion getting blown down in the underlying engine. That means a problem in the engine. So starting to work, it's all very young. Okay. Right. Oh, which, yeah, led to another thing. So now we're starting to accumulate these different custom rules of physics. Two, Dennis's got two, Luke's got a couple, I've got some. And each of them is assigned a slot. Now, if we remember back for folks that were here, the Common Data Manager got rewritten this past year so that rather than taking arbitrary filenames, it took a slot number and a timestamp. And the slot number, B0 is a slot number. It's an 8-bit quantity. There's only 256, 255, because we reserve zero and make it illegal. There's only 255 slots, period available. So B0 currently, we've got Windower in it, B1, we've got Sandrain in it, and so forth. And the way that we tell the grid what physics to run is by adding another package. So, oh yeah, so this is a case where I had made a lot of hacking. I mean, I did, I got a tremendous, this was a good period. The last two weeks have been fun. I got a lot of hacking done. I got a lot of stuff working, you know, this development goes through, you know, difficult parts, you know, hard climb, and then shoots a bunch of rapids and you have a lot of fun. And so this was after I'd been hacking on the ring, on the desktop ring, the seven tiles for a long time. And then I went over to the grid and plugged it in. So it had to update T212, which is the package that includes the Linux kernel modules. It had to update MFM, which is the whole engine for processing events. Physics A1, physics AF, those are different custom laws of physics that are being updated as well. And all of that, in addition, there is one called configphysics.dat, and it's a file containing two bytes in it, which is the slot number of the physics that we're supposed to be running. And that gets assigned to slot 04, CDMSS, Common Data Manager, slot stamp, slot number four, time stamp 520. We're into the 520 era now for the next couple of weeks, so it'll be the 520s. And see, it's tiny, you know, 03, that's MFM, it's huge, almost six megabytes. But the configuration file is under three kilobytes, and most of that is just cryptographics, check sums, and all that kind of stuff surrounding those two bytes saying B0 is the slot that we're supposed to run. But what that means is the way that we change the laws of physics is by distributing a new copy of package 04. And it's actually possible to take a look. So the way we switch physics, here we're still running Dennis, Dennis is Jacob's liner, is by committing a different configuration package. And that should be propagating through here if we restart the tiles a little bit early. We might get an example of split physics where not all the tiles agree, still have problems restarting cleanly, shutting down cleanly. Okay, so here we're Jacob's ladder. Yeah, Sandrine, Jacob's ladder partly switched to Sandrine, but the rest of the world is still on Jacob's ladder. And as a result, you can see a frontier where the tiles aren't talking to each other because they insist on matching physics. So over here we can run Sandrine, over here we can try running a Jacob's ladder. The rain is starting to fall and arcs are starting to rise. There are issues. Thanks guys. That's weird. So it rebooted and now more of it is Sandrine. It's a complex world down there. So that's it. Oh yeah, taking a lot of time, but there was a question left last time. What happened to the swap line that we were looking at? And I don't know, contemplation, I couldn't find this comment. I get these notifications for comments when I go look for them and they're gone. I don't know, did you delete it? I don't really understand how all this stuff works. But he nailed the exact problem that I observed before when we were doing a live demo and it looked like the swap line got cut. It did get cut. Why did it get cut? Because the intertile connector down there was not seated properly and in fact you could see the red line indicating that the Linux kernel modules in the low level packet to packet stuff had not cleared that connection. That's exactly the right answer. We also had this issue of this crazy Heisenberg that the tiles would be running strangely slow and then I would like click on a menu in order to bring up the tile menu to try to see if they were running slow and they would speed up. So that's what makes it a Heisenberg that when you observe it it goes away. Folks, James checked in with ideas and I really appreciate you thinking about it and Schlaberman reminded him or her or appropriate pronoun about when a regular PC starts using the swap space on the disk and what could it be? Well over the course of the last two weeks while working on other stuff I started to gather more data about it and eventually I said well I'm going to trace what's going on when we click on the screen to bring up the global menu and just see if it's doing something and just watching through that eventually led me to an idea and in particular when the menu system says bring up a particular window like the global menu or the sites menu time whatever it is. What it does is it goes through all of the siblings and it raises the one because all of these virtual panels they're all existing at the same time but only one of them can be on top so this code goes through and it raises the one that we want to see to the top and then goes through all the other ones and sets them all to not be visible so that's what this loop with the do is doing and so for the T2Viz panel set it to not visible for the log panel set it not visible there it is log the TQ the time queue display the CDM monitor and so forth it goes right through all of them and sets them all to false and then finally the one that's supposed to be there the one that's supposed to be on top in this case the grid set it to true when these panels were all being initialized at first they did not go through this code and they initialized themselves to all be visible so in fact what was going on when the thing was starting up even though all the panels were stacked up and the sites menu was on top it was still doing the work the T2 tile thing was updating itself and counting all the atoms to make the histogram and so forth even though it could not be seen and then the first time you clicked on something it went through this and set everything that wasn't visible to not be visible and a lot of those panels were smart enough to say hey if I'm not visible don't do the work that's what it was the answer was that the tiles the panels were being created by not using the official mechanism not using the menu system so the solution was right after the title card we're getting ready to put the title card down and bring up the sites menu instead of doing that with direct code now it goes through and does an official menu command which does all this once at the beginning it gets everything set up there are other things that can slow the tiles down there's a lot going on I mean it's a full Linux machine but this big one is solved okay so that's it I am not going to do a T2 update two weeks from today this is the only update in February this year the next update will be March 2 I've got this other stuff that I promised to do the second lecture for the introduction of classical hyperspace over at the hyperspace academy we are coders is overdue and it's going to get out I also agreed to do a 15 minute video in the spirit of drunk history of computer science which is due in the middle of February as well that will be posted on the Dave Ackley channel at some point after that happens as well so I would love to get more input from folks I'll be able to sometimes I'll be able to have stuff running in the background on the grid while I'm working on other stuff we'll see thanks folks for contributing code for contributing demos long way to go a lot of progress hope things are going well with you see you in a month