I have to thank the program committee for selecting this talk, and you all for coming here to see something which is really offbeat, I think it's fair to say. And thank you to Venkat in his wonderful keynote yesterday, and many others for talking about the joy of being outside the mainstream. I presume some of you have come to hear a bit about that. And I think I can promise you that the likelihood of APL becoming mainstream within the next decade is quite small. Two decades, I can't promise you, but for ten years we're good. I should also apologize to you all in advance. I'm going to run out of time.  So I need to justify that APL is a functional language and give you a brief introduction to you. But hopefully enough of you will find it intriguing that maybe I'll get invited back next year to do a much more slower talk, maybe even workshop. Anyway, so APL has been outside the mainstream I think always. This is perhaps the most famous quote about APL that you'll find if you Google. Dijkstra was not impressed. Actually, if you visit these links, I'll be uploading my slides so you can follow these links. He did have a more nuanced feeling about APL and you can read out about that. But really this is about learning how to read, right? So there's parts of this statement that I really like. You may be surprised. I decided to keep this last one as something that I see as positive. And I think we heard yesterday also that laziness is good. The right kind of laziness is good. I think APL, hopefully you will be convinced, APL helps you do more with less effort. Now, since it's been such a long time since APL was invented, I think it's probably worth spending a little time talking about the history. In fact, the inventor passed away already in 2004 and that's not because he died young. He was 84. Ken Irish when he died. And as you can see, his path into computing and mathematics, of course, this was very early days. So everybody's path was a bit strange in those days.  And he finished the one room school and went to work on the farm. But fortunately for him, one could say, he was drafted by the Canadian Army. And he completed high school in the Army. And in fact, his service mates told him that there was this thing called university. And after they had seen his love for mathematics, he really enjoyed teaching his soldiers mathematics. One of his mates, in fact, told him if he didn't go to university after he left the service, he was going to come and beat him up. So Iverson went to university, Queens University in Canada, and continued to do his doctoral work at Harvard because he graduated top of his class in Canada. Worked with some fairly high powered people, later Nobel laureates in economics, did work on mathematics, matrix mathematics. He taught mathematics at Harvard, but he found it very frustrating. He found mathematical notation quite frustrating. And when Harvard decided that he wasn't good enough for them, he left and went to IBM, where he continued to work on what was Iverson notation, called it a programming language. And IBM, after he had used it for teaching and modeling complex systems for many years, finally an interpreter of the language was developed. So the language actually existed on paper and on the blackboard, and was used for teaching before it became a programming language. The first APL interpreter in 66, and yeah, those are the important things from last night, and Ken Iverson received the Turingel Award in 1979 for his work on APL, and educational uses of the language. So a little bit about me, as you might see from this picture, it's supposed to indicate that I also have some Norwegian roots, if you recognize the flag, and I'm a cyclist. My parent, my mother's Norwegian, my father's South African, I live in Denmark and work in the UK, so I'm really a mixed kid. I'm really pleased to be here. I was born in the same year that Iverson's book was published, so I feel some destiny there. But I started out doing the usual things. I tried to solder. I soldered all of these components onto a board and nearly got them to work. But fortunately two years later I was rescued. I met APL, and since then I've actually been doing nothing else much. I did write one program in a whole bunch of different languages, but none of them caught my fancy. Yeah, so I've been doing APL perhaps since before most of you were born. And I'm a failed academic. My first year of math and computer science from three different universities. But working with APL has worked quite well for me, and for the last 10 years I've been the CTO of this company called Dialog, which is an APL vendor. So be warned that I sell APL, right? That's my job. Dialog of the company is the youngest APL of the APL vendors.  We released version one of our product in 1983 on Unix. Today we deliver it on a variety of platforms. The latest one is the Raspberry Pi where there's a free version, which you're interested in that. We're moving on to the Mac and Android and other platforms I think will follow, although they're not typical analytical platforms perhaps, which is where the sweet part for APL is. So we definitely haven't crossed the chasm yet. We've had low growth for 25 years. We now have what we call rapid growth, but if you look at Bruce's curve, we're still down here. Although you could argue APL actually had a wave on the mainframe in the 70s and 80s, came down again, and now I think we're seeing changes in the way people want to be programming, which means APL is becoming more relevant again. So I'm not sure that sine wave only has one top at least. So returning to Iverson's story, what really frustrated him was he looked at mathematics and there were all these completely different syntaxes for expressing different things in mathematical notation. So not just that the syntactical forms were very varied, but the precedent rules would, you know, if you put ABC next to each other, that might mean different things depending on whether one of them was a trigonome, one of them is high, you might decide to multiply it before, and so on and so forth. And when we started to deal with matrices, which Iverson got involved with, things got a lot worse. So he came up with this new notation, which is very much simpler. I don't know, I hope you can read that at the back, otherwise if you're interested, move forward. So the syntax of APL is extremely, there are only a very small number of forms. Either you can have a function, a prefix, and an argument. So for example, iota, which is the index generator 6, returns 1, 2, 3, 4, 5, 6. Or you can have a function, a left and a right argument. So 1, 2, 3 times 10, 1, 10, 20, gives you a vector back. So multiplying three lists a map is implied in APL. APL doesn't have functions as first-class citizens, but it has things called operators, so the slash here is something which takes a function as an argument. So the slash is reduced, this is a times reduced, and that gives you a derived function which multiplies the elements together. You can also have a dyadic operator, so an operator which takes two functions and derives a function which takes one or two arguments. In this case it's the vector product, so it's the plus reduction of multiplication map. But in APL that's completely general, you can apply any function there. And then there's indexing, which is sort of seen as a rather non-functional syntax, but it's very useful. And one of the things that's important in APL is that you can index with an array. So this is selecting four items out of a list of characters in one go. And of course you can name all the various parts. You can name arrays, you can name derived functions, you can name operators in the latest release that we just put out, we couldn't do that. Well, the operator is reduced, so it's one times one, plus zero times two, plus two times three. So it's a vector product in one shot. If the classical vector multiplication in APL is written from mathematics, it's written plus dot times. So you can put any function there. And if I don't run out of time, we might see some examples of that. Okay, I'm not going to have time to show you this live, but up here this is tryapl.org. So if you want to play around, there's an online raffle that you can go to. And it includes, in this case I've hovered over the question mark here with my cursor, and it pops up the help and shows you the monadic, which is the prefix, we use the term monadic. Sorry, we started using that before monads became popular. And dyadic is the infix where we have two arguments. And you can see there's a whole bunch of mathematical functions. There are structural functions, reshape, catenate, catenate on the first dimension, reverse, transpose, take, drop, enclose, depth. And you'll see some of these sorting, searching. But this is basically all you need to learn. And this is the entire language right here. And when you're working in the raffle, you have those symbols available that you can hover over. Okay, so what did Iverson do? Yeah, we don't have time to wait for all these animations. He lined them all up, and then with his new notation, so this is what guided the design of his notation, he found that he could say, well, a, b is a times b. e to the x is the monadic power. So if you don't have a left argument, it's e to the power. That one's obvious. b, logarithm, so this is the exponentiation symbol with a circle around it. And you can see it looks like a log that's being chopped over from one end. There's a lot of that kind of mnemonic symbolism in the choice of the symbols in the language to make it easier to learn. Square root is a to the power reciprocal n. Vector product, matrix product, those are all the same. If it's a matrix, it takes the rows on the left and the columns on the right and repeatedly applies to the map reduce. fgx is fgx. f plus g of x is f plus g of x in the latest release. This is something that's just been added in the last decade or so. Tangent is the third trigonometric function squared. These two forms, the plus reduction of four times i over six is the sigma. And the times reduction is the big pi. And this one here, okay, I don't have room there for that. But it's the 2a divided into minus b plus catenate minus. So that executes both the plus and the minus between these two parts. Square root of b squared minus 4ac. So you can see for somebody who's coming from a mathematical background translating formulas into ATL and starting to do work with data should be quite easy. And it's much more, this is really the origin of the name of the language. You have to remember that Iverson was a mathematician and he was looking for something to express steps in a mathematical... It's a terrible name today because people compare it then to classical mainstream programming languages and they say, no it isn't. Okay, so fundamental rules, there are very, very few. There's only one data type, the array. You could say that actually there's numbers and characters. But for us, the numbers are everything from a Boolean, so true, false is 0 and 1 all the way up to complex numbers. ATL will just promote the type as required. Characters is now everything in Unicode or any item of an array could be another nested array. So you can nest these things. And note that a single number is also an array, just a zero-dimensional array. The vector has one dimension, a single number has no dimension. As we've seen, for most primitive functions, math is implicit. All functions are either prefix or infix. That's it. We can have one or two arguments. All operators are postfix or infix. And there's a very nice interaction between the fact that functions are prefix and operators are postfix, which is what makes the language work in my account. The order of execution, people say it's right to left because this Iverson-Selec is this sort of as the predominant sort of classical syntax for mathematics. FGH chains the data. That's a chain of function applications going from right to left. Okay, there was a little star up here that says where I fed our arrays are immutable. That was true until we added object orientation and you could put object references into an array. So you could have something in the middle of an array which is a reference to a .NET collection. And of course, that's not a value type. So once you start playing with objects, the immutability goes away, but that's probably not a big surprise. Okay, so enough slides to begin with. Let me try and show you some of this in action. Okay, so I'm... Right, so first thing, the lamp, this symbol is the comment symbol, it's a picture of a lamp that illuminates the code. APL is interactive.  This is not a recent invention. It was always like that. One, two, three, plus four, five, six. Map is implicit.  Here's a prefix function. So exclamation mark, prefix is factorial. With two arguments, it becomes the binomial, the gamma function. And here's I inserted this after seeing the keynote yesterday. So here's, it's not all numbers. You can have an array of character vectors. And we can find Nemo. I need to box this here because otherwise it would be a four element vector at too high a level to compare to the list of vectors. I can also reverse it and say which of the elements of names are a member of Nemo. Because really finding Nemo is this function. So we saw the iota which was to generate the numbers from one to n. In the dyadic case, it's where in the left argument will you find this thing. So Nemo is in the fourth position in this argument. Sorry? Yes, APL, well actually I didn't want to talk about that. You can switch the index origin to zero. And of course everybody who's programmed in assembler or C or anything like that wants to do that. APL is really, the people who are most successful with APL are any kind of engineer other than a software engineer. And I'm sorry. The people who became millionaires writing their own software in APL typically didn't have a software engineer in the background. Chemical engineers, financial engineers and so on. If you look at Excel are a number of tools that are sort of aimed at that. They are index origin ones. Of course once you include a .NET object in one of your arrays and you start indexing it. It's doing the indexing. And you end up with a horrible combination of index origin and that's what happens when you do interoff. So here's the list. You want to double the list by now. I guess this is no surprise, you multiply it by two. So the rigmarole here, there's not a lot of procedure and protocol. Okay, so here's a nasty example just to highlight the syntax. You probably weren't expecting minus two. APL has to use a high minus, a different symbol to show the sign than the function because otherwise the syntax would be ambiguous as I think it is in many other programming languages. But this is essentially that you have to put the parentheses in like that. So it's ten divided by five, it's minus two and not what you might expect. Iverson's reasoning for that is this. Once you have 30 or 40 functions the idea of having a precedence is just stupid. Nobody can remember it. Most functions have both, as I said, prefix and infix. Typically there's a relationship between the prefix and infix. Prefix will maybe have a fixed left argument like with the exponentiation. So generally read from left to right, but execute from right to left. And I'll show you an example of that. So functions and operators plus reduce. I'm going to have to go really fast here. Plus scan. So this is where you get the partial result. So one, one plus two is three, one plus two plus three is six and the final sum is ten. So you can generate all of those in one go, which is quite useful. I think as a type I really only wanted to show you this. So the vector product we've already seen that I'm repeating myself. And of course it works with characters as well and other functions. So this is or any, the or reduction of equals. So are any of the characters the same here? And so it's the or reduction of this one zero zero. And yes, one of them is, one of them is the same. I keep hitting the wrong key here. Okay, we talked about that. So here's a user defined function. Square root is omega is the right argument. Alpha is the left argument if there is one. So here's the square root function. And because it's using a function which is in fact both shape and rank invariant, you could pass it the seven dimensional matrix, it would still work. So we're sort of allergic to types in a way, although I do realize that types have, have their uses. We do have customers with a 50 million lines of code who would really like some static type checking of their application. Okay, so here's Pythagoras. It's the square root of the plus reduction of alpha and omega to the power two. So we're doing a map reduce there. And I can do, you can also do, you can use user defined functions anywhere that you could use a primitive function. So I can do a plus dot Pythagoras. So that does the Pythagoras map and then the plus reduction and adds all these numbers up, giving us 16 at the end there. Okay, so even something like generating random numbers, you have a function which takes an array as the right argument. I'm rolling four dice. Reshape is a very useful function that creates an array of the shape given on the left. I can roll 10 dice. So I can roll 10 six-sided dice. I hope nobody's offended by rolling dice. You have to be careful. And if you don't like the squiggles, then of course you can, you can rename them, right? You can just do an assignment that makes you feel happy to begin with. You won't feel happy with it after a while because naming these things actually makes, in my opinion, and the opinion of I think most people who become experienced with it make the code much harder to read. One of the great things about APL is that it has no reserved words. So generally you can rely on the fact that anything that has a name like this is your code and anything that's a squiggle is part of the underlying language. Okay, so we'll make some throws and we changed random number generator in the last release and I have no fives now in this demo, so I'll show you that. One of the nice things about booleans being numbers is that I can apply a plus-reduced to a boolean array. So I can easily say, well, how many throws had the value five? So booleans are not outside the domain. Well, we don't really have booleans. We have one byte integers. So here's an outer product, so the null dot equals, that takes each item here, gives you a row for each one, and then you have the comparison. So I want to count, or I name my outer here, so count to six, I can write sum, count to six, outer product equals throws, and I get the count of ones, twos, and so on. And I can do a million of them. You see, it's pretty fast because although this is an interpreted language, it's pretty close to being bytecode. I mean, there's no interpretation really going on here. It's bytecode as you write it, despite being, I would claim, a very human-friendly notation. Now, in the last release of APL, that example also became sort of irrelevant because we introduced a new operator called key. The symbolism there is, it's like an SQL boot byte, so you have a table here, and it's grouping things. So if I generate a million random numbers between one and six, and then I say apply the function alpha with the key, the unique key is given as the left argument, and the data items corresponding to that key are given as the right argument. So I say return the key and the count of the item for each distinct key, and I get this. So this is the equivalent to select key, sum, count, key in SQL. Okay, so I think I will, since I not unexpectedly used too much time, I will move back to the slides for a moment. Right, so I made the claim, I think once you get some experience with APL, although it executes from right to left, you would generally read it from left to right. So you can read this here, which is the transcription of that, two times a divided into minus b plus or minus the square root of the determinant b squared minus 4hc. And if an APL expression can't be used in that way, it should probably break it up, because it's supposed to be, I mean, APL was invented as a mechanism for communicating between humans, which happens to be very nicely executable. So, yeah, we're not just trying to jump on the bandwagon here, although this is the first appearance of APL, probably at a functional language conference for some time. Don Bactus recognized in 77 in his Turing Award lecture that Ken Iverson had, in fact, created a lot of the basis for what became functional programming. He did go on to say some things, you know, there's not enough functional forms in APL, and he really wasn't happy about the fact that it wasn't pure. He can very easily step into a procedural mode in APL if you want to. I think today it's recognized that multi-paradigm is really where you need to be. So what we say to describe dialogue APL today, which has moved a very long way since 1977, is that dialogue is an array-first multi-paradigm programming language. So we're claiming that array programming is a paradigm-like functional programming. We support functional, object-oriented, and imperative programming based on an APL kernel. So sort of to prove my functional credentials to you, I have a bit of Rosetta code here that's one of our team who does scheme setup for me. So mapFA is just FA because most of the time it's implicit. For the functions that are not scalar that don't just map automatically, user-defined functions, for example, there's an operator called each, which is the equivalent of map. So you can explicitly map things. Filter, the compress. This symbol actually is overloaded. That's a bit unfortunate, but it was done back in 1966 before the distinction between functions and operators was properly understood. If you have a Boolean array on the left and you compress an array, that selects the items where the left argument is true. And we've seen bold right. The classical staple diet of functional programming. So juxtaposing things creates lists in APL, or there's a catenade function if you want to do it. Actually, this was extremely controversial in APL, the fact that the space is a function here, essentially. So bad that, in fact, Iverson more or less quit his job at IBM when IBM decided to put this into an APL 2 in 1983. Yeah? You have to know at one time what X and Y are. If X was a function, that would be a function application. If it was two functions, it would be a function composition. If it's two arrays, yeah, I mean, it's both beautiful and horrible at the same time. Yeah? You need to take care. I think I'm, you know, at heart, I'm with Iverson. I'm now the CTO of a company that has an interpreter that implements lists. It makes code very, very simple to write in a lot of cases, but it makes it more ambiguous. In many ways, it's more of a problem for us than for the users because writing a, sorry? Yes, and writing a compiler is a nightmare. Yes, it could, it could, yeah, yeah, yeah, it could. But the problem is to avoid that, you have to introduce a lot of syntax and protocols that I feel distract from, you know, then you no longer have a mathematical notation, so you have something with these programming. Yeah. So you can take and drop vector and matrix products, you know, lots of code in, in Steam and in APL, we see it's just, you know, whether it's the vector case or the matrix case and whether the functions are plus times or and dot equals or dot equals or counter disloser and dot or, or dot and, sorry, you have a completely general mechanism. We saw the outer product, the Cartesian product, so here I'm doing a null dot maximum and this thing is called commute because it reverses the argument, but when there's only one argument, we now call it the selfie operator because it f selfie x is x f x. So if I want to do the null dot maximum with iota 6 on both sides, I just say null dot maximum selfie iota x and I get this thing where I have a symmetrical around the diagonal, right? Other dialogue operators? Well, we saw scan, we talked about commute, which is selfie when there's no left argument, it's copies to left argument, the right argument to both sides. We have function power, so that says apply the function if there's a number on the right, it applies some number of times. So 0.5 times omega power 3 would halve the argument three times, but if the right operand in this case is match, whether the arguments are identical, then it applies the function until the one invocation and it passes the one invocation and the previous invocation, the result to this function and if it returns true, that's the end of the isolation. So power match is the fixed point, so repeat this until it stops changing. So if you do 1 plus the reciprocal of omega power match 1, it computes the Jordan ratio by repeatedly applying this factor. Rank. So where normally the map is done on scalers, you take one scalar item at a time and apply the function, there's an operator to control that, so you can say I want to take a vector on the left and apply it to make it from the right, or in this case, use the ravel, which is when it's monadic, it removes the shape of an element, no matter how many dimensions it has, it becomes a vector. So if you say ravel rank two, it collapses the last two dimensions and it makes it into a singular. Here we saw, and then an experimental thing in the latest version of APL, dialog APL, is a parallel operator, so that derives a function which puts your function, puts f inside an isolate, which is a closed space, executes it and returns a future, which you can wait on when you need it, but the execution of your main program carries on until you need this result. So that's sort of our concurrency model, if you like. Unfortunately, because the APL community has, at least until recently, been very isolated, we've been our own little trickle, independent from the main tree for a very long time, I don't know the right terminology to tell you guys which of the concurrency models you know is just for responses, but maybe somebody... I asked that question in the fiscal yesterday, but I could get an answer. Also, in the latest release, we have a number of 0.3 forms. So we saw that f plus g is the way to express, well, f plus g. So if you have three functions just suppose like this, fg8, so if it's a monadic function, it's f of omega, g8 of omega, and if it's dyadic, then it's the... it's called fork, because you have essentially this is your root and then you have three for a fork going up to the function on the right-hand side. So it applies the left function to the argument, the right function to the argument, and then it applies your root function to those results. You might think, well, why is that useful? Well, it has a lot of useful applications. So for example, f plus g is an example of that. If you have two functions, you can just write them like this. It applies f, it applies g, and it counts the result. And you can compute the average, or you can define the function mean or average by saying it's the sum divided by the count, which is the mathematical definition of the average. So this is going to count the number of items in the argument. This is going to sum it and then the two will be divided. So the number of applications for this is surprisingly large once you get used to it. And of course, the interpreter can really optimize that kind of stuff. And then you write a compiler. Writing a compiler for these things is really, really easy because it's all pre-passed, basically. You just execute. Two functions is in a top. So floor divide with the integer division rounding down. Then we have sort of classical compositions. So I can bind one argument in the case 32 composed with plus with the function of add32. Multiplication composed with 1.8. So Salon height is add32 composed with scale. We talked about the fact that you can also curry. Well, actually, we didn't talk about curry. We talked about the power operator in fixed point. And one thing you can do in recent versions of ACL is that you can curry the right operand of an operator giving you a monadic operator. So fixed point will be power max. And then you get a monadic operator that you can apply any function to. One of the, another really interesting thing about that really colors the way people use ACL. Well, any keyboard, you can define whether you want to use the control or the alt key or the windows to map the symbols to the keyboard. And in the in the REPL you have them all up here. When you hover over them it will tell you it'll tell you you can't really see that so it tells you where it is on the keyboard plus the definition of it. So while you're learning it there's a lot of help available. But that's true, it takes a little bit of getting used to it. But you know anybody who's productive is touch typing anyway. You're not looking at the keyboard. Okay, so because map is implied and because indexing can be done with arrays you can write a lot of logic where you would expect to write if statement as parallel expression. So for example, if I have this data here vector 2, 7, 15, 60 and I want to make sure that none of the items are less than 5 so I essentially want to say if data sub i is greater than 5 then keep it otherwise gives me 5. I can just write that as data max 5. So no loop, no conditional. Now it gets maybe a little bit weirder so I want to increment data if it's 3, 7 or 15. So I can write that as data plus actually I don't need one time to if I wanted to implement it by more than one I could just say data plus data element 3, 7, 15 that would give me a Boolean vector we call it and the ones would be added so I implement each element and then the sort of the classical switch statement here I say I have two arrays x and y I want to select and I have a flagged vector of the same length as both. I want to select x where the flag is true and y where the flag is not true I can write that as x times flags plus y times not flags. And that might seem like we're doing more work this way like we're multiplying everything by a Boolean and so on but that's very very highly optimized and for compiler can optimize that very very easily and these expressions are all very easily parallelizable so writing a parallel compiler that knows how to do this stuff in parallel is quite easy. So here's an example of doing sort of bucketing I have four values and I have my ages and I want to select one of these values I do the division rounding up in this case by 10 and then I make sure that it's at least one and no more than four and I select them rather than. I don't talk much about this we've seen a lot of these forms already you can write functions user defined functions in this functional form there's also a procedural form which I won't show you because this is a functional. Alpha is the left argument and omega is the right argument so yes you can only have two functions are either prefix or in-fix of course they can be tuples they can be nested arrays but they can't have different names I admit it but the elegance of everything being in-fix or prefix allows the construction of these big functional no you can but you don't have to and if I don't run out of time I'll show you an example where I do exactly that yeah so I think I'd like to push on so here's a multi-line function with a guard so this is a recursive Fibonacci definition that we start by default if there's no left argument we start with 0 and 1 if the right argument is 0 we just return the head of the left argument otherwise we sum the element in the left argument and we drop 1 and we do a recursive tail-force tail-force are optimized in this language and you can see you can have guards in this functional okay so 19 minutes to go okay so this is going to be really fast because I have too much stuff to show you here but I'm trying to give you a flavor of what it's like to work in this language don't expect to be able to follow these examples I would be amazed if anybody could but hopefully the flavor is coming across so here's a little function I've written Wikipedia which takes an argument of a page name from Wikipedia and if I say and it's called cached get because I didn't know whether I would have an internet connection but I actually have a variable in my workspace with all the data and it gets it from there if there's no internet connection so I got some HTML which fortunately is xHTML and then I've written a little function called table1 because I want to generate some names for a demo and I found this page on Wikipedia a list of the most common surnames in Asia I thought I'd try and make it relevant and it's got lots of tables in it so I'm writing a little DSL here so table1 returns the content of the first table in this page and now I'll risk blowing your minds away here with a bit too much code so what I'm doing is I'm taking this xHTML long vector of text we have a function called quadXML which turns this into a nested array with five columns the first column is the level of nesting the second column is the name of the tag the third column is the data and then the fourth column is the attributes and so on and so I'm going to look in the second column for the first occurrence for all the occurrences of table and I'm going to do a plus scan table1 when I get to the first table 2 when I get to the next table and then I search for the number that I'm looking for so what's the location of the nth table in this vector then I look for items following that which are all more deeply nested than this tag that I found and then I index out of the array so now I have I have these are all the HTML tags that correspond to the first table and so I then look for all td and ths and I just find the indices of those because that's where the data is I then count how many ths I have because this is really screen scraping this will not always work but that's how many columns I have in the table and then I do a division round it down which gives me how many rows I have and then I found when I sort of inspected this it took me about an hour to get this function I discovered that some of these ths have don't contain any data they just contain an anchor and the data is actually in that so you know this is really hacking I just said well to the index add one if the next tag is an a and then I've got my matrix and then I wrote a function called column so this is very typical or end users might work with it they're essentially building their own little dsl as they go along and the fact that the functions are all infix or prefix really aid helps I think it's fundamental in my opinion to making these a little bit like natural language without having to do any magic so I can get the romanization column out of this so column and columns are two little functions like that because I'm running out of time so I'm going to get romanization from table one I'm going to get bangler romanization from table two and I've got this vector and I discovered are there some of them with slashes in them so I had to write a little function for first word which drops everything after the first space or comma and then just to show that I did a very unfunctional thing here I mutated this surname thing horrible bad news but of course I can write a little function which is column alpha of table omega and apply it with those two arguments and get the whole thing back in one shot so there's all my surnames and then I got the given names and I don't have time to show you that but essentially I'm doing the same stuff and I got a bunch of given names and then I want to generate lots of data of people's names so I give them all initials from A to Z and just catenating to the list of letters to each one dot full stop and now I can say well take initials and do an outer product with catenation of the surname to get a 26 by 39 array with all the combinations and then I can take all the given names and I put a space between the given name and the initials and doing another outer product and I have a 64 by 26 by 39 and all the combinations of given names, initials and surnames and then I rattle it and I count how many people's names I've generated 64,000 I just pick 50,000 of them at random and then yeah I don't have time to explain this but basically I take the base so the base 2 logarithm of the number of people is 15 so I take random numbers between 2 and 15 and I use those as exponents base 2 to the power of that 2 to the power of this and then I generate random numbers from that again so I get a roughly logarithmic distribution of the number of friends so I've got a number like this and then I generate I take for each of these numbers here I do a deal with this as the left argument so I create this number of random numbers for each one of those 50,000 people and it takes about I think 5 seconds on my laptop there's a serious amount of random number generation going on I need to deal so I have to make sure I'm not getting used to this and so on so that's a fair amount of work and then I don't want people to be friends with themselves so I have this without and then the index of each person so the first person is this guy he has these friends and I can use that to index I said people indexed by one from friends I get the names of these people if I want to generate a nice application count how many friends I have after removing themselves from the friend list so I generated a total of 100 million friends connections between 50,000 people and I can now do something like compute the average number of friends the mouse is up there I can compute the maximum the average and the minimum I'm playing around with this data what are the impressions I want to give you here I can find somebody who's lonely look to see somebody who has only one friend so that's Ahmed Pal for some reason and then I've written a function here which I really would have liked to have more time to talk to you about but I have run out of time hopefully I've given you a flavor so basically there's a function here that recursively goes through it finds out who this person can reach it creates a Boolean array filling in the ones where they have friends and then you recursively go through looking at their friends again so reachable in each iteration through the recursive call if you compress the friends by the ones which have been reached which gives you the next group of friends so after I've recursed on this four times I have the the distance to every one of the 50,000 people from that person and I can use key to say well what's the distribution of those well I have 49,520 people who are four hops away 477 who are three hops away and so on and I can compute the path it's a function very similar to that one there and find out who are the people on this path play around with data the point is here if you sat down and you thought about this a lot you would probably just sit down and write the code but the process I'm trying to give you an idea about here you've got some data it's probably a more complex example and this is messing about with the data I haven't written really much function yet I wrote 10 line functions but I'm exploring this space and I'm out of time so 10 minutes right so just to show you I'm starting a web server here written in ATL just to show you that you can build applications with this stuff one minute from that it always happens when there's 10 minutes to go but here's my web application it's a tag cloud it just has 10 friends and it shows it's using a tag cloud which is a control from a company called Syncfusion one of the latest and greatest things so a tag cloud is something which gives you these words related to the size of something so basically it's the number of friends that they have and I can click on one of these and it takes me on just to that person that I clicked on this sort of educational web server that we have here is one where if you click on the logo at the top this is our constant logo from two weeks ago at our user conference you can see the code that we've written to this so we have our here's our little code that generates the friends matrix so this is really the ATL application code down here and the rest of it is just the code to generate that web page so you say well give me an H2 which say friends tags out give me a link an anchor to reset it add a tag cloud Syncfusion control and then there's a little bit of logic depending on whether you've selected a user or not and then basically just set the properties on this tags out object and it renders okay so with eight minutes to go the sweet spot for this technology is still as I think it has always been people doing financial software so the big users are companies today that make software typically asset management systems where there's a lot of numerical data that needs to be crunched and it's really important to be able to read legislation in the morning and start simulating new products that you might sell in the afternoon and of course the key thing about ACL is it allows people to do that when you build a large application of course you do want software engineering in the process but you can leave the nasty business you can actually let the people who understand it code it themselves and then you can review what they've done there's also some non-financial users they don't dominate but some of them are very large in the world's largest, I think, electronic patient's journal system in Sweden and Acton mobile users to optimize how they crack the code in the product and this is not a large application this is just something there's a customer of ours in Finland who won a prize last year for building this application I'd like to show you a video now wait a bit of my precious time can we turn up the sound maybe I can do that this is an ACL application it's not already an ACL in code generation and quite different from the other applications so where have we been well I've actually maybe skipped over this slide because I've talked about most of it already but you know it's the people who tend to get attracted to ACL are technology avert and the ACL market really took ten years to discover that the PC wasn't just one of these bad things that was going to go away again and the companies who sold ACL were very badly hurt in that process and then we had really dark ages for ACL where everybody wanted to move to C++ and the GUI APIs were changing so quickly that we couldn't really provide our users with the kind of covers that they expect as relatively non-technical people but we really feel that the focus on arrays and functional programming concurrency, big data ACL applications tend to be very lean in terms of the data arrays that we create so the arrays are very very compact and the functions are very very highly optimized and we're somewhere in the middle of this range of built so to successfully use ACL my recommendation is you need to find the right mix of domain experts and software engineers for your application you're going to need both you might not need the software engineers for the first few weeks but you will need them eventually be pragmatic you know use objects if you must if you saw the source code of that web page which was only there for six seconds that was a class it started with something called on class it had a constructor and so on because I think for user interfaces a lot of user interfaces I think that orientation remains a good tool of thought and that's the thing that's important to focus on and for in the fishbowl yesterday we were asked what's the next big thing and I think the next big thing after concurrency is complexity the data that we're going to be asked to analyze and work on is just going to get really really hard to look at and if you don't have tools with a kind of expressive power that ACL has maybe something new that embodies what ACL does in a different framework will be more successful but I really believe that this is true this is from a colleague of ours who has an array based language derived from ACL this is true and there's a list of major language extensions you've seen some of them you can look at the slides I'll upload them we still have a whole bunch of work to do we don't have a compiler or type those are getting important for large applications we don't have closers or lazy evaluations we do recognize that we need those but after 50 years where was the automobile after 50 years of invention I think the computing is still roughly in that place it's going to be another 50 years with the right software if you were slightly intrigued by this unfortunately I won't have time for questions I think I have one minute left but you can use tri-APL online there are some tutorials there there's a bunch of videos if you're a student it's free and note that every year we run a competition for students where the prize is thousands of dollars on the trip to our user conference paid by us and there's a low cost it's usually 50 pounds, 75 dollars non-commercial version but if you register for that within the next week and say you were here then just ignore the payments I had a lot of help putting this together and I apologize to these guys for running out of time I'm not using their material to its fullest extent thank you all for listening I do have a slide where it says any questions but there is no time but I'll just remind you that the deafness in those questions is this so we'll have to take the questions in the breaks or fill in the forms and say if you want them back next year for a slower fork on EPL and I'll be very happy to do that thank you for listening another 15 minutes


Hey y'all, welcome to What Chelsea Eats. Thank you so much for joining me today. The reason I'm here is because I wanted to let you know that I'm having another fasting and praying challenge for shrinking fibroids and healing other reproductive health issues on September 23rd through September 25th. As you know, I'm also holding a 60-day juice feast and we're doing fasting and praying right now in the Facebook group. But if you do not participate in Facebook or you want to be with me here on YouTube, like we have done in the past, please sign up for this next Prayer and Fasting Challenge, which again is the 23rd of September through the 25th. And if you want to participate, you can participate from anywhere in the world. It doesn't matter where you reside. If you can't be live during the prayer sessions, they will be recorded. But in order to be a part of it, you absolutely have to sign up. We'll be praying twice a day for one hour. And it's exciting because I have been getting so many emails about all of the things that have been happening in the lives of the people who have participated. Testimonies here and there about like relationships changing, their relationship with God changing, things being healed in their bodies. So I'm excited. I'm not going to stop. If you want to be a part of it, please click the link in the description box below. It says Prayer and Fasting Challenge. You click the link and you will immediately be added to the list so that you get instructions on how to access the times of prayer. It will not be public on my YouTube channel as usual. So you will not be able to see it if you just come to my YouTube channel. So you have to sign up if you want to be a part of it. Thanks so much for watching and I will talk to you all soon. Take care.


Today's block will be from 3.30 a.m. to 8 a.m. for one hundred thirty nine dollars and fifty cents enough money to pay the rent again Give me a thumbs up and do not skip those ads we about to go to warehouse right now and get to the bag. Let's go So guys look I'm gonna show you how these hit them with the scan ski right so I gotta cover it like this So it's kind of weird, but I want y'all see nobody address. This is how you find out exactly which number package is You're gonna hit this button right here this little button right here Hit that right then you gonna hit him with the scan ski That is gonna tell you let me put that up Thank you See that in the corner left corner right there right here 16 this is number 16 this package right here number 16 then what we do is we get the permanent mark I mean the Sharpie right number 16 on here and then put it in order to get an order You know so that's what we're about to do right now. We're about to get busy. Let's go so guys We got everything situated for those who hit it. Wow y'all see what's going on, baby We have 46 deliveries 48 packages if you want to have it our first stop is 13 minutes away eight miles We both go wild. I hope you like my style like the cannon. Please don't tell me I know the rest. Let's go They got the coming to courtyard. I'm in the courtyard. This has to be it right here. Yeah the Luxe the Luxe This drink cold nasty.    Why? Yeah, ma'am.   Why won't you give me the cold? They they definitely give me the cold on this one. I look actually look said job over at the customer door But how am I supposed to get in this joint, baby? And I can't win the door, but it's way too early for that Shall I just put it? Yeah, I'm putting right here. Let me let me I'm gonna Slide I'm slide that Joan a little bit.  Let's go That's one baby Gotta go with these tears Drop like a side. I think I got that motion sensor hit him with the photos. It's admin tweaking Look how long it takes me to take the photo. Let's go. What's literally across the street, baby We have to go far. Oh, baby. We're about the board.  Let's go Eight we are here getting to this cake. This is a beautiful house. This joint actually very very nice. They got that They got them some protein hit on the photos Let's go I'm gonna grind today in the time. I don't need to see a shine so I step back in the photos Let's go Retain always pay the wind baby. This is the night house to stop like it's hot step back out with the photos. Let's go John order number 11, baby. Don't bullet like Stefan, baby. Hit on the photos. Let's go 12 this got the unlock ski, baby. Let's see if it works. Okay Next one, baby Look, I just the same as knows in the car. This one don't got the unlock button But it's access code. This is like only for it's like To reach out to the customer I might have to take this joint back.  There's no way for me to get in the building at all Why don't they out of pocket? It live to front door Close the door is 1080 This is only to call people that so they can let you in Ain't no other cold. I know other where and no other place for me to type in a cold I think I got to take comment below. Let me know what you guys should do. I'll take this back or not Are we definitely back? I can't leave like that baby. Let's go the next one, baby We definitely had to we're gonna take that drink back because we ain't got time to be playing no games Need to get it together. Hit it with the photos.  This is like the only like low gate thing That's a little like local low key Jason on the low low. It's to be decent on the low low. Hit him with the photos.  Let's go Baby, you know him with the unlocks key, baby. Let's see if this is gonna work. All packages must be left in mail area Mail area is right here Mail area Oh, okay. Okay Jump like something. No, I'm gonna put it over here Make it look a little bit better. No demo. I'm trying to get to the chair. You know demo In the mail room Hit him with the photo. You already know those Let's go 19 we are here getting this green, baby. They got a lot of little gates out here. I just noticed, baby These joints are decent too. Jump like a dog Step back. I know the photos. Let's go. Oh, we are here getting dough.  They got the waterfall. No joint right there. They going crazy Oh That joint actually got a little photo smack. Let's go Here to drop off order 21 21 set Jump like size. Step back into the photos. Let's go 21 in this 22. This is order 22.  Hit the door. Do not want to open, baby.  Let's go. We are here to drop off order Michael Jordan flash like Gordon Um, it's like three apartments here. I don't know which one to go to It says go to order number two, but they don't have the apartment numbers right here So I'm just gonna put it off. This is the middle box where you drop like a sign. Step back into photos. Let's go We are here, baby to drop off order 24 rp. Kobe. Oh, shoot. Let's know We got to hurry up because we parked in the middle of the street, baby Fly It's real Hit with the photos. Let's go order number 25. It's a great time to be alive They got big packages. Oh You can't even oh you get to try this one. Why this joint like that? This joint crazy. I never seen a lock like this How you open this on I don't know. Oh, maybe I'm not doing hold on. Let me see. Let me see. Let me check it out. Check me out. Check me out. Check me out and Nope Nope, that's not the joint in here Slide it through the fence ski And it's gonna be stuck a little bit. Okay Got that joint in there. Put the arm through there. Hit it with the photos. Mac. Let's go order 26 We in Chicago in a mix, baby. We're already getting busy. You know what I'm talking about? You're going crazy. Drop like a sign. Step back. I need the photos. Mac. Let's go So this one said do not leave their stuff at the front door even by the side door, which is over here This joint's so small. It's like all balled up like all homework right here This is tiny. This is under the mailbox. Which one is that? G. So G. Here you go G. So Mac. Let's go We are officially halfway done at getting on the run. This is order 28. Y'all saw us skate, baby Y'all saw us be great, baby. Jump like it's hot. Hit it with the photos. Let's go order two nine Some people love when I run I'm a rapper Hit it with the photos. Back. Let's go one.  Step back. Hit it with the photos. Mac. Let's go I'm order 32. Big 32 game. Huge shout out to she the young 32 Drop like it's hot. Step back. Hit it with the photos. Mac. Let's go Order Scotty Pimpin. This is a very nice, very nice apartment building. This joint is beautiful.  Hit it with the photos. Mac. Let's go Kill O'Neill. Don't lie. Keep it real You know what I'm talking about? Don't lie. Keep it real Keep the steel. Step back with the photos. Mac. Let's go Next one on to the next one. It says leave it on the right side of the building by Two on the stairs up right here. Step right here on the stairs, baby Jump like it's hot. Step back with the photos. Mac. Let's go Six we are here in the mix and I don't know if we're gonna be able to get in this zone Nope. Nope. Let's get into it like me. Nope Um, I'm gonna put it right here because I don't want to bite the stuff on it Don't want the photos. Mac. Let's go Seven we're here, baby We only got like nine more to go. We're gonna scope. You know what I'm talking about? This is very, I like this gate here. This is decent Uh, two doors. So I'm just gonna leave it right here Hit it with the photos. Mac. Mac. Mac. Let's order 28. Well, I said 28. 38. We're about to get to this cake Um, deliver the door, man Hello. I have Amazon delivery Do you want me to just leave it right here or? Okay You have a good day I'm up order 39. Oh, okay I'm saying forward but no Build a manager about this issue. It's some oh some issue about something So I'm gonna drop this right here Jump like it's hot. Stand back. Hello with the photos. Mac. Let's go To drop off order number 40 shorty 40 shorty Uh, I got the oh, okay. I got two unlock buttons. Hold on. Wait. Just I was hitting the wrong one Let's hit this work. I'm hitting unlock joint All right. Now play keep on playing. That's what's gonna happen. Take it right back This one is definitely not working Hit it again Oh They out of Try one more time and if that if that don't work, we're going to get it on I mean block the address you see is right here. They got the unlock joint Press that button. Press that button microwave oven I'm supposed to be pushing that pulling so that's right Well, we're going back to the warehouse with this one on to the next one. Let's go Order 41.  Step back in with the photos. Mac. Let's go 42 y'all know what it's time to do baby. It's time to drop like it's hot and get busy Drop like it's high. Step back in with the photos. Mac. Let's go drop off the next order We definitely can't get in Uh, please do not leave packages outside Please place inside under stairwell things but you can give me the god dang on cold to get in this joint You are parking I don't have a cold. I don't have a keeping. Oh, hold on. Wait. I'm not I'm not I'm not I'm not I'm not I'm not In the game coach Look, I gotta pay attention Pay close attention Um, we're gonna say another safe place. I'm gonna put them right here on top of this thing right here We're gonna step back. I'm turning light off so we're getting with the photo Let's go. We are here to drop off package 44. It's got the unlock ski, baby This joint is not unlocking. They big oh, okay any game coach Um, what should I put this? Oh, they put everything right here Jumping like it's hot I didn't even put our park yet. I ain't even hitting with the scans yet I'm tripping. Let me slow it down Oh, I'll get a ticket if you want a verse of me.  Let's go You gotta do a little walk. Are they doing some uh work on the sidewalk right here? So I gotta go all the way down and turn around. You know what I'm saying? We ain't playing around Now we gotta go down here, baby They about to have this sidewalk, right? I don't know why guys, but comment below let me know if I'm tweaking It is now uh 5 58 in the sun is still not come on yet. I don't know Oh, here we go. Let me see. Oh, let me see. Let me see. They give us an unlock and all that stuff I hope so if not, guess what? I just did all that walking for nothing Um Maybe this might work. I didn't give you no pain. I'm let's just see what happens Delivery delivery pin. Nope. And then give me a delivery pin Let me make sure I'm not tweaking Start trip park army hitting with the scans key That's that nope They is tweaked No, tree Nope Open door That's not gonna work They gotta be smarter than that back to the warehouse it goes. That's like a four or five packages I think if we got to take it back to the warehouse they keep on tweaking You know what I'm talking about? But we don't know wait after this one to do our last delivery Just like that. We are here to drop off the last order to get in order It's like another duplex. They are Let's go. Just like that. We are here to drop off these items that we did not drop off You know what I'm talking about? Hit them with the scan ski Hit them with the scan ski Hit them with the scan ski Hey So that's two this one scan. I don't need to hit them with the scans Three those sb4 packages. What is going on? There's missing one. I don't know which one it is. Which one is it baby? Maybe this one There we go, baby. Okay. We got some joints here So I don't know why it won't scan it for some reason but I'm about to go ahead and drop these Jones off And we owe me to the next one, baby And just like that it is the end of the video. I hope you guys enjoyed the content. Guess what, baby? It only took us two hours and 30 minutes. We came and got in the baby again Make sure you smash that subscribe button, make sure you give me a thumbs up and do not skip those ads And lock it tomorrow because we're getting back to this bag. Why are we getting back to this bag? The 2022 is still bags. We're gonna keep on giving them a reason. I see you guys on next one We're going, we're going, we're flowing. You already know it is DDK and I'm on my way


From around the globe, it's theCUBE presenting Cube on Cloud brought to you by SiliconANGLE. Okay, we're back here live, the Cube on Cloud and this is Dave Lante with my co-host John Furrier. We're all remote. We're getting into the analyst power half hour. Really pleased to have Maribel Lopez here. She's the principal and founder of Lopez Research and Zia Caravalla, who is the principal and founder of ZK Research. Guys, great to see you. Let's get into it. How are you doing? Great. How you been? Good, thanks. Really good. John's hanging in there, quarantining and all healthy. So hope you guys are too. Hey, Maribel, let's start with you. You know, here we are on 2021, you know, just exited one of the strangest years, if not the strangest year of our lives. But looking back in the past decade of cloud and we're looking forward, how do you see that? Where do we come from? Where are we at and where are we going? Well, we obviously started with the whole, let's build a public cloud and everything was about public cloud. Then we went to the notion of private cloud. Then we had hybrid cloud and multi-cloud. So we've done a lot of different clouds right now. And I think where we are today is that there's a healthy recognition on the cloud computing providers that you need to give it to the customers the way they want it, not the way you've decided to build it. So how do you meet them where they are so that they can have a cloud-like experience wherever they want their data to be? Yeah, and CSU, you know, observed this as well in the early days of cloud. You heard a lot of rhetoric. It was private cloud. And then now we're, you know, hearing a lot of multi-cloud and so forth. But initially a lot of the traditional vendors kind of poo-pooed it. They called us analysts. We said we were all cloud crazy, but they seem to have got their religion. Well, everyone's got a definition of cloud. But I actually think we are right in the midst of another transformation of cloud. As Maribel talked about, we went from, you know, private clouds, which was really hosting the public cloud to multi-cloud to hybrid cloud. And if you look at the last post that put out in Silicon Angle, which was talked about F5's acquisition of Olterra, I actually think we're in the midst of the transition to what's called distributed cloud. Where if you look at modernized cloud apps today, they're actually made up of services from different clouds and also distributed edge locations. And that's going to have a pretty profound impact in the way we build apps because those distributed edges, the Atelco Edge, Solar Edge, IoT Edge, whatever, the services that live there are much more ephemeral in nature, right? So the way we secure, the way we connect changes quite a bit. But I think that the great thing about cloud is we've seen several evolutionary changes to what the current definition is. And we're going through that now, which is pretty cool to think about, right? It's not a static thing. It's an ongoing transition. But I think we're moving into this distributed cloud era, which to me is a lot more complex than what we deal with in the past. I'm actually pretty excited about that though, because I think that this move to Edge and the distribution that you've talked about, it's like we now have processing everywhere. We've got it on devices, we've got it in cars. We're moving the data centers closer and closer to where the action's happening. And I think that's going to be a huge trend for 2021 is that distributed, that you were talking about a lot of edge discussion. The reason we're doing this too is we're moving the data closer to the user, right? And some, if you think you brought up the autonomous vehicle, right, or the car being an edge, you think of the data that generates, right? There's some things such as the decision to stop or not, that should be done in car. I don't want to transport that data all the way back to Google and back to decide whether I want to stop. You can also use the same data to determine whether a driver is driving safely for insurance purposes, right? So the same data can be located at the Edge or in a centralized cloud for different purposes. And I think that's what's kind of cool about this is we're being able to use our data in much different ways now. You know, it's interesting, is it so complex? It's mind-blowing and because it's just distributed computing, everyone kind of agrees, this is where it is. But if you think about the complexity, and I want to get your guys' reactions to this because some of the like side fringe trend discussions are data sovereignty, misinformation as a vulnerability. Okay, you get the chips now, you got Graviton with Amazon in-front, Apple's got their own chips, Intel's going to do a whole new direction. So you got tons of compute and then you mentioned the ephemeral nature. How do you manage those? What's the observability look like there? What's the trust equation? So all these things kind of play into it. It sounds almost mind-blowing just even thinking about it but how do you guys as analysts try to understand where someone's either blowing bullshit or kind of like has the real deal because all those things come into play. I mean, you could have a misinformation campaign targeting the car and say, hey, you know, that data needs to be, this is misinformation. And who's supposed to sovereignty on that? In a lot of ways, this creates almost unprecedented opportunity now for, for startups and for companies to transform, right? The fundamental kind of my research has always been share shifts happen when markets transition and we're in the middle of a big one. If the compute resources we're using, John and the application resources we use in order of femoral nature, then all the things that surround that the way we secure, the way we connect, those also have to be equally agile, right? So you can't have, you know, you think of a microservices based application being secured with traditional firewalls, right? Just the amount of, or even virtual, the way that the length of time it takes to spin those things up is way too long. So in many ways, this distributed cloud change changes everything in IT and that includes all of the services and the infrastructure that we use to secure and connect. And that is a profound change. And you mentioned the observability, you're right, that's another thing that the traditional observability tools are based on static maps and things and, you know, traditional up, down and we don't, things go up and down so quickly now that those don't make any sense. So I think we are going to see quite a rise in different types of management tools and the way they look at things to be much more, I suppose, you know, agile. So we can measure things that currently aren't measurable. So you're talking about the entire stack really changing is really what you're, I'm inferring anyway from your commentary. And that would include the programming model as well, wouldn't it? Absolutely. Yeah. You know, the thing that is really interesting about where we have been versus where we're going is we spent a lot of time talking about virtualizing hardware and moving that around and what does that look like and creating that as more of a software paradigm. And the thing we're talking about now is what does cloud as an operating model look like? What is the manageability of that? What is the security of that? What, you know, we've talked a lot about containers and moving into a different, you know, dev sec ops and all those different trends that we've been talking about like now we're doing them. So we've only gotten to the first crank of that. And I think every technology vendor we talked to now has to address how are they going to do a highly distributed management and security landscape? Like what are they going to layer on top of that? Because it's not just about, oh, I've taken a rack of something, server storage compute and virtualized it. I now have to create a new operating model around it. In a way, we're almost redoing what the OSI stack looks like and what the software and solutions are for that. So who's going to build that? Hold on, hold on, there's a link to the introduction because that OSI stack, that came up earlier today, Maribeth, we were talking about. Yeah, we were riffing on the OSI model back in the day. And we were comparing the SNA, Decnet, the proprietary protocol stacks that they were out there. And some were saying- John said Amazon's SNA, as I recall. I think that's what you said. Well, no, someone in the chat said to that comment like Amazon's proprietary meaning their scale. And I said, oh, that means they're SNA. But if you think about it, that's kind of, that can hang together if the Kubernetes is like a new connective tissue is at the TCP IP moment. Because I think OSI kind of was standardizing at the lower end of the stack, ethernet, token ring, you know, the data link layer, physical layer. And that when you got to the TCP layer, it really magic happened, right? To me, that's when Cisco's happened and everything started happening then. And then it kind of stopped because the applications kind of maintained their piece there. A little history there, but like this kind of happening now, if you think about it. And then you've put me a factor in the edge it just kind of really explodes it. So who's going to write that software? I think, you know, Dave, you've asked us to change where you build apps. It's already changed in the consumer world. You look at Uber and Waze and things like that. Those apps are already highly decomposed applications that make API calls and DNS calls from dozens of different resources already, right? We just haven't really brought that into the enterprise space. There's a number of kind of new or born in the cloud companies that have done that. But they're very few and far between today. And John, your point about the connectivity, we do need to think about connectivity at the network layer still obviously, but now we're creating that standardization that standardized connectivity all the way up to layer seven. So you look at a lot of the, you know, one of the big things now is the API API calls, right? You know, from different cloud purposes. And so we do need to standardize it every layer and then stitch that together. So that does make, it does make things a lot more complicated. Now I'm not saying don't do it because you can do a whole lot more with apps today than you could ever do before. It's just that we've kind of cranked up the level of complexity here and cloud isn't just a single thing anymore, right? That's what we're talking about here. It's a collection of edges and private clouds and public clouds that all have to be stitched together at every layer in order to work. So I was talking a few CIOs earlier in the day. We had them on, I was asking them, okay, so how do you approach this complexity? Do you build that abstraction layer? Do you rely on someone like Microsoft to build that abstraction layer? Doesn't appear that Amazon's going to do it. You know, where does that come from? Or is it dozens of abstraction layers? And one of the CIOs said, look, it's on us. We have to figure out, you know, and we get this API economy, but you guys are talking about a more complicated environment moving so fast. So if my enterprise looks like my iPhone apps, I mean, yes, maybe it's simpler on an individual app basis, but it's app creep and my application portfolio grows. Maybe they talk to each other a little bit better, but that level of complexity is something that users are going to have to deal with. What are your thoughts on that? Well, I think quite what Xeus was trying to get at and correct me if I'm wrong, Xeus, right? We've gone to the part where we've broken down what was a traditional application, right? And now we've gotten into API calls and we have to think about different things. Like we have to think about how do we secure those APIs, right? That becomes a new criteria that we're looking at. How do we manage them? How do they have a life cycle? So what was a life cycle? Say an application is now the life cycle of components. And so that's a pretty complex thing. So it's not so much that you are getting app creep, but you're definitely rethinking how you want to design your applications and services. And some of those are going to do your shelf and a lot of them are going to say it's too complicated. I'm just going to go to some kind of SaaS cloud offering for that and let it go. But I think that many of the larger companies that I speak to are looking for a larger company to help them build some kind of framework to migrate from what they've used with them to what they need to have going forward. Yeah, I think where the complexity is, John, you asked who creates the normalization layer? You know, obviously, if you look to the cloud providers, AWS does a great job of stitching together all things AWS. And Microsoft does a great job of stitching together all things Microsoft, right? And same with Google. But then they don't, but if I want to do some Microsoft to Amazon or Google to Microsoft connectivity, they don't help so much of that. And that's where the third party vendors, that, you know, Aviatrix on the network side will tear on the security side of their companies. Like they even Cisco's been doing a lot of work with those companies. And so what we don't really have, and we probably won't for a while, is somebody is going to stitch everything together at every, you know, at every layer. So, and I do think we do get app creep, Maribel. I think if you look at the world of consumer apps, we moved to a lot more kind of purpose-built, almost throwaway apps. They serve a purpose or two, you use them for a while, then you stop using them. And in the enterprise space, we really haven't kind of converted to that model yet on the mobile side, but I think that's common. So we couldn't want to- Well, I think we started with micro-apps, right? That was kind of the issue with micro-apps. It's like, oh, I'm not going to build a full-scale app that's going to take too long. I'm just going to create this little workflow and we're going to have like 200 workflows on someone's phone. I think we did that. And not everybody did it though, to your point. So I do think that some people that are a little late to the game might end up in that app creep, but hey, listen, this is a fabulous opportunity to just, you know, throw a lot of stuff out and do it differently. What I think, what I hear people struggling with a lot is to get it to work, it typically is something that is more vertically integrated. So are you buying all into a Microsoft? Are you buying all into an Amazon? And people are starting to get a little fear about doing the full-scale buy-in to any specific platform. Yet in absence of that, they can't get anything to work. Yeah, so I think again, what I'm hearing from practitioners is I'm going to put a microservice. I think, Maribel, this is what you're implying. I'm going to put a microservices layer. Oh, if I can't get rid of them, if I can't get rid of my Oracle workloads, I'm going to connect them to my, and modernize them with a layer. And I'm going to in part build that. I'm going to, you know, partner to get that done. But that seems to be a critical path forward. If I don't take that step, I'm going to be stuck in the path, in the past and not be able to move forward. Yeah, absolutely.  You aren't going to throw everything out right away. That's just, you can't drive the bus and take the wheels off at the same time. Maybe one wheel, but not all four of them at the same time. So I think that this concept of, what are the technologies and services that you use to make sure you can keep operational, but that you're not just putting only new workloads into the cloud or new workloads as decomposed apps, that you're really starting to think about, what do I want to keep and what do I want to get rid of? Many of the companies you speak to, they have thousands of applications. So are they going to do this for thousands of applications or are they going to take this opportunity to streamline? Yeah, well, a lot of the legacy number goes away, right? And I was, how companies make this transition is going to be interesting because there's no real de facto way. I was talking to this one company, this New York bank and they've broken their IT division down into modern IT and legacy IT. And so modern, everything's cloud first. And so imagine me the CIO of legacy IT. But to Maribos, but what they're doing is they're driving the old bus and then they're building a new bus in parallel. And eventually, slowly they take seats out of the old bus and they take the seat and they eventually start stripping away things that old bus, but that old bus is going to keep burning for a long time. And so stitching those different worlds together is where a lot of, especially big organizations that really can't commit to everything in the cloud are going to struggle. But it is a whole new world. And like I said, I think it creates so much opportunity for people involved in cloud today. That whole bus thing reminds me of movie speed where they had to drive around 55 miles an hour and they just put it out to the airport and it just blew up. That's IT, you know, that's legacy IT. We're on the road to the moon. Oh my God. But you know, we all say that things are going to go away but to Zeus's point, you know, nothing goes away. We're still in 2021 talking about mainframes just as an aside, right? So I think we're going to continue to have some legacy in the network, but the issue is a lot will change around that. And there are going to be some people that are going to make a lot of money selling little startups that just do one specific piece of that, you know? Well, this is a great point. We just do automation of X. So. Oh yeah, that's a great vertical app. This is the distributed network argument, right? If you have a note on the network and you can put a containerized environment around it with some microservices, some connective tissue, glue layer, if you will, software, abstract away some integration points, it's a note on the network. So if a mainframe or whatever, it's just, I mean, it makes the argument, right? It's not core, you're not doubling a platform around the mainframe, but if it's punching out a bank jobs on IBM kicks or something, you know, whatever, right? So. And if those workloads probably aren't going to move anywhere, right? Is there a point in putting those in the cloud? Like I said, just leaving where they are, put a connection to the past, the bridge. Hey, what was that bank where you talked to that bank guy we interviewed and you off the record after the CUBE interviews, like, yeah, I'm still running the mainframe. So I never get rid of it. I love it, run our kicks job. I would never think about moving that thing. It was a large, a large non-US bank who said, I buy the next IBM mainframe site unseen. And he's got no choice. They just write the check.  So those aren't going anywhere, but then, but then, but they're not growing, right? It's just static. No, that market's not growing. It's, in fact, but you can make a lot of money and monetize in the legacy, right? So there are vendors that'll do that. But I do think if you look at the, we've already seen a big transition here. If you look at the growth in a company like Twilio, right? It obviates the need for a company to rack and stack your own phone system to be able to do, you know, calling from mobile apps or even messaging. Now you just do API calls, you know? And so it allows, in a lot of ways, this new world we live in democratizes development. And so any, you know, two people in a garage can start up a company and have a service up and running at a no time at all. And that creates competitiveness, you know, much more competitiveness than we've ever had before, which is good for the entire industry. And, you know, cause that, that keeps the bigger companies on their toes and they're always, you know, looking over their shoulder, you know, with the banks, you're looking at the Venmos and companies like that to try and figure out a way to monetize. So I think what we're, you know, well, that old stuff's never going away. The new stuff is where the competitors create the competitiveness is created. You know, it's interesting. Amidst Xavier earlier today, I was talking about no code and low code development and how it's different from the old four GL days where we didn't actually expand the base of developers. Now we are, you know, to your point, Zias, it really is democratizing and- Well, everybody's a developer. It can be a developer, right? A lot of these tools are written in a way that line of business, people can create their own, you know, apps through point and click interfaces. And so the barrier, it reminds me of when I started my career, I used to code in HTML to build websites. And then with the five years, people are using drag and drop interfaces, right? So that kind of job went away because it became so easy to do. Yeah, sorry. I think I'm in an operation. And we're getting a part with the data. Say again. I'm sorry. I was going to say, I think we're getting to the part where we're just starting to talk about data, right? So, you know, when you think of Twilio, that's like a service. It's connecting you to specific data. When you think of Snowflake, you know, there's been all these kinds of companies that have crept up into the landscape that feel like a very specific void. And so now the question is, if it's really all about the data, are there going to be new companies that get built that are just focusing on different aspects of how that data is secured, how that data is transferred, how that data, you know, what happens to that data? Because, and does that shift the balance of power about it being out of like, oh, I've created these data centers with large rackum and stackums that are virtualized to a whole other set of, you know, this is a big software play. And it's all about software. Well, we just heard from Jamak Tagani, you guys talking earlier about the distributed system. She basically laid down that, look, our data architectures are flawed. They're monolithic and data by its very nature is distributed. So that she's putting forth a whole new paradigm around distributed decentralized data models, which- And Howie Shue was just talking about who's going to build the visual studio for data, right? So programmatic kind of thinking around data. I think the other way we didn't touch on it too, because I do think there's an opportunity for that for data governance and data ownership and data transport, but it's also the analytics of it. Most companies don't have the in-house data scientists to build their own AI algorithms, right? So you're going to start seeing companies pop up to do very specific types of data. I don't know if you saw this morning, you know, Unifor bought this company that does, you know, video emotion detection. So they can tell on a video whether somebody's paid attention or not, right? And so that's something that it would be so hard for a company to build that in-house. But I think what you're going to see is a rise in these, you know, these types of companies that help with specific types of analytics.  And so it's not on the storage and the governance of the data, but it's also the analytics. And the analytics front, these were a lot of the differentiation for companies is going to come from. You know, Maribel's written a lot on AI as an AI. And I think that's one of the more exciting areas to look at this year. I actually want to riff off your point, Ziaz, because I think it's really important because where we left off in 2020 was, yes, there was hybrid cloud, but we just started to see the era of the verticalized cloud, the cloud for something, you know, the cloud for finance, the cloud for healthcare, the telco and edge cloud, right? So when you start doing that, it becomes much more about what is this specialized stream that we're looking at. So what's the specialized analytics stream? What's the specialized security stack stream, right? So until now, like everything was just trying to get to what I would call horizontal parity, where you took the things we had before, you replicated them in a new world with like some different software, but it was still kind of the same. And now we're saying, okay, let's try to, let's try to move out of everything, just being a generic sort of cloud set of services and being more specific set of cloud services. So that is the evolution of everything technology. The first move of everything we do in technology is we try and make the old thing, the new thing look like the old thing, right? First PC app was a main frame emulator. We took our virtual servers and we made them look like physical servers. Then eventually we figure out, oh, there's a whole bunch of other stuff that I can do that I couldn't do before. And that's the part we're trying to hop into now, right? It's like, oh, now that I've gone cloud native, what can I do that I couldn't do before? Right? And so we're just, we're sort of hitting that inflection point. And that's when you're really gonna see the growth take off. But for whatever reason in IT, all we ever do is we're trying to replicate the old until we figure out the old didn't really work and we should do something new. Well, let me throw something old and controversial, not controversial old, but old, an old trope out there. Consumerization of IT. I mean, if you think about what year was, first year you heard that term, right? Was it 15 years ago, 20 years ago? When did that first start? We were podcasting. Yeah, so that was a long time ago. You were doing a podcast. So if you think about it, like it kind of is happening now. What does it mean? Like what does that actually mean in today's world? Does it exist? Well, you heard like Fred Lutty, who's the founder of service now saying that was his dream to bring consumer-like experiences to the enterprise. Well, it didn't really happen. I mean, the service now pretty complicated compared to what we do here. But so it's evolving. Yeah, I think there's also the enterprise-ation of consumer technology. But John, the companies, you look at Zoom, they came to market with a highly consumer-facing product, realized it didn't have the security tools to really be corporate-grade, and then they had to go and invest a bunch of money in that. And so, I think that we can swing the pendulum all the way over to the consumer side, but that kind of failed us, right? So now we're trying to bring it back to center a little bit where we blend the two together. Cloud kind of brings that almost. I never looked at that one. That's interesting. It's surprising to have a consumer. Yeah, that's- All right, guys. Hey, we got to wrap ZS Maribel. Always a pleasure having you guys on. Great, great insights from the half-hour flies by. Thanks so much. Appreciate it. Thank you. Thank you guys. All right, keep it right there. More great content coming from the Cube on Cloud, Dave Vellante with John Furrier. And a whole lineup still to come. Keep it right there.