Yes, okay. All right, well, thanks very much for the invitation. So the very first math conference that I ever went to was the 1997 edition of PCMI, which was more than half my lifetime ago. I was in the undergraduate program at least. But I had an amazing time, so it's really nice to be able to come back and teach. So before I start, maybe let me just ask, did anybody read the preliminary reading that I sent out? Maybe hands up if you did. Okay, now let me, wait. Okay, so how was the level of the preliminary reading? Hands up for easy. Okay, hands up for not so easy. All right, good. Okay, so I'm not gonna talk about anything in the preliminary reading today. So all of those of you who were desperately looking it up on your phone, you can stop. So instead, I'm gonna talk about the Alexander polynomial. And so basically, my plan is that, all right, now I've lost it. How's my voice without this thing? Terrible. All right, so my plan is that I'll talk about the Alexander polynomial today, and tomorrow in lectures two and three, I'll talk about the Havana homology. And then we'll go on to talk about the Humphley polynomial and Humphley homology and colored homologies. But first, let's start basic. So what's a knot? So a knot, okay, is a smooth embedding of S1 into S3. And usually we draw pictures of knots by projecting them on the plane of the blackboard. So here's a knot called the unknot. There's another knot called the trefoil knot. So we'll say two knots are equivalent. So k knot is equivalent to k1. If there's an isotope, let's call it phi, mapping from S1 times zero one. Again, this is a smooth map to S3, such that if I look at kt, which is phi on the time slice t, this is a knot. So for example, this unknot is equivalent to this knot here. But our experience with shoelaces in electrical cables and things like that suggests that it's not equivalent to this trefoil knot, which is a little annoying knot you get in your shoes. OK. So how could we prove that? Well, one way we can think about this is to observe that if k knot and k1 are the same knot, then actually they're complements or homeomorphic. This isn't completely obvious. So if you've never thought about why this is true, you should. So it actually depends, for example, on the fact that I remembered to choose a smooth map here and not a continuous map. But once we know that's true, we can use all our arsenal of algebraic topology invariance to attack this guy. So for example, that means that pi one of the complement k knot is isomorphic to pi one of the complement of k1. OK. So maybe if we want to use this, we ought to know how to compute pi one of the non-complement. So let me tell you how to do that quickly. So a diagram D of k gives me what's called the Fierdinger presentation of pi one of the non-complement. And the way that this works is that for each arc of the diagram D, I get a generator in pi one. So here's my arc. I haven't written down my base point in pi one, which is always a dangerous thing to do, but I'll continue to do it. So really, the base point for this presentation is out at the back of the room. And so the generator associated to this bit of arc comes in from the back of the room. I'll throw an x here to indicate that it's coming in this way. Goes underneath the arc and then goes out by this O, back out to the back of the room. And really, I should have said, how do I know which way I was going here? I chose an orientation. So this was an oriented diagram D. And so for every crossing, I get a relation in this presentation. So for example, if I have a crossing that looks like this, there are three arcs to the diagram here. I'll call them A, B, and C. Then I get the relation that says that C is A inverse B, A, I think. And the way that I check that is, well, so I do A inverse. I come in from infinity. I go underneath here, come out. Then I do B. That's going to carry me around like this.  And then I go A. So it's going to take me like this. Go underneath here and come out. Now if I join these x's and o's together, you see that I can swing this orange loop underneath so it goes right under C. So that is the right relation. And similarly here, for this diagram, so let's say here, I have arcs A, B, and C. Again, I get a similar relation. Now C is A, B, A inverse. Obviously, I need to figure out how to fix this better. OK. So for example, if I look at this truffle oil, and I'll color the three arcs three different colors, red, white, and blue, so I can see what's going on. So let's call this blue arc A, the red arc B, and the white arc C, orient things this way. Then I get a presentation that looks like pi 1 of S3 minus T is generated by A, B, and C with relations that say that C is A inverse B, A. That's that crossing. So A is B inverse C, B. And B is C inverse A, C. Or if I just use this relation here to eliminate B, I'll find that I've got a presentation with two generators, A, B, A, B inverse, B inverse. And you might think that I should have another relation here, but actually, I find that I get the same relation again. And that's always true. I always have a redundant relation in this presentation. So now I know how to compute pi 1 of a non-compliment. What can I do with it? You see, the problem is that here I have a presentation of a non-Abelian group. And non-Abelian groups are complicated. If I give you two presentations, it's not necessarily easy to decide whether they represent the same group. Well, one thing that I could do, here I've got pi 1 of s3 minus k. I could say, why don't I Abelianize? That'll take me to h1 of s3 minus k. So I'll call this map Abelianization. So for example, here, I'll get an Abelian group. I'll write that presentation with brackets with generators A and B. And now I can commute these things to just get A, B inverse as 1. So in other words, this is, let's see, there should be, maybe I should erase this. So the convention is that if I don't write anything here, that just means that that's equal to 1. If I don't wear this, how is the sound back there? It's iffy, huh? Not loud enough. Not loud enough. All right. Obviously, I need a lesson on how to fix this self thing to myself. All right. So here, here I get z. So it's generated by, say, one element t. And A and B both go to t under this Abelianization map. OK, so now here's the disappointing thing. That was easy to compute. But it was too easy, right? Because actually, no matter what not I pick here, when I Abelianize, I'll get z. So that's a terrible invariant for distinguishing knots with. But all is not lost. So I could think about, here I have a surjective homomorphism. It has a kernel. The kernel is a subgroup. If I have a subgroup of pi 1, I get a covering space. Here I have a covering map corresponding to that subgroup, let's say, s3 minus k twiddle goes by p to s3 minus k. So pi 1 of this space is this group here. And the deck group is just this quotient group, z. So it's generated by some phi mapping from the covering space to itself. And now, well, I guess I could Abelianize this again, which would be like taking the first homology of this covering space. So I could look, let's call it ak. This is what's called the Alexander module, is h1 of s3 minus k twiddle. Let's just use rational coefficients. So this is a module over the ring r, which is the ring of Laurent polynomials. q would join t plus or minus 1. Well, it's obviously a module over q. So I just need to tell you how multiplication by t acts. And that acts by the deck transformation. So t times an element alpha is phi lower star of alpha. And phi was a homeomorphism. So I can also act by t inverse. So r is a PID. Everybody knows that the polynomial ring, q would join t as a PID. But it's also true for the Laurent polynomials. So that means we have a structure theorem for what this module looks like. k is some number of copies of r. So I should have said it's a finitely generated module. Plus some torsion stuff. So a thing that looks like r mod alpha 1 plus up through r mod alpha n. And now here's a little exercise. Actually, this free part is always trivial. This is always a torsion module. r is 0. And now we'll do the simplest thing that we could possibly do to get an invariant out of this module. Let's make a definition. Alexander polynomial, delta k of t, Alexander polynomial, is just the product of the alpha i's. And what that is, let's call it the order of this module, ak. So what do we call it the order? Well, if instead of using this PID, we thought about modules over everyone's favorite PID, which is the integers. OK? So a torsion module over the integers is just a finite abelian group. OK? And in that case, this product is just the order of the group. This is sort of the simplest invariant that we can take of this module. And so you may know a trick for computing the order of a group. So if I have a presentation, so if ak is the co-kernel of some map, say, from r to the m given by multiplication by an m by m matrix A, then what's the order? It's just the determinant of this matrix. OK. So let's think about some examples. So if I take k to be the nought. Another good exercise, if you've never done this before, is to see that the complement of the nought is s1 times d2. s3 minus k is s1 times d2, maybe the interior of that. So in this case, pi1 is equal to h1. The kernel of the abelianization map is 0. And our covering space is just the universal cover. So s3 minus k twiddle is r times d2. All the homology of that is easy to compute. h1 of s3 minus k twiddle is the trivial group, which is the same thing as taking the ring r modulo the ideal generated by 1. So that means that delta k of the nought is 1. And I should really be careful here. I'm going to write a twiddle. Why am I going to write a twiddle? Well, let's come back and think about this presentation that I took here. See, these alpha ones are really only well-defined up to units in this ring. So the way I've defined it here, this is well-defined up to multiplication by, say, c t to the k. All the units in this ring look like a rational number times t to some power. I'll write a twiddle to remind myself that I'm working at the moment with this equivalence relation. So we'll fix that ambiguity later. That ambiguity can be completely fixed, not so much bioframing, but it's definitely fixable. OK, let's keep this presentation. Actually, let me keep this whole board and move over to here. How about we try the trefoil knot, since that's the only other knot that we've computed pi 1 of the complement of? How am I going to think about this covering space? Well, s 3 minus t, pi 1 has this presentation. And in fact, you can see that the knot complement is homotopy equivalent to a two-dimensional cell complex. So this is homotopy equivalent to a cell complex x with 1,0 cell. Maybe I'll call that E. E is just a point. 2,1 cells, I'll call them A and B. So that gives me two. I have a wedge of two circles. This is giving me the generators in my fundamental group. And one two-cell that I attach to get the relator. Maybe I won't try to draw that here. But it goes along this path. Let's say this is attached w is A, B, A, B inverse, A inverse, B inverse. So that's the word, the circular boundary of this two-cell. Trace is out. So now I can draw a nice picture of what the corresponding covering space of x looks like. So these cells are all contractable. So they're going to lift up to an integer's worth of cells. These cells are going to lift up to an integer's worth of cells in the covering space. So for example, maybe here's a lift of E. Here's another lift. I'll call it t times E. Here's another lift, t squared times E, so forth and so on. I won't label everything. t inverse times E is over here. And now I have to think about how I lift the one-cells up. What determines how the one-cells lift is exactly their image under this map. And they both go to the generator of z. So what that means is that they lift up something that looks like this and like this. And maybe here's ta and tb and t squared a and t squared b. And you can imagine drawing the rest of them, but I won't. All right, so that's pretty easy.  So what is f supposed to do? So let's say it this way. Maybe I'll have to whittle for the lift. This is attached, the curve that I'll draw in blue. So what does it do? It's supposed to trace out A. And then it's supposed to go along B. And then it goes along A again. And then it goes along B inverse. And then it goes along A inverse. And then it goes along B inverse. And it closes up. If it didn't close up, I would have done something wrong. Because this disk has to lift up the disk up in the covering space. OK.  I won't try to draw any more of them. But now I can just look at this picture and write down the cellular chain complex. So c star cell of x twiddle. Well, in degree 0, there's going to be a one copy of r, which is generated by this E. In degree 1, there are going to be two copies generated by A and B. And in degree 2, there's going to be one generated by this f. And now I just need to write down the boundary map in the complex. So this is a linear map. It sends the boundary of A as Te minus E. So this is given by a matrix that looks like T minus 1. And the other entry is also T minus 1. Over here, these six cells with their orientations like this tell me the boundary of f. So I see that the boundary of f looks like 1 minus T plus T squared times A plus minus 1 plus T minus T squared times B. Notice that D squared equals 0. That's good. So here's the chain complex. Now I can compute the homology. So the kernel of this map D1 is just generated by an element that looks like 1 comma minus 1. And the kernel, whoops, the image of D2 is generated by this column vector. So it's, let's say, T squared minus T plus 1 times the same vector 1 comma minus 1. So H1 is kernel modulo image is R. This is R modulo T squared minus T plus 1. So in other words, delta of the truffle is T squared minus T plus 1, which is not some invertible multiple of 1. So the truffle is not the unline. I'm assuming you believe this sort of claim that I made about this x here. OK. So the process that we've just done here can be turned into a machine. The machine is called Fox Calculus. So say that pi 1 of s3 minus k is D, which has generators a1 up through ag. And relations, maybe we got it from a very good presentation, has relations w1 up through wg minus 1. We've got one more generator than relation. We'll define the free differential, Fox derivative. So say D with respect to this generator, ai, that's a map from the free group to, oops, maybe here I'm going to abelianize. So let's take g, abelianized here. And again, I'll write the abelianization map with these vertical lines. OK. So I have this di, it goes to fg of z of the group ring. Of, and you know. OK, so let's notice that in the case where we have a knot, which I just said we were in, this gab is just isomorphic to z. And the group ring of z is the Laurent polynomials, right? So this gives me a Laurent polynomial ring. OK. And it satisfies and is determined. So fg, oops, sorry. Yes, OK. So this here, this g, fg is the free group generated by these letters. And g is the quotient by these relations are. OK, so it's determined by two relations. One is that if I take di of aj, this is delta ij. It's supposed to make you think of a partial derivative with respect to ai. OK, but now I'm going to write down the Leibniz rule, which you have to be very careful not to teach your calculus students. OK. So the Leibniz rule says that if I take di of a product, ww prime, this is di of w plus the abelianization of w times di of w prime. Maybe just to see what this means, let's compute the di of an inverse. So I know that 0 is di of 1. Ask yourself why that's true. You can prove it. That's the same thing as di of w inverse w, which is di of w inverse plus the abelianization of w inverse di of w. In other words, this rule says that di of inverse is minus the abelianization of w inverse di of w. I think there's enough room on this board. OK, and this Fox derivative is fun and easy to do.


Beta Israel, the Jewish lost tribe of Dan in Ethiopia. The Beta Israel community, also known as Ethiopian Jews, resided in Ethiopia for centuries. They have a unique religious and cultural identity, combining elements of Judaism with Ethiopian tradition. In the late 20th century, a significant number of Beta Israel members immigrated to Israel under the law of return. Genetic studies have suggested a genetic connection between the Beta Israel and other Jewish populations. The Beta Israel, also known as Ethiopian Jews, are considered one of the oldest diaspora Jewish communities. The Bible references Jews in Ethiopia, particularly in the region known as Kush. The prophet Isaiah mentions Jews who were exiled to various lands, including Kush. Additionally, the story of Eldad Ha, Donnie in the 9th century gained attention, stating that the tribe of Dan migrated to Kush instead of participating in the conflict between Rehoboam and Jeroboam.


Hi everyone, Joe for jaspyscasebrakes.com coming at you with 2019, 2020, Manini Chronicles basketball hangar box edition number 35 Giving away a thirty seven hundred dollar eminence spot. Yes, we did find another eminence case We did one late last night and now we've got another one Hopefully we can do another one tonight maybe and eminence today keeps the doctor away. That's pretty sure they say that It's a common phrase, right? Let's do the break first big. Thanks everyone here for getting into the action There's all the teams right here. Let's roll it. Let's randomize it Four and a five nine times for names and teams the break first one two three four five six seven eight and Ninth and final time We got Robert down to Gretchen four and a five nine times for the teams one two three And ninth and final time after nine. We got the Celtics down to the Hornets All right, there's the first half of the list right there and there is the second half of the list right over here Kobe has the Palakins J going to with the Grizzlies See if there's anything interesting out of here in this little filler box All right, no trade windows in these things. Let's just print and rip. That's the final print out Let's see what we got here John Morant's Zion's I'm poor junior. I think we'll be making his heat debut tonight Anthony Davis, they're checking on him tonight and a green Kendrick nun. All right, not too shabby rookies wise But no Zion's no John Morant's let's flip back over here The biggest hit though of this break is who's gonna win that eminent spot Let's roll it. Let's randomize it three and a four seven times One very happy person and 29 sad people or 29 sad spots after seven times one two three four and three more times five six and seven after seven times Thanks, everyone here for getting into the action Really appreciate it Congrats to the name on top though and that's gale There you have it gale You are in you've just won yourself a 3700 a dollar spot. I appreciate you watching. Thanks for breaking with us. I'll see you for that eminence later tonight. Bye. Bye


Well, good afternoon and welcome. My name is Ian Brown. Let me say with pride and genuine pride, but also with rising panic. I am committed to produce a history of the school to be published in time for the centenary while everybody says 2016, believe me, I say 2017. I'm fairly used to working to publishing deadlines, but believe me, this is the mother of all deadlines. I do not fancy the prospect of going to the senior administration of the school and suggesting a postponement of the celebrations. But essentially I've got to be there with a finished manuscript by the middle of 2015. I'm now devoting all my waking hours to this task. I've been doing this essentially from the beginning of this calendar year. And I'm working my way through the school's records from 1917, indeed back to the early years of the 20th century. I'm working through fairly chronologically. I've now reached the late 1940s and early 1950s. I'll say a little bit about some of the events then. But my hope is that that research will be finished roughly October, November. There are other archives that we'll need looking at. There will be many people who have to be taught to and then for begin writing roughly as we reach the climax of the Carol season. So that gives me about 18 months. As far as I know, there has been no official announcement that the book is being written and that I'm doing it. But word spreads. So let me start by sharing with you three common comments I get from colleagues. They come up to me and they say, we're here, you're writing the history of the school. And they usually say one of three things. The first is a question. Am I in it? And my invariable response is, no you're not. Or if I'm feeling a little bit cruel, well okay, maybe a footnote. And if I'm being really cruel, but of course I'm devoting three chapters to you. But actually it's a serious question and I think if I was in their position I'd be tempted to ask it or rather a variation of it. Because of course we all have our own science history. We tend to be the centre of it. And I am sure that when school staff, students, alumni read the book, they will perhaps subconsciously or maybe consciously attempt to align their own memories, their own experience with the history of the school. They don't necessarily expect to see their name in the index, I suspect one or two do. But at least they ought to see something that they think that they recognise. It rings true. And that's actually quite an intimidating feeling to have as you tend to write the history of the school. The reality is that I suspect that when the book comes out many people, the saw-ass community might well be disappointed that it doesn't align very effectively with their own history of the school. Let me give you sort of one example to try and demonstrate that point. I've become fascinated in the last couple of months with architects plans and floor plans for the new building, which of course is this building, the Bloomsbury building. And I've poured over these things because I can relate it to what now exists. So, for example, the building as originally planned was never completed. The original proposal would be that there would be a north wing. This is the south wing. You then go up that side, the east wing, and then they were going to build a cross, which of course would now bump into the Phillips building. But that was never built. Another example, if you stand on the steps of the school and look straight left down the side of the building, down the south side of the building, there's the bit that sticks out. Instead of a straight facade, there is that bit that sticks out. I believe it's now the student union offices or the student union shop and what have you. On top of it is the balcony that comes off the common room on the first floor. In the original plans, that was the director's office. Rather an exposed position, I would suggest, and one can understand why he has retreated to a more secure environment. And I'm absolutely fascinated by these things. You look and think, gosh, I was in that room. That used to be the gents toilet in 1948 or something like this. Those sorts of details fascinate and would fascinate any member of the Siar's community. But there are absolutely no interest to anybody who doesn't know the school. To the outside world who wants to know the importance of the school and the impact of the school. This is domestic trivia, though it may be fascinating for, as I say, for those people who know the building and who've occupied it. So the question, am I in it, does raise up that issue as to for whom am I writing? Am I there to unlock the memories of the Siar's community? Well I'd like to in some degree, but my prime audience for those people who, and sadly it's the majority of the human race, have never been to Siar's. To try and explain the importance of this institution. Well the second question that I'm asked, will there be lots of funny stories in it? This infuriates me. Were I writing the history of All Souls College Oxford, a very serious institution of extremely high learning, you would not ask the author, are there any jokes in it? Now to a certain extent, this is my fault. I've been here at extremely long time. It's terrifying to think that the year after the school celebrates its centenary, that is in 2018, then God willing, I will celebrate my half centenary of Siar's connection. I've been here effectively half the length of the time of the school. And during that time I've collected a vast treasury of Siar's stories. Many of them quite cruel, that play upon the eccentricities of the place. And I think a number of my colleagues have picked up on that and believe that what I'm basically doing is stringing all these funny stories together, so it will be the Siar's joke book to end all joke books. Now again, there's a serious point here. We all know, we're parts of the Siar's community, that this is, how do I put it, a distinctive institution, a unique institution, a slightly eccentric, if not weird institution. One of my first Siar's experience in the second year I was here, I did the, I nearly said I learnt Thai. I was taught Thai, that's quite different from learning Thai. And in those days the South East Asia department occupied offices in Howland Street, the other side of Totland Court Road. And the rest of that block of offices was occupied I think by an advertising agency, McCann Erickson. We were on the fourth or fifth floor. And one day I was going up in the lift and there were two McCann Erickson employees also in the lift. And one turns to the other and says, who are those people on the fourth floor? And the reply was, I don't know, I think it's some strange religious cult, eccentricity, difference. We all know it, we all feel it. But I think it's a very dangerous card to play when you're writing a history of the school. The great warning here is in the autobiography by Sir Cyril Phillips, the school's third director. Because he has a series of pictures in the autobiography and one of them is Siar's staff and students 1938.  It's a dangerous thing to say. It's something not that we should try and keep to ourselves, but I don't think one should play too strongly in a history of the school. Well, the third response, the third and final response, is usually prefaced by my colleague comes much closer to me. The voice drops on occasions, an arm goes round my shoulder. And conspiratorially they say, we must have lunch. They then refer to some of crisis scandal in the school when Dr Nible unexpectedly resigned as head of the Swahili section in 1979. No, I made all that up. And they say, whatever the record say, I know what the real truth was. You know that the police were called, but nothing was ever done. Or a variation of that is that they step back and in a very loud voice say, at last the truth will come out. And they mention a colleague and some crime that they committed, they denied them study leave in 1986 or something. The revenge brigade in other words. Well, clearly I'm going to have a large number of lunch or dinner invitations on the basis of this and I will listen with great interest. I don't think that this will be in the history of the school. So to your relief, or maybe actually to your sadness, the book is not going to be like this. People are not necessarily going to be mentioned. No, it's not going to be full of stories of Swahiliac eccentrics. And it's certainly not going to expose in inverted commas the truth. This is essentially a history, not of the domestic, so as not of our daily lives and how it changed. That's not going to be completely ignored, but it's not the focus of the book. It is essentially an external history of the school, the school's relationship with the various worlds that it is occupied over the last century. And without getting too precious about this, it is a serious book. It is an academic book. I am approaching this in exactly the same way as I would approach writing the history of any institution. I'm trying to a degree to take myself out of it. So, for example, a constant theme throughout the book is the school's relationships with government. And a very important part of that, of course, are discussions with government about finances. And I have to deal with the fact that there's going to be discussion of expenditure and income accounts, etc. at various stages. This has been an important issue for the school. But even there, lying behind it is another issue, which the more I reflect upon this is, I think, the great constant in the history of the school from 1917. So, I can put it like this. Africa, Asia and the Middle East are big. The opportunities for study and teaching in these areas are almost limitless. And therefore, the issue that the school has faced throughout these decades is which bits do we do? Or rather, how deep do we go? We've never decided we're going to cut something out, though in fact that has happened on occasion. It's really a question of depth. We cannot do everything. We would love to do everything. We cannot do everything. And therefore, it's a discussion of what influences have been brought to bear in deciding what we do and what we don't do. Let me give you a simple example. And this is simply because it's in my head because I've actually been doing this the last week. Towards the end of the war, 1943-44, the government clearly made a decision that it was going to invest heavily in the post-war world in Oriental and African studies. Therefore, established a commission under Lord Scarborough to make proposals for government funding. The school, the then director Ralph Turner and senior management, are therefore called into the Scarborough Commission towards the end of July 1945 to present their plans for the future, their plans for expansion. In those days, the staff of the school numbered about 100. And the school then asked for funding for about 150 posts. That's a very substantial increase. Anyway, they went in to see the Scarborough Commission. And the Scarborough Commission basically said, you have been far, far too modest. Go away and think big. So they went away and it was over the summer months. They had to be back by September with their revised proposals. And that proposed a school staff of 256 from 100 to 150 to 256. And that number was arrived at basically by the director writing to every head of department saying, what is your optimum staff size? And my favorite one of all of these is the Africa department where the head of department wrote long memorandum explaining what he wanted in order to cover effectively, not generously, but just so that we can do it adequately, the number of posts he wanted. They were eight professors, eight readers and 38 lecturers. With that we can just about get by. The Scarborough Commission's recommendations to the government were accepted in full. So for the next 10 years or so there is an attempt to fulfill that program for massive expansion. It was not achieved. And that's the thing I'm interested in. What shaped the extent to which we met, in that case, an extraordinary ambitious remit. So the sorts of things that affected it would be there's actually not eight professors, eight readers and 38 lecturers out there whom you can appoint. You can list all these 47 African languages but there actually aren't enough people out there with a good command of it and certainly with a scholarly basis in those languages to fill them. So one restraint on all this is simply the staff aren't there to appoint. The second restriction of course was an increasingly difficult financial position. But a third interesting point and it replies less to Africa than to actually to my own region because the other great expansion in this period was in the establishment of a department of South East Asia was Britain's political and economic interest in those parts of the world. And although this is never explicitly stated it's implied in much of the schools dealings with the foreign office, with the war office, with the India office. We need these in Britain's international interest and therefore from 4748 there is establishment of a South East Asia department to reflect Britain's interest in that part of the world. Interestingly of course the South East Asia department they again had the problem. They couldn't find people to appoint to these positions. Burmese and Burma was covered effectively because it had been part of an India department before the war. But when they came to appoint people to teach Thai even Malay and certainly Vietnamese, we had to appoint people to the phonetics and linguistics department and then train them in those languages. So this is a constant theme throughout the schools history. How much do we cover? Where do we cover? One last comment on Scarborough. Scarborough was absolutely adamant. Student demand doesn't come into it. And there's a wonderful exchange between Lord Scarborough and the director. When the director said that in the whole of the history of the school there had been no interest whatsoever in the customary law of China. There never been demand for it either for teaching or for research. And Lord Scarborough replied, let me assure you it is essential that you have two posts in Chinese customary law and believe me that's what went in and I think they actually did appoint to one of them. We now live in a rather different world where student demand is absolutely at the core of this. So that's one serious aspect of the school's external relations. Let me pick on another one. In certain fields at certain times, in many fields at many times, the school has been a pioneer in scholarship. If I take my examples essentially from the early decades of the school, this simply reflects the fact that that's as far as the research is gone. I'm sure I can duplicate this in later decades. But in the 1930s, 1932, the Rockefeller Foundation gave the school a very generous grant that enabled the school to establish the Africa department. And the research that was undertaken there in the classification and analysis of African languages was absolutely critical. It established a new field. It's in this context that Paul Robeson came to the school to study some of these languages. Unfortunately, the Rockefeller grant came to an end in 1938 and there was a proposal therefore to abolish the Africa department. But there was a happy ending that the colonial governments in Africa were asked to chip in. They all did and the Africa department was kept alive. And as I said earlier, was requiring eight professors, eight readers and 38 lecturers within a decade. But that work is absolutely critical. Phonetics and linguistics in the 1940s. The need to teach military officers Japanese in six months flat had a major impact upon the development of language teaching methods. And the school was clearly at the forefront of this. There's a rather sad character called Lloyd James, Professor Lloyd James, who was crucial in this. He, I discovered, was the man who invented the phrase Ho Ho. He was the BBC's advisor on pronunciation. And when you think back to BBC standards of pronunciation in the 1930s, you wonder what advice he gave them. But his complaint against BBC radio announcers in the 1930s was, it was his phrase, they all sounded like Lord Ho Ho. And that phrase was then taken up when we had the traitor who went to Germany and he was referred to as Lord Ho Ho. But the phrase, I'm proud to say, comes from Sires. Lloyd James had a very sad end.  Other examples. The early history of Islam. There is a clear school of Sires, school of thought in this area. The history of Africa is born here. The history of Southeast Asia, looking at Southeast Asia as a distinct region, began in Sires with the appointment of DGE Hall in 1949 and the publication is a book in the mid 1950s. In these important areas, the school has had a huge impact upon scholarship and beyond that on popular understandings of Africa, Asia and the Middle East. And what I propose to do is, at various stages in the book, is to simply stand back, when I'm dealing with the 1930s for example, is to stand back and over five, ten pages to explain what the state of the field was before the school got to work here and how the school has changed that field of scholarship. And again, it's important to argue wider popular perceptions. And a third and final strand is of course to talk about the people who have studied at Sires. And I'm less interested here in the famous alumni, though of course they will indeed get a mention I suppose, but about the Sires student community and how that has changed and the impact that they have had on the rest of the world. Before the war there were very few degree students here. The vast majority of people who studied here were either colonial service cadets or Indian civil service cadets. These are people who have just been appointed and are now being trained. Commercial people coming in for a few weeks to get a smattering of a language before they went off to that country. That the vast majority of degree students at the school in the 1930s are students from India coming here to study higher degrees. When the school was established in 1917 nobody foresaw that development. In the war of course the overwhelming majority of the school's student body are military officers trained these intensive Japanese courses and they would then go off into military intelligence. Might also talk about the same time about the school's work during the war in postal censorship. The school staff as well as teaching, I mean the teaching year in the 1940s was 46 weeks because the academic terms have basically been abolished. So as well as doing that the school staff worked for postal censorship reading endless letters. Trying to pick up information, most of them from sailors because they say we've just sailed from here to here and this is very important for military reasons. It's estimated that the school staff read 32,000 letters between 1942 and 1945 in, I can accept the 32,000 but they were in 192 languages. My favourite one of this is that the head of postal censorship writes to the director praising the school's efforts and saying that the perfect censor is somebody who knows nothing about the country of the language which is being used. He quotes the case of the censor in Finnish, obviously he wasn't here, who had no knowledge of Finland, had never been to Finland, had no wish to go to Finland and actually couldn't speak Finnish but had a remarkable ability to censor letters and spot potentially damaging information. This was important and then after the war of course then the development of degree students which of course from the late 1950s and 60s both undergraduates and then for higher degrees have been the absolute core of the student body. So after all in that context you may well be in it because in the end I have to talk about the development of the community and the development of the student community so check the index. Thank you.


I'm Ross McGill. People will know me as Teacher Talkit online. I'm a Deputy Headteacher. I've been teaching 23 years. Marking. It's the bane of teacher's life. It'll never go away. We'll always need to mark. It's with workload, recruitment, you know, the kind of reputation as teachers, as a profession. It's not an easy place to be. With the marking, with curriculum reform and examinations, marking's been made a bit tougher, a bit more rigorous. But as a school leader, you can come up with a marking policy that tries to reduce the workload and expectations of what to mark and what not to mark. But you're always in a constant battle with government reforms because you might say don't mark this, but when off-stead popping or the DFE reform various specifications, you're working against each other in many respects. So it takes a smart school, smart person, smart teacher to come up with something that works for the kids. So it's interesting times. I don't think we're quite there with a solution for anyone yet. And would you say that marking has become the tool that it's set out to originally do is not the tool that it is now? You want marking to help this child, full stop. The danger is you have school policies, book looks, learning walks, off-stead inspections that all come in and you have all these other people coming in to look at the teacher's book to see if you're doing one what's right or what's expected and then two, to try and work out in whatever book it is, even if it's a PE lesson or a drama lesson or an English teacher's book in that child's classroom that you're looking for the kid to have acted on that feedback. An example would be in some recent learning walks that we've done in our school, you might go and look at a particular subject and if you're doing it in isolation without the child or without the teacher to give you the back story, it's like observing a lesson. You're leaving the observer to make an assumption of what's happened. So I'll be saying that there's more to marking. It's holistic marking compared to just marking a book because if I came in and marked one of your books it would just be a thing of, okay, I can see some trill but I don't know the holistic part of that child. No, you don't. You never will because you're only going to get a snapshot of what happens, what's in the book is the evidence of what's taking place in the lesson or a bit of homework out of school. You might see a bit of dialogue between the teacher and the child where things go wrong and becomes a bit of triple marking or verbal feedback stamps where you start to produce records of evidence for a third party to look at, to almost guide them in to say, look here, I've done it, look at me and that's where marking's going wrong and added to increased workload on the individual teacher. And what would you say are some of the down pitfalls of marking? What are the problems you see with that? Well, two simple ones. Tick cross, tick cross all the way throughout the book. Obviously in maths it's pretty straightforward but if I'm marking an essay, the Battle of Waterloo and I'm doing a bit of spell checking, ticking cross throughout, there's not much there that's going to help improve the child's performance. So that's the first downfall. A second downfall would be I might speak to the child and say, oh the first paragraph of your essay is fantastic, do x, y, z. Put a verbal feedback stamp in the book to say that I've spoken to the child and it's just to prove to an observer that I've spoken to you to give you feedback. What's the point of wasting time doing the stamp? Okay. And would we say in terms of teachers role being, have we got OTT with marking? Yes and no. I'll go back to my main point. Marking is the bane of teachers life. You'll always have marking to do. You'll always have a parlor marking to take home at the weekend during your half term holidays as we're doing this film now, it's my half term. More and more obviously as a senior teacher I teach much less. I still have a great deal of marking to do. I try my hardest to keep my marking in school but if I was a full time teacher, which the vast majority of people are probably watching this are, you've got a 90% timetable, you've got 10% protected time for chasing up behaviour, making positive phone calls, going into all different bits of software recording, homeworks and different reward points and whatever else. That time to mark is miniscule and I've blogged about this many times. The answer to workload is simple. The government need to fund schools more to allow teachers the freedom to reduce the contact ratio from 90%. Live marking, so marking there and then in the lesson with the child so it would be dependent on what activities are going on in the lesson but aim for two or three children at your side by your desk mark and give an instant feedback and next lesson choose another two or three. You might want to target specific groups of students. You might want to target one or two students that have been absent so they can get back up to speed. I find live marking works really well. It reduces the marking that you need to do outside of the classroom in your own time. One that I've been using for the last year or so is the yellow box and for me it works twofold. One, it reduces the marking need and two, it makes it very obvious where the marking will take place so if you're not familiar with the yellow box you might have an essay. I might just highlight the middle section of your essay and I'm going to spell check that and I'm going to check the content, the facts, the foreign against arguments and ask the child to redraft that only. I've totally ignored the beginning and the end of the essay because I just want to focus on this as an area for development. I want to reduce my marking quantity and I want to focus the child on a specific area only so that I ensure that they act on that feedback. You can then add another empty yellow box and you can expand the size of the box depending on how much you want the child to act on that feedback. So there's a couple. A third one, get the kids to work for you. Try and design any activity in the lesson where you can involve the students doing some peer or self-assessment. That takes all the work away from you and if you can get some regular habits going on in the lesson that can significantly reduce your workload and again although I teach much less I have decreased my own marking because of one, the yellow box and two, I design a lot of the learning activities in my lesson where students will self and peer assess what they are doing so that it requires less input from me.


Hello everybody. Thank you for joining this talk. We are going to present TokoS, which is an embedded operating system fully written in Rust. First of all, a few words about us. We are Alex and Alex, myself, Alexander Radovic. I'm an assistant professor at the Polytechnic University in Bucharest. My field of expertise is in operating systems and compilers. I'm here together with Alex, my student. He's just graduated today with his bachelor's degree in engineering, and his project was presenting his contributions to TokoS just this morning. I'm sorry if we're making a bit of mistakes or something is not clear. It's 12 a.m. in Romania, so it was a long day for us. About half a year ago, I was searching for interesting projects that were written in Rust because of my interest in operating systems and system programming, and I stumbled upon TokoS. TokoS is a new embedded operating system which runs several applications concurrently on low power and low memory microcontrollers. This is somehow very interesting because it borrows more or less the architecture of Linux but applied to microcontrollers. I'm not the creator. I'm not affiliated with TokoS. I just loved the project and we, me and my team, contributed to it for the last six months. Okay, so a few facts about TokoS. It's a preemptive operating system. It was designed for Cortex-Ms, MCUs, and then it has been ported to RISC-5 because it's really growing architecture and as we saw in the keynote, more and more institutions are using RISC-5. What makes it really different from other embedded operating systems that I have worked with, it uses memory protection out of the box, so if your MCU knows or has a memory protection unit, your applications will have to obey it by default. In the other operating systems that I've worked with, this was an extra step that had to be taken. It borrows a lot from the architecture of general operating systems. The kernel is fully written in Rust and is compiled completely separate from the user space and applications are compiled separately, so you don't need the kernel to compile an app. Applications could be written in any language like C or Rust or anything that could compile to a binary and anything that supports a position-independent code. Before we dive in into TokoS components, I want to talk to you a little bit about Rust. Rust is a systems programming language designed by Mozilla. Its main purpose is to offer memory safety without the penalty of having a garbage collector. Rust uses the borrow checker at compile time for this and ownership, so programmers have to obey a lot of rules at compilation time. Imagine it's like having a language like Java or .NET, but without the overhead of a garbage collection or of a runtime. Due to the fact that it was designed as a systems programming language, from time to time when you're writing operating systems, you have to access direct memory addresses or you have to directly do some pointer arithmetic or you need to do some unsafe typecasts. These are generally forbidden in Rust, except that Rust provides a keyword which is called unsafe, and inside this unsafe block, the compiler will not check memory safety. You as a programmer are allowed to do whatever you want. It's like programming in C and C++ inside of Rust. Having said this, the TokoS kernel is completely written in Rust. It's made out of two components, the lower part which is the hardware abstraction layer. This is where you write platform dependent codes and small drivers that interact with the hardware. This part of the kernel does have some unsafe code because it's not possible to write it otherwise. On the top part of the kernel, we have the capsules. These are the drivers, it's just a different name for drivers. These drivers are completely hardware independent, so they should work on any microcontroller. They're not allowed to use the unsafe keyword, so the compiler will not compile the capsule and not compile the kernel if inside the capsule you have an unsafe keyword. They still reside inside the kernel and they talk to the lower part of the kernel through the hardware interface layer. On top of the kernel, we have the applications. These are written in any programming language and they talk to the kernel using the system calls and interface with the capsules like that. A better illustration of what I said is this picture which is from TokoS's GitHub. On the lower part, we have the hardware, the microcontroller with all the peripherals. The orange part are the drivers that are specific to each architecture, so interfacing the SPI, the I2C, the timers which are completely specific to any microcontrollers. This part has unsafe code. The TokoS team has done great efforts to minimize the number of unsafe lines that are written here, but there's no other way to do it. On top of this, you have the kernel, the actual kernel which handles memory allocation, scheduling, and provides a hardware interface layer. This still has some unsafe code. On the upper side of the kernel, you have the capsules which interact with each other, provide an API towards the application, and use the lower capsules through the hardware interface layer. These capsules cannot use unsafe code, so they are guaranteed at compile time that capsules cannot write into each other's memory and cannot influence each other in a way that it shouldn't be desired. Yes, the TokoS kernel still has some unsafe code, which is like writing code in C, but compared to other embedded operating systems where we have tens of thousands of lines of unsafe code, in TokoS, you have a small number of lines that have to be audited manually. On top of the kernel, in this example, you can see a C application, a Rust application, a service which could be written in any language, and an application that tries to bring down the kernel by doing some infinite loop, but because of TokoS's protection, this is really difficult for an application. Why did I start contributing to the project, and why did we find it really interesting? Well, these are the three things. First of all, it's the first embedded operating system that I see that is completely asynchronous. While applications can be preempted, the kernel cannot be preempted. A driver cannot make an infinite loop, or a driver cannot use a delay function. If it needs to wait for a peripheral, it needs to issue an action to the peripheral, give up the processor for an application, and whenever the peripheral finishes, it will signal the capsule via an interrupt, and the capsule can continue. This is like a comparison would be TokoS is for embedded operating systems, like what Node.js is for programming languages, so it's completely asynchronous. In Linux, the equivalent in user space would be the Async.io. Another interesting fact is that heap is not available to the kernel, so all the buffers that are available in the kernel have to be known at compile time. This gives us a lot of security, because the kernel cannot overflow memory, because all the memory space is known before, but it does create a problem when writing drivers, because some drivers really need to allocate some memory to store information about applications. This is handled through grants, and I'll talk about grants a little bit later. TokoS is rather new. They started in 2014. Boards that are supported in TokoS are divided in three categories, the stable category, and these boards are fully supported, all the peripherals work, so if you just want to build some applications on TokoS, I would strongly recommend using these boards. The second category is developmental boards. These boards are partially work, but there are still some peripherals and some functions that are not available. This is where I had a contribution by submitting the STM discovery boards, and Alex submitted the IMX RT board. If you want to develop TokoS and play a little bit with the kernel, these are the boards that I would recommend as well. There are also experimental boards, mostly risk five architecture, because it's rather new in TokoS. These boards work, but we expect some failures or some memory problems or some running problems with these boards. TokoS has been getting some momentum, and people are starting to look at it. Google has decided to use TokoS for OpenSK. OpenSK is a project from Google where you could build an USB stick for digital signatures, and there's a great effort from the TokoS developers to support TokoS and fully support OpenTitan. OpenTitan is a project that wants to provide an open source silicon root of trust for signature and encryption chips that you will find in the new appliances and computers. It's a consortium of several companies, and I really think TokoS is a really good option for it. So a little bit about applications. As I said, applications are compiled out of three, so you don't need the kernel of TokoS to compile an application. They compile to a standalone binary. It's not an else file, and we'll see that further on. If the microcontroller does have a memory protection unit, the application will have to obey it. So whenever the kernel switches to an application, it will program the memory protection unit so that the application can access only its memory. And this is really good, as I remember porting a JavaScript engine last year for Fiat TOS, and JavaScript is only a bit memory hungry, and we had a lot of stack overflows, our memory overflows, and the result was really unpredictable. It was really hard for us to debug and see what went wrong. TokoS applications do fault. So like Linux applications that segment fault, sorry, these applications fault. So if they try to write outside their memory, the MP will stop them, and you will get a really nice log with the fault, and we'll see how it looks like further on. It has a downside. Applications need to have relocatable codes, so the compiler needs to be able to do a positioning dependent code, and this has been a challenge mostly for RISC-5 architecture. And the thing that they somehow borrowed from Android, it seems like they borrowed it from Android, applications can expose services, and other applications can browse for those services and consume those services. And this is the model of inter-process communication that TokoS provides. If we look at the memory layout, you might notice that it's a little bit strange. Probably you are used to see the stack on the top, at the top of the memory. In case of TokoS, the application code is resized inside the flash. The stack is at the bottom part of the memory, so every application will have to specify upfront how much stack it wants to use. This is a decision made because it will prevent application from stack overflowing. So if they overflow the stack, what happens? The application will basically overflow the memory boundary, and the MPU will stop the application, and you will get a nice report that the application did some fault. If the stack were at the top of the memory, it would just override your heap, and that would lead to undefined behavior. On top of the stack, we have the data, then we have the heap, and at the top of the memory of an application, we have the grant. So as I said, the kernel is not able to dynamically allocate memory, so every capsule that needs to keep some information on a per application basis needs to declare upfront how much memory it needs to use for every application. This amount is the same. It doesn't matter what kind of application you run. On the technical side, they have to declare some structures in Rust. When an application is loaded, the kernel will sum up all the requirements from the capsules and add that memory space to the application memory. If the memory cannot be allocated, the application won't start. So it's like a transactional thing, so either the application starts and then there's enough memory for the kernel and the application to run. Either the application doesn't start because the kernel cannot allocate enough memory for its drivers. Another interesting fact is that TOQS uses real system calls. So in many embedded operating systems, system calls are just the function calls. In this case, TOQS uses the supervisor call instruction on ARM and the equivalent on RISC-5. It exposes five system calls out of which yield is the only one that is a blocking system call. So every process in TOQS has an event loop, basically a callback queue. So when a capsule needs to inform an application about an action, it will schedule a callback. Callbacks are not called while the application is running. Whenever the application calls the system called yield, the TOQS kernel will verify the queue if there is a callback function in the queue. It will call the callback function and then resume the application from the system call. This is very similar to a generator in Python. When your main function exits in the application, the RISC library will simply yield continuously. This is the only system call that can block an application. Subscribe. Subscribe allows an application to register a callback. It gets the capsule number. This is the ID of the driver and the TOQS kernel will redirect this subscribe call to the specified capsule and the pointer to a callback function and the user data. The command system call is similar to IOCTL from Linux. It will ask a driver, a specific driver to perform an action. The difference being that the result of the system call is not the result of the action, it's just an acknowledgement that the action will be performed. Allow provides a mechanism for applications to share a buffer with the driver. For instance, if you have a capsule that wants to read something from the flash or from the network, you will share a buffer with the driver. The driver will fill the buffer and then call you back that the buffer is filled. The last one is memory operation. This is targeted to the kernel. It's similar to BRK or SPRK from Linux. It does memory management, so it hires the heap or lowers the heap limit. Just to give you a quick idea on how a system call would work. First of all, you have the application. Let's say you want to take some accelerometer data. The first step will be to allow a buffer so that the accelerometer capsule can place the result inside the buffer. Afterwards, your application would have to subscribe so that it can get the call back when the buffer has been filled. The third item would be to send the command and the capsule will understand that it needs to perform the action. The capsule will interact with the lower level capsules and with the hardware, but the command system call will return immediately. Afterwards, your application will probably yield and wait for the call back when the data is available. This is a little bit more complicated, but offers you greater flexibility. About writing applications. For now, Liptox C is fully supported and this is the recommended way in writing applications. It's built on top of new Libc and Libc++. It has bindings for Lua and little VGL. It still has a problem with the RISC-5 architecture as the compiler is not able to generate the correct code for position independent. If you want to try programming in Rust, you could write applications in Rust. It's still a developmental library. It's in active development. It still has a big bug because there's a big compiler bug that prevents us in building a position-independent code the right way. I strongly suggest you to use C. Our small contribution to the project was to port the D-language that was my student, Theona Severin, which also graduated today, and she ported the D-language and enabled D-language for ARM and TokoS. Of course, without the garbage collection. You might have seen Yana this morning in the keynote. Her work was porting Jerascript to TokoS. Jerascript is a really performant JavaScript library. It's used by Fitbit in the watch's face. It works on TokoS. GPIO's buttons let timers work. We still have some issues with the memory protection because the memory protection unit is not as flexible as the one on your computer, so it imposes some memory alignment limitations and JavaScript is really memory hungry. When it comes to the executable, we won't have an ELF file. For TokoS, we have a tbf file. It contains a header which specifies how much stack and how much memory the application needs, and then the actual application binary. A really cool fact is that TokoS applications can be shipped with several architecture in the same file, in the tab file, Toko application bundle. This is more or less the same way Apple ships applications for the iPhone. You have several iPhone processors, and you have one binary that contains a small binary for each of them. For loading TokoS applications, you don't have to rewrite the whole flash. You can load on the microcontroller flash only the application. This is done by Tokloader, which is a small Python script that does this for you, and they even implement it in an app store. You could write Tokloader, the name of the app. It will download the tab files, select the correct architecture, and ship it to your microcontroller. This is a really cool feature, and I haven't seen this before in a microcontroller embedded system. I would like to ask Alex now to walk you through what it means to port a new board to TokoS. Alex, if you can take it from here. Yes, hello. This is the NXP IMX RT 1052 EVKB, the board that we managed to port to TokoS, and it features an ARM Cortex M7 CPU with a nominal frequency of 600 megahertz. This is actually an interesting board for us, because it also allows us to work on a side project of ours, which is to run WebAssembly code on top of TokoS in the user space. Also, I would like to use this opportunity to thank the NXP office in Romania for supporting this project with boards and also scholarships. Coming back to the board, the NXP EVKB offers user-controlled LED, a button, and also a motion sensor. These were used for testing the facilities that we implemented. Other notable facts, it has an Ethernet port and also 256 megabyte SD RAM. In our process to port TokoS for this board, we created support for a new architecture, the ARM Cortex M7, which was mostly based on the existing ARM Cortex M4, which was already supported by TokoS. We also managed to implement some of the core features for this board, which are, for example, the serial line for communicating with the board, the I2C peripheral, which was tested by using the motion sensor, and, for example, the GPIO, which was tested by using the user LED present on the board. Finally, we also ported the Rust library for the user space for this board. Now, let's take a look at what means to implement a feature in TokoS in the kernel. So the first part, we have to define the registers, for example, the structure of, for the general purpose registers in the right picture. After that, for each register that was defined, we have to define each component. For example, the prescale register in the left photo. After that, we map the structure of registers in the memory and implement the functions that are related to that feature. One of the major problems that we encountered during this process is that the IMXRT has a huge number of registers. For the input-output multiplexer controller, we had 154 registers. Yeah. In order to deploy an application, we have to use the MCU Expresso IDE and the SDK for this board, which are also normally used in order to program an application for this board. Then we import an SDK example like Hello World and then separately compile the Tok image, which will also have to contain the application that will run in the user space. And then drag and drop the application in the IDE, configure the debug to select our image, the Tok image, instead of the image that would be generated by the SDK example, and then just hit debug in order to program the device. We encountered quite a few problems throughout the development process. The major problem that we had was an issue with the system timer, which was mostly due to a wrong timer frequency. And we fixed this with a pull request, which is in the process of being accepted, which extends the functionality of the SysTik for the ARM Cortex-M processors. Other problems that we encountered, the compiler error in the Rust library, and also a bus error. We were actually implementing the fix for this. And right before we tried to create the pull request, it was already fixed by the Tok core team and patched in the upstream. We are now working on importing the full Cortex-M7 features. We have already implemented all 16 MPU regions. And we are working on supporting full cache features for this board. After that, we will implement the other features that were not touched yet, for example, the SPI and the Ethernet. And after that, we will take a look at the other devices from the IMXRT family, such as the 1060. If there is anyone in the audience from NXP, we would love to collaborate in order to better integrate this TokOS development project with the MSU Express so IDE. As for the moment, we are kind of doing a hack, like drag and dropping the Tok image inside of the IDE. Also, as Alex mentioned earlier in the presentation, TokOS provides an application called TokLoader, which helps you to program devices that are supported by boards that are supported by TokOS. So we are also planning on extending the support for the TokLoader in order to support the IMXRT board. For the demo, Alex? Yes, I need to get to the end here. Thank you, Alex so much. Before we have a demo, I would like to answer one of the questions. So the question is if there are any plans for app signing? Yes, there is a TokOS threat model, which you can find on the TokOS repository. And this has been already a discussion in adding a digital signature or a way of verifying that apps are legit, let's say, like that. I have another question, but that's one about the footprint, but I will answer it during the demo. So first of all, let's dive into this. I will share my screen. My screen should be visible. Alex, can you confirm that my screen is visible? Yes, it's visible. Just a few seconds. I will show you what I have here. So this is TokOS. This is the TokOS repository. As you can see, this is just a kernel, not a user space. We have an architecture folder with the processor architectures. We have a chips folder where we have a specific chip that contains one of the architecture and has the peripherals. And we have a board folder where we have the entry point of the kernel. For this example, I will use the Arduino Nano BLE. It has just been added this week as a supported board. And the reset handler of the CPU is basically the main or the entry point into the kernel. We also have a folder with the capsules or the drivers, a documentation folder, and the kernel folder where we can see several information, where the kernel resides, the scheduler, process loader, and so on and so forth. For the demo, I will use the Arduino board. So let me just unlock the phone if this would work. Okay, so you should be able to see my phone. So I have here an Arduino BLE board. It's about $30. You can buy it out of Amazon. It's hooked up to an LCD screen, a really nice small LCD screen over SPI, and it's not running anything at the moment. So the first step that I want to do is to flash the kernel. So I will enter the boards folder and choose nano, the nano board. And I would say make program and program. I will put the Arduino into flash mode and I still need to specify the port. This is a problem on the Mac. Somehow it does not detect automatically the port. So as you can see, it compiled the kernel. I already had it compiled. After the compilation coming back to the footprint, you can see here the size of the kernel. So this is about 90 kilobytes in text. The data is about 2 kilobytes. BSS is about 55. So the total memory footprint should be somewhere around 90 kilobytes of RAM and 90 kilobytes of flash. The kernel is flashed onto the CPU on the microcontroller. As you can see, it does nothing. So it's just a kernel. If we were to open a serial, a serial line, this is done with top loader listen. You can see it writes initialization complete, entering main loop, and that's it. Okay, so let's write an application. This is the user space for talk. I will use tiktok c. You can find new lib here, which is pre-compiled, lbgl, the luah library, the tiktok library, which provides the system columns and the user space for the capsules and the examples. I will take the blink example and this is how a talkwise program looks like. As you can see, it's more or less like a normal application that you would write for your computer. So there's nothing specific to the microcontroller. It's just the main and you use the normal function that you would use. So I'm just going to enter examples and blink. I will compile it. I will say make. As you can see, it compiled the application. It didn't need any kernel. So this is a normal C compiler and it built three architectures, the Cortex M0, Cortex M3, and Cortex M4 files. Also, we have a tbf file out of them. So how do we flash an application? We will use... Talkloader is not fully supported for Arduino. So we will use BOSAC. BOSAC is the normal Arduino bootloader. And as you can see, I will flash the Cortex M. The file is called Cortex M tbf. So I will simply flash only the tbf file, not the kernel. Again, I'll put the Arduino in the flashing mode. Start flashing. It was super fast. The application was really, really small. And as you can see, it flashes the LEDs. Once again, if we go into the Listener, we can see the device just started, but it's not writing anything on the screen. Now let's try a more difficult application, something with a screen. I have here an application that uses LVGL. It just writes loading, displays a gauge, and then says, hello, TokoS. I will go into LVGL. Okay. So this application was about one kilobytes of text, and it used about three kilobytes of memory. So add this to the kernel, and that is the footprint. In case of the screen, this will be a little bit larger because it has LVGL, about 60 kilobytes of RAM, and about nine kilobytes, sorry, nine kilobytes of RAM and 60 kilobytes of flash. We have built the application. Let's flash it. So I will use, again, Bulsack, and just go and flash the screen. So I will, instead of bling, I will write screen, sorry, not screen, LVGL. This is Cortex MTBF, and I would usually do this with Tokloader, but it's not supported yet for this. As you can see, flashing takes a little bit longer, and here we go. If we get lucky, yes, LEDs are, sorry, you can see the screen is working. Okay. So it's loading whenever it's finished. Yeah. The application was normal application. So if I want to flash two applications, I could do that. So what I have to do, I will accept this, and I will simply concatenate the Blink application and the LVGL application into one single file, which is called AppsTBF. This is done, and now let's flash it. We'll see an interesting thing here. Oh, I forgot to put the Arduino into flash mode. Here we go. You can see it's a little large, and surprise, the LEDs work. The screen, not so much. Oh, sorry. So the LEDs work, but the screen, not so much. My phone just, so what happened here, we're going to use Tokloader to listen, to see whatever the Arduino is saying. As you can see, due to the memory protection, you need alignment. Even though it had enough memory, it could not flash both, it could not start both applications. A trick that you could do is to concatenate them in a different order. So first the screen and then the LEDs. I just change the concatenation, flash it again, and here we go. This time, they should both work. So it started, as you can see, LEDs are flashing, and the application is running. Okay. So, yeah, switching back to Alex, if you can show us a little bit about the NXP. Yes. Just a second to share my screen. You have to close your share screen first. Oh, sorry. Sorry, Alex. Here you go. No problem. Okay. You should see my screen right now, right? Wow. I see it. Can you confirm, Alex? Okay. Yes, yes. I can see it. What we have here. Okay. Super. So what we have here is a simple application for the NXP board, which tests the a few facilities of the board. So in order to program it, I have hit make in order to compile the application. This is over the LibToxy library. So this is only the application from the user space. After this, we go back to the talk development folder. We make sure that the app variable points to the application that will be used as a user space application. For now, we have to put both the application and the kernel at the same time on the board, since the board is not supported by the talk loader. So I simply hit make program in order to get the binary file. After that, in my MCXpresso IDE, I have a simple SDK example, the Hello World. I drag and drop the talk image. Normally, what I would do, I would hit here the, enter the configuration mode to see if the application is mine, that will be programmed on the device. And now I press debug. Oh, just a second. I forgot to insert the board. Yes, it should see it. Okay. Okay. So it was copied on the device. Next step, we open a serial connection with the device. Oh, it's the other board. Okay. And then if I hit run, so it's a simple application which allows me to insert my name. And then I can turn on and off on LED. I will turn on the LED in order to, and I will stop sharing the screen so that you can see on my camera. Oh, I don't know if it's full screen. Okay. So the LED that was, okay, just a second. The board is connected. Sorry. Oh, okay. You see it? Okay. And if I go back to share screen, just a second, and back to the serial line. If I want to cause a fault, a hard fault, I simply press X. No, the board is connected. What happens? I have a, yeah. What happens is that I have on my Mac only USB-C. So the adapter is not fully working. Just a second. USB-C is not fully, not a standard yet. So. Yep. That the Apple decided to drop the USB ports. Okay. So if you can see a fault. So back here. Okay. If I press X to cause a hard fault, because the program runs in debug mode, first MCXPresso will take over and say, okay, you get a hard fault here. And if I press continue, I will get the output for the hard fault from the top OS operating system. So here, if I go up, it says where it hit kernel panic, and it also says the faulting memory address, which is 0800, because I created a more pointer and the same value to it. Also, if we want, we can see other information such as the values of the registers, the way the memory layout looks, and which regions from the MPU were used. I don't know if you want to add anything else to this, Alex. No, I, the thing is, like Alex can send me the binary right now, and I could run the same app on my Arduino board, and it would work exactly in the same way. Here, the kernel actually panicked because this is a debug mode, but there's a setting in TokoS. Alex, if you could unshare your screen, so I can share mine. Yes, of course. Yeah, there's a setting in TokoS, which, okay, that's just insuring is not working for me. Oh, sorry, it was a problem with the browser. Entire screen, okay. So getting back to my screen, you can see here, there's a setting, setting in TokoS about what to do if an application folds. One is panic. This is for development. So you can see the debug and the segmentation fold. The others are just terminate the app and stop it. And the third one is restart the app. So the system does not completely fail if an app actually fails. Yeah, that would be it. I still, I think we still have 10 minutes for questions. I have a question here, which says if capsules are grouped together to make efficient use of interrupt signals from hardware, in other words, is there a limit of a number of capsules we can use related to the number of interrupt signals? And no, as far as I know, you could use as many capsules you want. You do have to make some changes. I mean, interrupts are sent not to the capsule, but to the lower level. If you look at TokoS image, interrupts are in this orange part. So whenever hardware has an interrupt, it goes to this orange part. And this orange part sends it to a capsule. Technically, you can have one capsule connected to one mini driver here in the orange part. But TokoS supports what we call virtual drivers where you have a virtual capsule that talks to the lower level capsule and distributes the interrupt to upper layer capsules. So yeah, technically, that's okay. I have another question. What about running TokoS and something like the Raspberry Pi? We as the group in the Polytechnica are already working on this. We're trying to port it to Cortex-A. Technically, it would work. It means we need to add the chip and memory protection would be probably different. The first step would be to use simple memory protection with one-to-one mapping. And then, yeah, it should work. So probably in a year it should be okay. Sorry, I'm just seeing a static screen now. No demo. I don't know. This is something technical. Somebody said I would be interested in doing it. Okay. Sure, that would be really, really nice. So let's talk. If you can talk to us on Slack, that would be great. And I think I can reply to you. You have my email on the website, so just send me an email. That would be great. Yeah. Oh, I'll write an email. I saw your email now. Okay. How can you upgrade one app from multiple applications like Blink and Display? Upgrading an app. That's a little bit tricky. So for now, apps are located on the flash one after the other. So if the upgraded app has the same size as the previous version, that would work. Otherwise, yes, you would have to move the other app further on or closer to this one. But this is a work in progress. So the Tokai design team is thinking on how to improve this. For now, apps are just located in the flash one after the other. So upgrading one of them is difficult if that one app is not the last one. Okay. I don't know. I think I answered most of the questions here. If there are any other questions from the audience. Thomas, I'll write an email. Okay. If there are any other questions. I think we should wait because, yeah, there's another question. Nice work, guys. Thank you. As I said, we're not the main developers. We just contributed and played with it. So there's a big Tokai team working every day on the Tokai system. So we just contributed a little bit to the Tokai system. Okay. Alex, do you see any other question? Yeah. Thomas also replied, I would love to use with the Wasi WebAssembly. Yes. We are currently working as a side project to see if we can run WebAssembly on top of it. Yeah. Over Ross, that was the first try that way. I think with Wasi, we have the problem that we execute more. Sorry? No, no. Go on. Go on. So with Wasi, I think the problem was that Alex really tried the WebAssembly. The interpreter that we had, the executor, was technically non-dependent on the Rust standard library, but due to a bug in cargo, it would still try to link the standard library. So it was impossible for us to build it. Alex, you have more details on this, but... Yes. For the moment, there is only one module over Rust, which is able to interpret WebAssembly code that is not dependent on the standard library. And this one, as Alex said, has recursive dependencies on the standard library. So what that means is that it has a module which depends on standard library. And even if we specify that we compile with feature no STD, it still crashes. It's a cargo bug. And even in the latest cargo issue, it does not work. I tried the latest nightly version, and it did not work. What I think... Okay. Sorry. To answer Thomas' question about Node.js JavaScript, V8, that's a little bit big for what the microcontroller can do probably on the Raspberry Pi. It would work. But you can use Jerascript. So we tried Jerascript. It's a really optimized JavaScript machine. It's optimized for size. Fitbit is using it for its watches. I mean, it supports JavaScript 1.6, I think. And you can even write TypeScript and transpile it to ES5 and run it. We did this with Jerascript. The only problem is memory. But otherwise, it's working pretty well. Did you answer the question about how to upgrade one app from multiple applications like Blink and Display? Is that possible? Okay. Yes. Upgrading one is okay. If that's the last app, if it's an app in the middle, as long as it has the same size, that's fine. What you could do is basically pad so far the tbf file so that you would have space for further updates. But this is a work in progress. The talk question is working on solving this issue. Okay. Okay. And I don't know if we have any more questions here. Questions here. Thomas also added on which channel we will be on. I think on Slack, on the IoT channel. So I think you can just enter in the IoT channel right now. So I think it's two track Internet of Things. Yeah. Yeah. Slack IoT channel, yeah. Exactly. Okay. Well, if there aren't any other questions, I really hope we answered everything. Thank you so much for your attention. Once again, sorry if it was a little bit confusing or we made a mistake. It was 1 a.m. in the morning here. So thank you so much. And also, we hope that at least a bit of the demo was able to be seen for the person who did not did not manage to see it.