WEBVTT
00:00:12.080 --> 00:00:16.079
Welcome to episode 122 of Arraycast.
00:00:16.160 --> 00:00:24.079
I'm your host, Connor, and today with us we have our for the moment only co-host, or I guess panelist, and therefore co-host Adam.
00:00:24.160 --> 00:00:25.519
And I guess I totally messed that up.
00:00:25.600 --> 00:00:27.760
We're supposed to go around and do brief introductions.
00:00:28.000 --> 00:00:29.519
And so now they know who I am.
00:00:29.839 --> 00:00:30.640
Now they know who you are.
00:00:30.719 --> 00:00:34.799
But we will let you briefly introduce yourself and then we'll hop into uh one or two announcements.
00:00:35.119 --> 00:00:37.039
Okay, so as Connor said, I'm Adam.
00:00:37.200 --> 00:00:38.640
But so is my family name.
00:00:38.719 --> 00:00:40.079
Don't try to pronounce that.
00:00:40.320 --> 00:00:43.359
I work at Dialog, been working for a decade at Dialog.
00:00:43.759 --> 00:00:45.520
Now the head of language design.
00:00:45.679 --> 00:00:48.719
That doesn't mean I do language design all the time, just sometimes.
00:00:48.960 --> 00:00:51.840
But I sort of have to sign off on language changes.
00:00:52.159 --> 00:01:07.040
I'm really interested in the whole language design aspect, all the possibilities there are, and especially when it comes to array languages, especially Amazonian languages, always lamenting the lack of array features and non-array languages.
00:01:07.359 --> 00:01:07.760
Awesome.
00:01:07.920 --> 00:01:15.519
And I, as mentioned before, I'm Connor, host of ArrayCast, massive fan of all the array languages, all the existing ones, all the future ones.
00:01:15.760 --> 00:01:20.719
And today with us, today, we're gonna be chatting about REPLs and IDEs.
00:01:20.959 --> 00:01:22.319
And we'll get to that in a sec.
00:01:22.400 --> 00:01:23.840
So I I think we have a couple announcements.
00:01:24.079 --> 00:01:26.719
Adam, I think you've got one, and then I've got one and a half.
00:01:26.799 --> 00:01:27.840
So we'll we'll go to you first.
00:01:28.560 --> 00:01:36.239
It's a fairly minor thing, but there's the the Dinah, this dialect North America meetup at the 27th of April, I think it is.
00:01:36.560 --> 00:01:48.159
And there's a the the program for what's going to be presented there is now up on the website dinandodialog.com slash program in British spelling, the MME at the end.
00:01:48.959 --> 00:01:49.359
Awesome.
00:01:49.519 --> 00:01:53.519
Links for that will be in the show notes slash description in the future.
00:01:53.680 --> 00:01:59.439
Not now, but if you're watching live, as always, well not as always, since the second era of a ray cast has started.
00:01:59.680 --> 00:02:00.879
We are live on YouTube.
00:02:01.200 --> 00:02:03.840
And today is Monday, 23rd of March.
00:02:04.000 --> 00:02:07.840
So I think we haven't settled completely, but I think we're gonna be doing this regularly on Mondays.
00:02:07.920 --> 00:02:08.719
But TBD.
00:02:08.879 --> 00:02:10.240
So that's one announcement out of the way.
00:02:10.400 --> 00:02:15.120
My one and a half announcements are, so Adam doesn't even know about this, although actually maybe you were on the email.
00:02:15.280 --> 00:02:27.840
So I want to say a year ago, at least, maybe two years ago, around the same time that Bob was working on like the special Ken Iverson interviews, like a blast from the past.
00:02:28.560 --> 00:02:43.840
Bob Bernecki, local to Toronto, reached out to us at the Arraycast and said that he was sitting on a ton of recordings from the 1991 and 1993 APL conferences.
00:02:44.319 --> 00:02:55.360
And skipping over some details, at some point I got a thumb drive with the digitized versions of these, because I think they existed on, I don't know, VHS or whatever technology was used in the 90s.
00:02:55.599 --> 00:03:00.400
And we were supposed to find a way to publish those on YouTube.
00:03:00.560 --> 00:03:06.560
I think at one point we were going to do it on the Code Report channel, but we didn't end up doing that because I think I was just too busy.
00:03:06.800 --> 00:03:11.680
And Bob Renecky reached out again and was sort of asking what's the status of this.
00:03:12.159 --> 00:03:14.479
And we now have this array cast channel.
00:03:14.639 --> 00:03:22.159
So long story long, my plan is every other week, so we're doing once every two weeks for array cast.
00:03:22.319 --> 00:03:26.080
In between, I think there's like 15 or 20 of these videos.
00:03:26.240 --> 00:03:28.400
One of these videos will drop.
00:03:28.719 --> 00:03:34.639
And that'll be exciting for those that are interested in older footage of array conferences.
00:03:34.719 --> 00:03:40.800
So I think the first one that we are going to be releasing is the 25-year panel perspective.
00:03:40.879 --> 00:03:42.319
It's got a couple different names.
00:03:42.560 --> 00:03:55.439
If you are like the internet sleuth of internet sleuths, I actually, while I was asking for some information to Gemini, it found a recording on someone's channel that had uploaded it.
00:03:55.599 --> 00:03:57.599
And the title of the video is something something.
00:04:03.039 --> 00:04:11.759
But, anyways, you can find this on the internet, but uh a polished version will be uploaded a week from today, which I guess is actually a week because there's no post-processing in terms of the time.
00:04:12.000 --> 00:04:14.479
Anyway, so and there will be some other talks.
00:04:14.639 --> 00:04:16.720
I think one of them's called Mastering Jay.
00:04:16.879 --> 00:04:27.920
There's a few different, you know, I one of them that I haven't actually watched yet, but I'm I'm looking forward to watching when I edit it and upload it is Is Jay an APL question mark, which I I think is also the name of a paper.
00:04:28.000 --> 00:04:30.319
You can you can correct correct me if I'm wrong, Adam.
00:04:30.399 --> 00:04:34.720
Or there was a name of something like they had maybe maybe this just was, it was just a discussion, and that's what this is.
00:04:34.800 --> 00:04:40.079
Or I prefer to say the original name of Jay was APL backslash question mark.
00:04:40.399 --> 00:04:41.360
Oh, okay.
00:04:41.920 --> 00:04:43.199
Because there was a bunch of debate.
00:04:43.279 --> 00:04:48.399
We've talked about that in the past on the array cast when Jay was first born, whether or not it counted.
00:04:48.639 --> 00:04:58.720
Anyway, so look forward to future every other week's in between arraycast episodes, at least for you know a couple months, these videos that'll get uploaded.
00:04:58.959 --> 00:05:02.000
And the half announcement, we'll see if I can share my screen.
00:05:02.160 --> 00:05:12.879
This is less of a an announcement and more of a teaser, which is why I'm calling it, oh, I see, this kind of ruins the because everyone's seeing the the preview of all the other stuff I have on my computer.
00:05:13.040 --> 00:05:14.319
All right, so never again.
00:05:16.079 --> 00:05:20.160
And so this is a I'm working on a I've been working on a YouTube video for like two weeks now.
00:05:20.319 --> 00:05:31.600
Shout out to Madeline, shout out to the folks on the Weewa Discord, but I I've been wanting to make this video since Pearl Weekly Challenge 285, and we're on 366 this week.
00:05:31.839 --> 00:05:39.040
So that's close to like a hundred weeks, which means it's almost like just under two years that I've wanted to make this YouTube video.
00:05:39.199 --> 00:05:41.920
I only started working on it a couple weeks ago.
00:05:42.160 --> 00:05:58.000
But the the preview that I'll show is I've been I decided I wanted a table, and I've made these kind of tables in the past where I show different primitives or even algorithm names in different languages, and and then you just can kind of compare across languages what the different languages call these things.
00:05:58.160 --> 00:06:07.439
But the equivalent in an array language is to have you know the different primitives, and the reason I'm choosing Tiny Apple as the baseline is they have the most number of primitives.
00:06:07.680 --> 00:06:14.800
So, in terms of like you're trying to find one primitive and what they translate to another primitives, the language with the most primitives is uh the best choice.
00:06:14.879 --> 00:06:27.199
And so if you hit a shortcut, which I won't tell folks yet, but this is live on ArrayBox, it will bring up this beautiful table, which shows the translations across the six languages that are supported.
00:06:27.360 --> 00:06:28.720
You can see there's a tiny little bug here.
00:06:28.800 --> 00:06:30.560
This subscript shouldn't be white.
00:06:30.720 --> 00:06:33.759
And the really cool thing is it's like, well, it's only showing the monadic ones.
00:06:33.839 --> 00:06:39.360
Well, if you click on the verb or the function, it'll toggle from monadic to dyadic.
00:06:39.519 --> 00:06:41.439
And then a nice little feature that I'm working on.
00:06:41.600 --> 00:06:51.439
Oh, I guess you can't click or else it gets rid of it, is if you hit C, it then color codes the ones that are, you know, if it's two primitives, it gets yellow, because two is fine.
00:06:51.600 --> 00:06:53.839
If it's three primitives, it gets orange.
00:06:54.079 --> 00:06:56.240
But if it's four or more, it gets red.
00:06:56.480 --> 00:06:59.519
And uh, anyways, this is uh a cute feature.
00:06:59.680 --> 00:07:10.560
It's it's very much in beta because the the primitives that you're looking at on scene are on the screen, are and I guess for the audio listener, we're looking at first cell, ooh, except this is a little bit broken now.
00:07:10.639 --> 00:07:14.879
It should say first, last, first cell, last cell without split and mix.
00:07:14.959 --> 00:07:18.240
And I actually have to split split into split and major cells.
00:07:18.319 --> 00:07:20.720
As Madeline pointed out, there's some slight differences.
00:07:21.120 --> 00:07:23.120
I have I have other things that I want to remark here.
00:07:23.360 --> 00:07:27.439
Yeah, and this is what I thought is like maybe a little like 10-minute mini episode inside of our REPL.
00:07:27.600 --> 00:07:30.639
And like technically, this is uh a REPL feature, is it not?
00:07:30.720 --> 00:07:33.040
So I mean we're technically still on task.
00:07:33.120 --> 00:07:38.639
Uh and I thought I I really liked the tally behind I don't know what is it, skinny squad?
00:07:38.720 --> 00:07:39.600
I don't know what that character is.
00:07:39.839 --> 00:07:40.480
It's called squad.
00:07:40.720 --> 00:07:41.600
Is it called squad?
00:07:41.759 --> 00:07:44.399
I thought that was quite nice, and and the comparison to cap.
00:07:44.959 --> 00:07:47.519
It only only works on quad IO1, though.
00:07:48.399 --> 00:07:51.759
As Madeline pointed out, sometimes quad IO1 is better.
00:07:51.839 --> 00:07:56.319
And it's actually my preferred uh index origin, but we'll we'll save that for a whole other episode.
00:07:56.639 --> 00:07:58.079
Oh, shots fired.
00:07:59.759 --> 00:08:01.519
But no, I mean I also work like that.
00:08:01.600 --> 00:08:04.160
But I would, I mean, if the first column was supposed to be first, right?
00:08:04.720 --> 00:08:05.439
It should be first, yeah.
00:08:05.519 --> 00:08:06.959
I don't know when that got changed.
00:08:07.360 --> 00:08:08.079
That's primitive.
00:08:08.160 --> 00:08:10.879
Why did why is it not APL's first primitive?
00:08:11.120 --> 00:08:12.959
Oh, actually, wait, you know what happened here?
00:08:13.120 --> 00:08:14.480
This is actually there's no bug here.
00:08:14.560 --> 00:08:15.839
I've just typed this incorrectly.
00:08:16.160 --> 00:08:20.480
So at some point, like switching between the languages, they have like the primitive translation.
00:08:20.879 --> 00:08:21.920
This just got messed up.
00:08:22.079 --> 00:08:23.439
So this is actually what it should be.
00:08:23.920 --> 00:08:28.319
And and and uh Madeline asked when I was asking questions about this like what is the relationship between all these?
00:08:28.399 --> 00:08:32.000
These are the primitives used for solving pro weekly challenge 285.
00:08:32.159 --> 00:08:36.960
So that's why I'm comparing like what you have access to when trying to solve that challenge.
00:08:37.279 --> 00:08:40.159
But can you that that last is wrong, right?
00:08:40.240 --> 00:08:41.120
That's not last.
00:08:41.759 --> 00:08:42.399
Last for what?
00:08:42.480 --> 00:08:43.759
We've got six languages here.
00:08:44.240 --> 00:08:45.919
No, look, I'm just talking about APL.
00:08:46.000 --> 00:08:46.480
That's what I know about.
00:08:46.639 --> 00:08:47.759
We can look at the other ones in a moment.
00:08:47.919 --> 00:08:50.799
Okay, so dialogue APL is in the second row, not that that helps the audio listen.
00:08:51.919 --> 00:08:54.879
Part of this problem here is like what is the definition here?
00:08:55.200 --> 00:08:57.200
Last element in REVEL order?
00:08:57.519 --> 00:09:00.639
And do you need to disclose it, unbox it depending on your language?
00:09:00.799 --> 00:09:01.120
Right?
00:09:01.279 --> 00:09:07.519
So the the one you have for currently on APL for last, that's the last cell one, not last.
00:09:08.000 --> 00:09:10.559
Last would be first of the reverse.
00:09:10.879 --> 00:09:15.120
Or first of the reverse of the rabble, if you want to be strict about multi-dimensional arrays.
00:09:15.200 --> 00:09:16.000
Are we talking vectors?
00:09:16.080 --> 00:09:18.799
Are we talking any dimensional arrays when it comes to first and last?
00:09:18.960 --> 00:09:26.080
But in in if you want to be really strict, it should be the the first of the reverse of the first of the rabble of the reverse, right?
00:09:26.399 --> 00:09:27.120
Or something like that.
00:09:27.519 --> 00:09:29.039
First, well you could easily decide.
00:09:29.120 --> 00:09:33.519
It should be the you want to rabbel, yeah, so first of the reverse of the rabble.
00:09:34.000 --> 00:09:37.440
And which is how you would do it, which you can't even do as a three-train, right?
00:09:37.519 --> 00:09:38.799
So you don't have to start composing.
00:09:39.039 --> 00:09:43.600
First cell is left tech first axis reduction.
00:09:43.840 --> 00:09:47.360
And left cell is right tech first axis reduction.
00:09:47.759 --> 00:09:48.799
That's two characters.
00:09:49.360 --> 00:09:50.960
Nobody ever writes like this.
00:09:51.600 --> 00:09:54.720
So I mean, well, this is this is great uh, what do you call it?
00:09:54.879 --> 00:10:01.279
Food for thought and ideas for discussion, because you'll you'll the history of this, and this is part of the problem, folks.
00:10:01.440 --> 00:10:03.200
I'm I'm a big part of the problem here.
00:10:03.519 --> 00:10:16.639
I tend to think in a small bubble that is a subset of the array language world, which is the rank one plus sometimes rank two uh world, which is a subset.
00:10:16.879 --> 00:10:20.639
And when I started constructing this, I didn't even have first cell and last cell.
00:10:20.720 --> 00:10:24.399
I just had first, last, dyadic without split and mix.
00:10:24.559 --> 00:10:31.440
And then as soon as I went to the Wiwa Discord, because honestly, it's the Weewa is probably I have the biggest gaps in my knowledge.
00:10:31.519 --> 00:10:33.039
Maybe J you can put up there as well.
00:10:33.120 --> 00:10:33.840
And so I went to the We.
00:10:41.519 --> 00:10:45.919
So it talks about rows and columns, even though it's actually first access, last access type of thing.
00:10:46.240 --> 00:10:47.519
Uh yeah, I have not observed that.
00:10:47.600 --> 00:10:57.120
But I mean, this is part this is why I said I'm part of the problem, and that there's a problem here, is that when you think in like primarily rank one, like a lot of times I'll say like, oh, it's just that, and then you'll go, no, no, no, no, no.
00:10:57.200 --> 00:11:00.480
Or you know, when Marshall was on the podcast, he'd be saying, Oh no, that's not technically correct.
00:11:00.720 --> 00:11:17.679
Because there's there's like rank one world, there's like rank two world, then there's just arbitrarily ranked world, so all the ranks, and then there's nested arrays, which like if you're gonna spell this correctly, a lot of the times my brain is like, oh, well, what you're looking at on screen works for rank ones, therefore it's correct.
00:11:17.840 --> 00:11:36.399
But it's no, it's not, it's like if you're gonna do the strictly correct, you have to consider nested arrays, you need to consider all the different ranked arrays, and and that's it, it causes a problem in terms of like teaching, in that a lot of the times when people are solving small problems, they actually are in a rank one world.
00:11:36.639 --> 00:12:01.840
And so if you show them the strictly correct for all of the nested and the higher ranked arrays, it's and like so if you have some kind of BQN crate or you know, Apple cart where you go there and you have the strictly correct thing and it shows you know some four or five character ravel with the disclose or whatever, that is strictly correct, but it it should have some like little toggle thing that is like, are you just do you need this just for a rank one array, or are you solving for like a more general broad problem?
00:12:02.000 --> 00:12:12.480
Because I just put multiple entries into Apple cards and say f with and then the description says what the restrictions are, and also the syntax specification often has the restriction built into the names, right?
00:12:12.559 --> 00:12:22.879
So I will call it I can call it the Y if it's a general array, the right argument, and I will call it YS if it's a scalar, ym if it's a matrix, yv if it's a vector.
00:12:23.200 --> 00:12:23.600
Right.
00:12:24.240 --> 00:12:27.120
So there are ways that you can sort of add that in there.
00:12:27.759 --> 00:12:28.639
You have to think about that though.
00:12:28.799 --> 00:12:37.840
When you're gen when you're going to you know different places where there's different varying levels of that kind of specificity specificity, you don't end up necessarily getting all that.
00:12:38.000 --> 00:12:54.080
Anyways, the point being is that I came into this thinking about just in the context of the problem that I was solving, and then I realized, well, technically this is all and like I said, split technically needs to be split into the split from dialogue APL and then Tiny Apple has something called major cells.
00:12:54.320 --> 00:13:00.080
And anyway, so I will update this for what you say, and but then I also need I uh maybe I should do that.
00:13:00.159 --> 00:13:09.519
I should add some little toggle that says, like, you know, do you want the strictly correct or do you want the non-nested, non-higher ranks, just rank one?
00:13:09.919 --> 00:13:12.480
Yeah, I mean that's that's that's it gets complicated, right?
00:13:12.559 --> 00:13:22.960
Because even something you will see a lot in APL code, modern APL code, is that people want to to merge say a vector vectors to be a flat vector, often like character vectors.
00:13:23.440 --> 00:13:25.440
Uh so they'll just run an enlist on it.
00:13:25.919 --> 00:13:27.600
But that works in that case.
00:13:27.759 --> 00:13:28.720
It doesn't work in general.
00:13:28.799 --> 00:13:31.600
You can't just merge things using enlist, right?
00:13:31.679 --> 00:13:34.320
But that doesn't mean it's not idiot-ematic and normal and so on.
00:13:34.480 --> 00:13:35.919
So it's hard to do this.
00:13:36.240 --> 00:13:38.240
How how does a ray box do this?
00:13:38.399 --> 00:13:43.440
Does it just have a giant lookup table for primitives for in for every language?
00:13:44.399 --> 00:13:51.360
I I basically uh yeah, I mean I've I it's been no secret that I I built a ray box entirely using AI tools.
00:13:51.440 --> 00:14:00.399
And so when I had this idea, you know, the the b the basics of the idea was like, all right, if I have a space separate separated primitives, they don't even really need to be space separated, I guess.
00:14:00.720 --> 00:14:04.159
Actually, the uh they do in the sense that well, they act they actually don't.
00:14:04.320 --> 00:14:14.960
Anyways, you know, build a table that's got the languages on the left, the monadic and dyadic at the top that you can toggle, you know, and it didn't look as nice at first, but you just ask it to change.
00:14:15.200 --> 00:14:19.679
And then I said initially just like reach for primitives if they exist.
00:14:19.840 --> 00:14:25.039
And I'd say it got like 75% of them correct, but then not have to go in and be like, ah, that's wrong, this is wrong.
00:14:25.120 --> 00:14:28.639
But I mean 75% is still, and that's the thing, is people say, oh, it's it gets it wrong.
00:14:28.720 --> 00:14:33.759
But the point being is that's 75% of the work that I didn't have to do, and I just have to go and like review.
00:14:33.840 --> 00:14:41.279
I'd rather have, you know, an intern that you know made a bunch of mistakes and and did most of the work for me, and then I just have to go clean things up.
00:14:41.519 --> 00:14:48.399
And then for the the longer ones, you know, like the cap last cell and the weewo ones, I just manually input those.
00:14:48.559 --> 00:14:54.320
And so it's yeah, there I think there's a table called primitive hyphen compare.js somewhere in the GitHub repo.
00:14:54.480 --> 00:14:58.879
So if people are more than welcome to go and either submit issues or even better, pull requests.
00:14:59.039 --> 00:15:06.320
Because like I said, I have not reviewed any of the primitives because I only asked for these ones, but it was just like, well, clearly you're gonna want all of them in the future.
00:15:06.399 --> 00:15:07.360
I'll go do that for you.
00:15:07.519 --> 00:15:13.679
But I have not reviewed any of those, so I guarantee, like, so I mean, what's some what's a random primitive that we don't have here?
00:15:13.840 --> 00:15:17.440
Let's just type in I mean there's some complicated ones that will be.
00:15:17.759 --> 00:15:23.679
No, no, let's do something let's do something simple, like IOTA and well, let's let's uh let's Iota in reverse, two of my favorite primitives.
00:15:23.759 --> 00:15:24.799
So let's see what happens.
00:15:25.360 --> 00:15:30.480
This looks I mean first X's, last X's.
00:15:31.120 --> 00:15:38.240
Yeah, that's the that's a good point, because Tiny Apple actually doesn't have they only have re reverse first, correct?
00:15:38.639 --> 00:15:41.919
Reverse first, so you have to do a rank rank one or something.
00:15:42.240 --> 00:15:56.159
But if we change it to look at that, look at that, lovely that uh and also too, a few people on the Wi Wa Discord said that my coloring of the primitives in Wiwa is cursed because I reversed the blue-green coloring scheme from Kai's site.
00:15:57.200 --> 00:16:09.360
I made an executive decision for a ray box that I prefer blue because in the ambivalent languages, you just have to color basically all functions and verbs one of the colors.
00:16:09.440 --> 00:16:11.039
You're not able to disambiguate.
00:16:11.200 --> 00:16:18.879
And therefore, I chose blue because I think blue is a little less electric, and so it just looks better as like the more common color.
00:16:19.120 --> 00:16:23.759
And I'm not gonna have Wiwa go against the other five languages.
00:16:23.840 --> 00:16:27.120
So unfortunately, it will be cursed for some of you.
00:16:27.279 --> 00:16:30.399
But yes, you can see the color changing on the Wi Wa ones, which is quite nice.
00:16:30.480 --> 00:16:35.440
But I think this is right, but like also there's so yeah, like as you mentioned, the reverse first versus reverse.
00:16:35.600 --> 00:16:40.480
Also, two technically, is this accurate if some of them are one indexed versus zero indexed?
00:16:40.559 --> 00:16:42.720
You know, you gotta put there's always these like nuance.
00:16:43.039 --> 00:16:44.000
Yeah, a lot of nuance.
00:16:45.279 --> 00:16:54.320
Do you give it a single element or a scale uh vector argument or a scalar argument or a multiple element vector argument?
00:16:55.120 --> 00:16:58.960
Then the definitions are completely different between APL and J, for example.
00:16:59.360 --> 00:17:00.720
Well, so here's here's a question.
00:17:01.039 --> 00:17:14.319
What would be your because there I just had an idea that if you could imagine under every single primitive, there were three columns, one for like rank one, one for all ranks, and one for nested.
00:17:14.480 --> 00:17:18.799
Is that the correct number of columns in order to capture and then you could you can have enough?
00:17:18.880 --> 00:17:28.559
You want like scalar on a scalar vector, higher uh maybe a scalar, vector, matrix, and nested, maybe not all of them are valid in every combination.
00:17:28.799 --> 00:17:46.319
But that's that's the point though, so that you'd have the columns, and so for the base one, that's the problem, is though, like you know, I don't actually know what tiny Apple does for if you give it like a two two character array, is that gonna do the I mean I guess we can check right now to that's what you've got the ray box for.
00:17:46.480 --> 00:17:48.400
All right, so it does it does have like the J behavior.
00:17:48.799 --> 00:17:49.519
It does the dialog thing.
00:17:49.680 --> 00:17:50.880
Or the dialogue thing, sorry.
00:17:51.039 --> 00:17:57.680
But that's the thing, is like when you have behavior that exists in a language that's not tiny apple, then how do you how do you communicate?
00:17:57.839 --> 00:18:06.559
You know, so it's it is very tricky, but you're saying that potentially it would be it would be four columns scalar, aka, so rank zero, rank one, rank two, and nested.
00:18:07.119 --> 00:18:13.839
Those are what I would do first, but that's but that and that's the thing, is as a begin and that's actually that's another thing.
00:18:13.920 --> 00:18:16.480
Maybe we should dedicate a whole episode to that at some point.
00:18:16.640 --> 00:18:27.359
I've had this kind of mental model on the back of my head that I'd love to give like or actually I would love someone else to give a talk on it, but yeah, the problem is is I I throw all these talk ideas out into the world and no one ever does them.
00:18:27.440 --> 00:18:28.960
So I just end up having to do them.
00:18:29.119 --> 00:18:37.599
But I have this mental model of like the the the like karate belt system of like array language programming skill level.
00:18:37.839 --> 00:18:40.160
And so I am definitely not a black belt.
00:18:40.240 --> 00:18:42.640
I'm not a triple black belt, I'm not a double black belt.
00:18:42.799 --> 00:18:44.640
I don't know actually what the colors are.
00:18:44.720 --> 00:18:45.599
I'm not white.
00:18:45.759 --> 00:18:50.480
I I know there's like purple and brown, so I'm somewhere, you know, probably halfway to black belt.
00:18:50.640 --> 00:18:53.680
Maybe if you want to be generous, you know, 70% or 75%.
00:18:54.240 --> 00:19:05.440
You are definitely at least a single, if not triple black belt in dialogue APL, but then even, you know, in BQN and a lot of these other languages, like you might not say that for We WAR, all the array languages.
00:19:05.680 --> 00:19:14.319
But this this is the reason I bring this up is that the this four column idea is definitely not like a white belt, it's not a white belt like teaching topic.
00:19:14.480 --> 00:19:30.240
And I feel like if you're gonna teach yourself online, which is what I did and a lot of folks do these days now, because there's a a cornucopia of resources across dialogs docs and BQN docs and wewa docs and the YouTube videos and a ray cast, you can get to like, I don't know what I like.
00:19:30.319 --> 00:19:31.279
We should actually bring it up.
00:19:31.440 --> 00:19:34.400
Well, uh, should we do should I do it on a different screen?
00:19:34.559 --> 00:19:35.039
What is it?
00:19:35.119 --> 00:19:38.559
The karate belt colors.
00:19:39.359 --> 00:19:40.160
All right, here we go.
00:19:40.400 --> 00:19:44.799
You want to choose in the interface what's your level, and then we'll do like do it simplified.
00:19:45.119 --> 00:19:45.359
Yeah.
00:19:45.599 --> 00:19:52.960
Well, I just like started doing a a simplified APL in you know the the APL challenge that we have running all the time.
00:19:53.200 --> 00:19:53.680
Uh yeah.
00:19:53.839 --> 00:19:57.359
So there we teach everything you need to know as you go along.
00:19:57.599 --> 00:20:00.079
But I've taken to simplifying the language.
00:20:00.240 --> 00:20:07.119
So I I never sh or very rarely, I think never actually, teach the monetic and dadic form of the same primitive.
00:20:07.279 --> 00:20:09.440
So it's sort of pretended to fix APL.
00:20:09.839 --> 00:20:10.079
Right?
00:20:10.160 --> 00:20:13.759
That there's only I just have to choose one of the two primitives in this round.
00:20:13.839 --> 00:20:15.759
In a different round, I could have something else.
00:20:16.000 --> 00:20:33.039
I I often avoid completely discussing operators, I just say they're special syntax or avoid them altogether, often avoiding nested arrays, definitely avoiding all sort of overloads of things and and the syntax is simplified and all of this to ease teaching.
00:20:33.200 --> 00:20:36.880
Then you can always learn the spases and warts and everything later.
00:20:37.119 --> 00:20:41.279
So that's basically that white belt, like the the the very first level you come in.
00:20:41.519 --> 00:20:47.519
Well, so I realized I only shared a single window, so you can't see this, but I'm showing a very, or if you go to the YouTube stream, you might be able to see it.
00:20:47.599 --> 00:20:52.640
Uh, but it's a white belt, yellow belt, orange belt, green belt, blue belt, purple belt, brown belt, red belt, and black belt.
00:20:52.720 --> 00:20:56.319
So I would I would say I'm a blue belt or a purple belt, I don't know, somewhere in there.
00:20:56.400 --> 00:21:01.920
But I there's still a bunch of stuff, like, and this is a uh a perfect example of one of those things.
00:21:02.079 --> 00:21:10.799
It's the I don't want to say perfect knowledge of scalar vector matrix nested, but like I my default is not thinking in that mode at all.
00:21:10.960 --> 00:21:18.640
Like I think primarily in like rank one when I use an outer product, sometimes rank two, or if the problem calls for it, you know, rank two.
00:21:18.960 --> 00:21:21.039
But like I'm rarely ever thinking in rank three.
00:21:21.119 --> 00:21:31.519
And I know like I've seen Marshall do some like triple outer products or double outer products where like he goes up to rank three or four, and that's just like that's just a tool in his tool belt that he does for some kind of problem.
00:21:31.599 --> 00:21:33.039
And I'm like, whoa, whoa, whoa, whoa, whoa.
00:21:33.119 --> 00:21:34.480
Like, what point do you get to learn that?
00:21:34.559 --> 00:21:44.079
Like, in what dungeon do I have to go to in order to pick up the like the brown belt or red belt skill of like a double outer product or a triple outer product?
00:21:44.240 --> 00:21:59.759
And I think it would be amazing if there was like a course that existed out there that literally used these, like it you don't need to use the karate belt colors, but that just has some kind of, you know, you progressively scale up, and you know, the white belt you're showing the one plus two or one, two, three plus four.
00:22:00.160 --> 00:22:01.440
Five, six, like all that stuff.
00:22:01.599 --> 00:22:08.480
But I think that like the purple belt, brown belt, red belt, and black belt topics, we don't touch those as much.
00:22:08.640 --> 00:22:19.039
And I would love to like have a series of array cast episodes where we talk about the like, you know, you have to go to some special dungeon to put some tool or skill in your tool belt.
00:22:19.200 --> 00:22:21.680
Because I I I don't actually know how to acquire those.
00:22:21.839 --> 00:22:28.640
Like I, you know, I arguably you could say that the tacit programming stuff is up there, but that's just because I haven't you can do simple tacit programming.
00:22:28.880 --> 00:22:32.079
You can do advanced, completely explicit programming too, I would say.
00:22:32.240 --> 00:22:41.680
But there is actually a video series that Richard and I did on the rank and the rank operator and dyadic transpose.
00:22:42.079 --> 00:22:47.759
Those are like the that pair, I call them the keys to the array kingdom.
00:22:48.240 --> 00:22:51.759
Because everything else is just specific manipulation.
00:22:51.839 --> 00:22:52.960
You're doing things.
00:22:53.440 --> 00:22:58.640
But dyadic transpose is what you need, generalized transpose, you want to call it that.
00:22:58.799 --> 00:23:08.160
You need that to put things into the right position so that you can chop your arrays using the rank operator in the way that you want.
00:23:08.400 --> 00:23:11.920
And then you need to manipulate things back again to where they came from.
00:23:12.720 --> 00:23:16.079
So we have this series of videos where we like build it up.
00:23:16.240 --> 00:23:23.119
And and I'm actually, I want to boast a little bit and and a shout out to a customer of ours that I that I help.
00:23:23.279 --> 00:23:25.759
Maybe I don't know if I should mention his name, so I'll not do that.
00:23:25.839 --> 00:23:32.240
But we have a customer that I help every um quite often with with various language-related things, usually, sometimes some technical things.
00:23:32.559 --> 00:23:38.400
And lately I've managed to get him to really use the rank operator like properly.
00:23:38.640 --> 00:23:45.599
So now he's wielding double ranks, you know, function, rank specification, rank specification to do things.
00:23:45.759 --> 00:23:48.480
And that's that's black belt rank usage.
00:23:48.720 --> 00:23:50.720
Uh see, this is what this is what we need to do.
00:23:50.799 --> 00:23:55.680
We need to de should we just abolish this episode of diving into repls and just to talk about this?
00:23:56.000 --> 00:23:57.359
We can come back to this another time.
00:23:57.519 --> 00:24:01.200
Yeah, we'll come well, we'll we'll we'll table this and start talking about repls and IDs like we agreed to.
00:24:01.279 --> 00:24:08.880
Uh, but we should have an episode where you know how they have those videos on YouTube where they classify like Pokemon as S tier, A tier, B tier, C tier?
00:24:09.039 --> 00:24:14.160
We should do the same thing, but like with these, uh I'll I'll build a little app and we can drag and drop.
00:24:14.319 --> 00:24:19.920
And the thing is, is the usage of these primitives like fall into different categories, right?
00:24:20.000 --> 00:24:26.960
Like what you're saying here, like double rank, you know, like that's a black belt skill, but like just using rank itself is probably not black belt.
00:24:27.039 --> 00:24:28.960
It's it's probably not white belt, but it's somewhere in between.
00:24:29.039 --> 00:24:39.599
And so that's the thing, is you know, that there's you can you can learn a uh an operator or a function in its like canonical, like the way it's used most of the times.
00:24:39.680 --> 00:24:50.160
But then like if for instance, like the not equal scan, you know, like that is a use of the scan operator that like is above the just like learning scan.
00:24:50.319 --> 00:25:06.000
And so I think it would be like fantastic if we could go through a bunch of primitives and like the different uses of the primitives, create some little like tiered thing, and then over time create episodes like, all right, we're gonna do a black belt episode today on double rank, or you know, a red belt episode today on on some other topic.
00:25:06.160 --> 00:25:32.960
I think that would be fantastic because I I I I'm not that I'm uh what do you call it, uh a barometer for our listeners, but I know I would love to have a bunch of brown, red, and black belt episodes talking talking about these advanced topics the same way that we're gonna have like the primitive talk episodes, but the usage of this stuff there should be like a color mode on Apple Cart where like it colors the entries in Apple cart, but the the built color of using this expression, this function.
00:25:33.039 --> 00:25:34.480
It's like this is advanced.
00:25:35.359 --> 00:25:37.039
It's funny you mentioned the dungeon thing.
00:25:37.119 --> 00:25:41.440
Did I ever tell you about I think it was called uh Runemaster?
00:25:41.680 --> 00:25:42.880
Ever told you about that?
00:25:43.519 --> 00:25:50.720
Yes, I it has come up on the podcast, and I also stumbled into it at one point during my APL deep diving.
00:25:50.880 --> 00:25:53.440
It's it's a little like game online that you can play, right?
00:25:53.680 --> 00:25:55.039
Yeah, dungeon crawler game.
00:25:55.119 --> 00:25:55.440
Yeah, yeah.
00:25:55.599 --> 00:25:56.480
And it's not done yet.
00:25:56.559 --> 00:26:01.279
It's I'm stuck in some technicalities of JavaScript that it's written in.
00:26:01.440 --> 00:26:05.039
These days I should probably just start over and by code the whole thing.
00:26:05.359 --> 00:26:09.279
But that basically is that kind of feeling is what I wanted, right?
00:26:09.359 --> 00:26:14.480
Where you you you're fenced in by the level that you're at.
00:26:14.559 --> 00:26:23.519
And as you acquire skills you're acqu that you can show through trials in this dungeon, that you you know how to wield these these runes, right?
00:26:23.680 --> 00:26:31.759
The field glyphs, then that opens doors to you to access other problems in the in the dungeon that requires those kind of skills.
00:26:32.000 --> 00:26:32.400
Oh yeah.
00:26:32.480 --> 00:26:34.000
I mean, there's a ton of great ideas here.
00:26:34.079 --> 00:26:39.519
Like I don't I'm not a huge video game person, but I know that like skill trees are like a big thing.
00:26:39.599 --> 00:26:44.480
Like there's uh what's that really popular video game where it's like shadow something?
00:26:44.640 --> 00:26:52.160
Anyways, I know people that have played it like 10 times in a row because it's got so much like replayability, no one game of the year, and it's it's like a I don't know, 2D.
00:26:52.240 --> 00:27:03.279
Anyway, someone someone you need to acquire the monetic application to go to dadic rank application, then you need dadic rank application to progress to multi-rank application.
00:27:03.680 --> 00:27:19.279
But I I would go if you had one of those with like a skill tree, I would go down the tacit route as quickly as possible because there's nothing that irritates me more is when I'm doing an APL challenge and they're like, no, no, no, you can't use you gotta wear it where you're missing the braces, and I'm like, I don't need frankly, I don't need the braces.
00:27:19.759 --> 00:27:21.839
Yeah, these are not do that in the APL challenge.
00:27:22.000 --> 00:27:25.119
Once you progress to answering with a function, you can do anything you want.
00:27:25.279 --> 00:27:25.759
Right, yeah.
00:27:25.920 --> 00:27:33.200
It's only the early early days we had to do it exactly the way we we tell you to do it because otherwise you don't acquire those skills to progress.
00:27:33.680 --> 00:27:34.079
Yeah.
00:27:34.319 --> 00:27:36.480
But this is I'm glad we had this little mini episode.
00:27:36.559 --> 00:27:41.039
It turned into kind of a uh less of a mini and more of a medium episode within an episode.
00:27:41.200 --> 00:27:42.960
We will uh maybe that's what we'll do next.
00:27:43.039 --> 00:27:48.240
We'll do our primitive and primitive usage classification and then we'll we'll set up a bunch of topics.
00:27:48.400 --> 00:27:52.319
Max in the chat, or meme god, I should say, says, which belt would code funds be?
00:27:52.559 --> 00:27:53.599
Probably black.
00:27:53.920 --> 00:27:56.720
I mean the question is, what is what does code funds mean?
00:27:56.880 --> 00:28:02.880
You can read and understand the code funds, you know, project, or you can- That's very different from just uh compiling your code usage.
00:28:03.200 --> 00:28:03.839
Exactly, exactly.
00:28:04.079 --> 00:28:10.640
It's probably well, I but that's the thing, is it's not even an APL, you know, thing to get codifunds compiling.
00:28:10.720 --> 00:28:12.880
It's uh it's just like a build system.
00:28:13.359 --> 00:28:14.640
Yeah, that's that's not it.
00:28:14.880 --> 00:28:17.200
But reading it, I mean, uh I should say a different way.
00:28:17.279 --> 00:28:20.319
And and code funds isn't as tacit as it used to be.
00:28:20.480 --> 00:28:21.680
It's not very tacit anymore.
00:28:21.759 --> 00:28:28.640
The the code base, there was a time when it was very tacit, but I think there's a whole different thing, there's a different dimension on that entirely than the notation.
00:28:28.720 --> 00:28:32.319
So one is your style, you're writing explicit, writing tacit.
00:28:32.559 --> 00:29:04.400
Another thing is that that dream that Aaron Sue has that people will use their array languages for uh those kind of problems where they that people haven't even dreamt of being able to apply them, and and having benefits of simplicity, of of conciseness in doing things that people have otherwise made very verbose by using array languages, using techniques that people didn't even imagine you could do.
00:29:04.640 --> 00:29:09.839
So the the point of uh of uh codifens, I think actually we're supposed to say cod fins these days.
00:29:12.000 --> 00:29:20.319
Yeah, it's yeah as in like the fins on a codfish on a cod cod fins because it's not defense anymore because it can do transfens too.
00:29:20.720 --> 00:29:34.400
So anyway, uh the you could you could misunderstand uh codifens as being uh Aaron just wants to show off his his tacit skills, which he doesn't really do anymore, or his coding skills.
00:29:34.640 --> 00:29:47.119
But really, what Aaron wants to show is that it is possible to compile, even difficult to compile uh programming languages as a sort of single pass parallel uh thing.
00:29:48.079 --> 00:29:54.160
Normally we you you go through code in a sort of linear fashion, and he wants to show that you don't have to do that.
00:29:54.240 --> 00:30:04.079
You can take an array-based approach of the whole bag of potatoes rather than one potato, two potatoes, to compiling a language, a language that requires context, like APL.
00:30:04.559 --> 00:30:06.960
That's that's really what he wants to show.
00:30:07.119 --> 00:30:18.079
And then there are some other things that you could do in the same sort of style, and and his uh apprentice, Brandon, uh, has tried to do something similar with parsing YAML using APL.
00:30:18.799 --> 00:30:34.640
So definitely a black belt thing is being able to take a subject that is not traditionally considered an array approachable subject, and applying successfully, of course, the array approach to it.
00:30:35.279 --> 00:30:40.079
And notice this is a completely different dimension than the notation itself.
00:30:40.400 --> 00:30:40.960
Yeah, yeah.
00:30:41.039 --> 00:30:42.720
There's a I mean, there could be a whole world.
00:30:42.799 --> 00:30:48.319
We'd start with the primitive black belt arena, and and then there's the there's like probably functions.
00:30:50.799 --> 00:30:52.799
Yeah, and yeah, array structures.
00:30:52.880 --> 00:30:59.759
I there's also how do you structure your data so that it's amenable to good application of the tools you've got in your array toolbox.
00:31:00.319 --> 00:31:02.720
That's that's also outside of the language itself.
00:31:02.880 --> 00:31:03.200
Yeah.
00:31:03.359 --> 00:31:04.559
And you can get better at that.
00:31:04.640 --> 00:31:07.039
There are all kinds of optimization techniques, right?
00:31:07.200 --> 00:31:14.480
Never mind the primitives themselves, but like how do you run things fast by being sympathetic to the machine that you're running on?
00:31:14.640 --> 00:31:25.039
Like be having a mental model of the memory layout of your data and the internal representation of the data allows you to predict what the performance is going to be like.
00:31:25.359 --> 00:31:25.680
Right.
00:31:25.920 --> 00:31:29.599
And that's like you can also get better belts in that subject.
00:31:29.759 --> 00:31:33.200
I mean, there are all kinds of techniques that you could get belts in.
00:31:33.279 --> 00:31:37.440
So, and and really everything to do with computing, you could involve in this.
00:31:37.519 --> 00:31:39.039
But that's this is a way of tangent.
00:31:39.200 --> 00:31:39.440
Yeah, yeah.
00:31:39.599 --> 00:31:41.599
All right, so we will listener.
00:31:41.759 --> 00:31:49.519
Look forward to a future episode where we, you know, S tier or karate belt rank primitives, and we'll start there and then we'll see where we get to.
00:31:49.680 --> 00:31:51.920
I'm gonna close the karate belt.
00:31:52.000 --> 00:31:54.079
I'm gonna stop uh sharing my screen.
00:31:54.480 --> 00:32:03.759
By the way, kinda, do you know that the Apple card is loosely ordered by uh belt on the on the entries?
00:32:04.160 --> 00:32:04.960
I had no idea.
00:32:05.039 --> 00:32:09.599
No, I thought I I don't think I've ever thought because I mean this is aesthetic ordering, right?
00:32:09.680 --> 00:32:13.039
It never you might think that it's like sorting things somehow, but it's not.
00:32:13.200 --> 00:32:15.279
It doesn't sort by relevance or anything like that.
00:32:15.359 --> 00:32:16.319
There's no smart features.
00:32:16.400 --> 00:32:25.440
There's literally a table of entries, and it literally just does a search for all your search to search space separated search terms, unless you use slashes for regex, whatever.
00:32:25.680 --> 00:32:29.359
And then it just filters away rows that are not matching.
00:32:29.599 --> 00:32:30.559
That's how it works.
00:32:30.720 --> 00:32:41.920
So the ordering that you get, individual things, if you get the two same lines in two different queries, they will always be in the same order, namely the original order in the table, the grand table of everything that Apple card contains.
00:32:42.079 --> 00:32:56.559
And that table is ordered loosely by difficulty or in inverse simplicity, which is why if you look at the entire table, the first thing it has is just zilda, the the constant empty numeric vector.
00:32:56.640 --> 00:32:58.720
That's like the simplest thing you could possibly have.
00:32:58.960 --> 00:33:04.559
And then it goes to monetic right tech, which is just a monetic identity function, and it's uses.
00:33:04.640 --> 00:33:13.200
And then it does the left tech, which is also an identity function, but the one that's slightly more complicated because it does a funny thing about the right side becomes the left side, that kind of thing.
00:33:13.279 --> 00:33:19.920
And then it goes to plus, which is like the simplest arithmetic function, and then minus and then times, and so on.
00:33:20.319 --> 00:33:29.599
I think for our for our the cut like the the tricky part there is that uh it sounds like they're contained both definitions in the glyph.
00:33:29.759 --> 00:33:39.920
Where I would say for our for our ranking operation or ranking execution, you want to split it to like because for me, you know, like I would say that well, what is the simplest?
00:33:40.000 --> 00:33:45.359
It's all it's all philosophical, but you know, for me, like iota is like the very first thing I ever typed into try APL.
00:33:45.440 --> 00:33:53.599
So I consider iota like you know what a sequence of numbers, you learn how to do that like very quickly, but diadic iota, you know, oh that's a different thing.
00:33:54.079 --> 00:33:56.000
You know, yes, it's the same primitive, but that is an offense.
00:33:58.400 --> 00:33:59.759
That's also not so obvious.
00:34:00.079 --> 00:34:00.400
Right.
00:34:00.559 --> 00:34:03.200
Oh, and do you even know I was gonna say, let me know.
00:34:05.200 --> 00:34:05.759
Do you know?
00:34:06.000 --> 00:34:06.400
Sorry?
00:34:06.640 --> 00:34:08.719
What is iota iota zero?
00:34:09.119 --> 00:34:10.000
Iota zero.
00:34:10.239 --> 00:34:10.880
Nothing?
00:34:11.119 --> 00:34:12.559
Well, it can be nothing.
00:34:12.800 --> 00:34:14.639
It has to be something, right?
00:34:15.039 --> 00:34:22.719
I mean I just did it in uh in in Tiny Apple, which I'm not sharing anymore.
00:34:22.960 --> 00:34:29.599
It's an enclosed, empty, it's got you know the the the angle brackets, and then it's enclosed in a box.
00:34:30.159 --> 00:34:31.039
Try APL.
00:34:31.360 --> 00:34:35.440
It's the same thing, it's just formatted differently because it's nothing for the inner thing.
00:34:35.519 --> 00:34:38.239
And that's that's kind of what I meant by nothing.
00:34:39.039 --> 00:34:41.440
Well, it's something which contains nothing.
00:34:41.679 --> 00:34:43.440
Yeah, but those kind of things, right?
00:34:43.679 --> 00:34:50.639
A primitive that might be superficially simple, but can but explaining why this is the result you get is not maybe not so obvious.
00:34:50.880 --> 00:34:56.639
So anyway, there's a question in the chat also can you reverse the sort you reverse sort the the Apple card results?
00:34:56.800 --> 00:35:04.639
No, not in the not in the web interface, but yeah, you can you can extract things yourself, but you can also just you know scroll to the bottom if you want to read it in reverse.
00:35:05.119 --> 00:35:07.360
So why would you want to do that?
00:35:07.440 --> 00:35:09.280
You want the most complicated thing first?
00:35:09.599 --> 00:35:12.239
It's yeah, Max is trying to do things on uh hard mode.
00:35:12.400 --> 00:35:13.519
Anyways, we we definitely should.
00:35:13.599 --> 00:35:17.119
I have a hard stop at uh 11:30, which is in 42 minutes.
00:35:17.360 --> 00:35:21.920
So we definitely uh should well before we get to the halfway mark, switch to our subject.
00:35:22.079 --> 00:35:23.599
Yeah, yeah, switch to our topic for today.
00:35:23.679 --> 00:35:27.760
I mean, tech like I said, technically, we were inside a REPL array box.
00:35:27.920 --> 00:35:31.760
Oh, we were so we weren't entirely off topic, we just took a couple tangents.
00:35:32.000 --> 00:35:33.760
So today, yeah, we're talking about.
00:35:33.840 --> 00:35:41.599
I mean, we I think Adam, you were the one that had this idea because I had announced as an announcement on one of the previous array cast episodes.
00:35:41.679 --> 00:35:44.320
It might have been the first one where we came back.
00:35:44.480 --> 00:36:02.320
I I had this YouTube video ranking repls where I was on a number of criteria saying, you know, TriAPL is better than, you know, or I guess I didn't say that, but you know, WeWAPAD is better than Tri-APL is better than, you know, the cap REPL based on these criteria.
00:36:02.639 --> 00:36:16.079
And then you said, Adam, I would love to do an episode where we just deep dive on the different REPLs and we just share our thoughts on like what's good, what's bad, you know, or what's missing that we wish was there.
00:36:16.239 --> 00:36:22.960
And and also, too, this is a way to like demo and show folks maybe some features that they're not aware of.
00:36:23.119 --> 00:36:26.960
I might not even be aware of them because you know I I spend most of my time now in ArrayBox.
00:36:27.119 --> 00:36:30.400
And before then, I spent most of my time on the online REPLs.
00:36:30.559 --> 00:36:39.920
Every once in a while I would open Ride for dialogue, and I would always have CAP because the CAP GUI is so much better than the online REPL.
00:36:40.239 --> 00:36:48.719
But it that's the thing, is if the online REPL is good enough, I tend to not want to go to like an application because I'm usually programming in the small when it comes to this stuff.
00:36:48.800 --> 00:36:54.320
I'm not building, I'm not launching a workspace with you know 50 different or 100 different functions and state.
00:36:54.480 --> 00:37:00.719
I'm solving small problems, if not small to medium problems that can be done in an online REPL.
00:37:01.039 --> 00:37:04.719
Anyway, so I'm not sure if you want to share your screen and where we want to start.
00:37:05.199 --> 00:37:06.079
I can share my screen.
00:37:06.159 --> 00:37:08.480
You might get a bit like overwhelmed by my screen.
00:37:08.559 --> 00:37:13.119
I I tried arranging the windows on my screen and uh completely failed at doing so.
00:37:13.280 --> 00:37:15.119
So so we'll we'll see what happens here.
00:37:15.199 --> 00:37:23.199
And I'm not even doing all of them, so I'm just doing like a little subset that I well this might this might end up being part one, or uh some of them might we get dropped on the floor.
00:37:24.159 --> 00:37:24.719
We'll see.
00:37:25.039 --> 00:37:28.719
So so what do you what do you say to this?
00:37:29.039 --> 00:37:35.679
So okay, so just I mean we're just getting through what I've got on my screen, which is just some repls, right?
00:37:35.840 --> 00:37:37.199
This is dialogue ride.
00:37:37.519 --> 00:37:44.639
That's the that's the um uh remote and also non-Windows REPL that we have.
00:37:44.800 --> 00:37:48.159
There's one that I haven't put up here, which I guess I should.
00:37:48.480 --> 00:37:55.119
And for for the audio listener, we're looking at one, two, three, four, five, six, seven different windows, or at least that I can count.
00:37:55.519 --> 00:37:58.079
Yeah, I'll bring up the next one in a moment.
00:37:58.320 --> 00:38:02.079
Um over here is that's the Windows dialogue REPL.
00:38:02.480 --> 00:38:08.320
This is the NARS 2000 REPL, or or I mean session, whatever you want to call it, IDE.
00:38:08.880 --> 00:38:10.880
This is triapil down here.
00:38:11.039 --> 00:38:14.159
This is the JEQT going on here.
00:38:14.239 --> 00:38:20.719
This is the online trignu APL, which this actually has two sections, two different ways to run that over there.
00:38:20.960 --> 00:38:28.880
And this is the APL64, which is the new APL Plus, and then with tiny little font size, I'll try to make that bigger in a moment.
00:38:29.119 --> 00:38:36.480
This is the dialogue terminal interface, so it's like it's a text-based thing that they can run as well.
00:38:36.639 --> 00:38:37.679
Look at that here.
00:38:37.920 --> 00:38:55.360
Yeah, they they all work, they all have their upsides and their downsides, and they have their their fans and their detractors, and and then what we don't have here is BQN, Tiny APL, Wii Wire, and we've got nothing QK related at all.
00:38:55.599 --> 00:39:01.519
There's right, there are so many array languages these days that we haven't even touched on.
00:39:01.599 --> 00:39:07.039
There's Nell and yeah, there are many, many.
00:39:07.440 --> 00:39:16.800
And and some of them have online REPLs, some of them have offline ones, some of them can only or and and we say I say REPL here loosely for like everything.
00:39:17.119 --> 00:39:37.280
I I use the word REPL about some of these things, but often the strict meaning of REPL is just what you basically got in a command line interface on your OS, like where you you input the line of text, possibly like multiple lines because it's reps, and then you press enter and you get a result back, and you can do that again.
00:39:37.360 --> 00:39:41.199
You might have some fancy features like recalling previous statements, things like that, but that's basically it.
00:39:41.360 --> 00:39:42.159
So very simple.
00:39:42.400 --> 00:39:48.079
But then there is also the possibility of more interactive user interface elements.
00:39:48.239 --> 00:39:52.320
So even this that runs in the in the terminal, I can I can open.
00:39:52.480 --> 00:39:57.760
See, we've got a status bar that shows various things here, and and I can open a window.
00:39:57.920 --> 00:39:59.360
So it's got a windowing interface.
00:39:59.519 --> 00:40:03.360
Dialogue's terminal thing does not have mouse support.
00:40:03.760 --> 00:40:09.199
So um you have to do everything with the keyboard shortcuts that you have to memorize.
00:40:09.920 --> 00:40:15.679
But it's definitely it definitely can do things, it can open things, you can do full tracing and things like that.
00:40:15.840 --> 00:40:17.840
So uh, but everything text-based.
00:40:18.000 --> 00:40:21.840
And and the other ones have the same features basically, but plus more.
00:40:22.239 --> 00:40:29.519
Try APL is very limited, it's still not just a REPL, it's sort of have a REPL bar where you can enter things to make it more familiar to some people.
00:40:29.760 --> 00:40:46.559
But the normal thing for APLs and APL family languages is to have a what we call a session, which is sort of like a log, like what scrolls up like in your in a OS command line, but you can go up to the previous statements and interact with them.
00:40:46.960 --> 00:40:59.519
That hasn't always been an APL because APL started back when there was typewriter terminals on paper, and but you were able to recall previous statements and then edit them, so that did exist.
00:40:59.760 --> 00:41:06.320
And then as soon as it became screens, people started taking advantage of that, drawing, editing windows and so on.
00:41:06.400 --> 00:41:14.239
So so IDEs and with windows and trace windows and so and all that stuff has always been there in in APL land.
00:41:14.559 --> 00:41:28.400
And even back when it wasn't, even if it was just typewriter, you could still suspend in the middle of execution, like due to an error or or even an explicit stop that you said stop bit, and then you could change your functions that are on the stack and then continue.
00:41:28.559 --> 00:41:30.719
So this interactivity has very much been there.
00:41:31.039 --> 00:41:36.239
And uh the development of that has been in parallel to what the rest of the world went with.
00:41:36.480 --> 00:41:45.840
I don't think there were any uh early IDEs that had the sort of interactivities that the APL had even back in the in the typewriter days.
00:41:46.159 --> 00:41:56.800
It's and then the way that APLs work, especially like core APL and APL dialects, is then become very different from how our other program writers work.
00:41:56.880 --> 00:42:06.320
A lot of people that come to APL, they go like, oh right, I edit my text files and then I run it, and if it I look at the error message, and then I change my code and I start over again.
00:42:06.480 --> 00:42:08.079
But that's not how APLs work.
00:42:08.239 --> 00:42:13.440
They will often do a single run of their function that's a typical work day.
00:42:13.519 --> 00:42:18.239
They've got some some top-level function, and they'll run that once at the beginning of the day.
00:42:18.480 --> 00:42:32.239
And then they just have that stack and they they they go in and out of various levels of subfunctions that they're calling the whole day, and and they get they hit errors and they edit the edit the functions and fix the problems and continue execution.
00:42:32.400 --> 00:42:35.599
Only at the end of the day they could shut down the system.
00:42:35.840 --> 00:42:40.159
That's very different than people that start over and over and over and over every time there's an error.
00:42:40.559 --> 00:42:48.320
So we've got facilities to inspect what's going on on the stack, and and there's super tight, especially in APL.
00:42:48.400 --> 00:42:58.880
I think of all the array languages, the one that has the most of this, and it's not just I like it, all the APLs have super tight integration between the language and the development environment.
00:42:59.039 --> 00:43:02.400
So it's like really an underscore on the I and IDE.
00:43:02.559 --> 00:43:09.599
Other languages might have something they call an IDE, integrated development environment, but but it's so integrated that you cannot separate them.
00:43:09.760 --> 00:43:23.280
You can the people have been talking about, oh, we should make have like a language engine where other tools can like call into an APL executor core that then uh crunches the data and sends the results back.
00:43:24.000 --> 00:43:32.880
But you cannot cut with a knife the language, the array crunching parts away from the IDE parts.
00:43:33.119 --> 00:43:44.239
They are sort of intricately connected in dialogue and think and also other APLs, commercial APLs, they do have special interpreters that are runtime interpreters for actual delivery of end user applications.
00:43:44.559 --> 00:43:53.840
And those you can't access necessarily the the IDE parts, although although they might actually be there hidden inside, just sort of prohibited.
00:43:55.519 --> 00:43:59.199
But other than that, they it's very much the same thing.
00:43:59.280 --> 00:44:03.679
You can't really You you can't really separate and just give you an example of that.
00:44:03.760 --> 00:44:06.480
So let's say I want to open an edit window.
00:44:06.719 --> 00:44:12.239
So in many languages and IDs and so on, you might use menu bars, and in some APL IDs, you can do that as well.
00:44:12.320 --> 00:44:17.280
You go up and like, okay, create a new module function, whatever it might be, and then it creates that.
00:44:17.440 --> 00:44:21.519
But you can also always do it with a function or command.
00:44:21.679 --> 00:44:25.119
So I want to create a function foo, and it opens up here.
00:44:25.280 --> 00:44:30.320
Now, syntactically speaking, this is a function and this is an array.
00:44:30.480 --> 00:44:40.559
I just applied a function to an array and it had a side effect of opening up an editor that I can that I can then use to manipulate the function foo that doesn't quite exist yet.
00:44:41.199 --> 00:44:52.000
But because this is just a normal APL function, this is just a normal APL array, if I insert the reverse glyph here, I'm now editing oof instead.
00:44:52.719 --> 00:44:54.239
This is just normal APL.
00:44:54.480 --> 00:45:01.920
And if I insert an each over here, then I'll be editing F and O, and they are they're all here.
00:45:02.559 --> 00:45:06.719
You can't necessarily see that they're all here, but if I go we've got window.
00:45:07.440 --> 00:45:09.519
So we can see here, it might be a little smaller.
00:45:09.599 --> 00:45:13.679
We can see the editor currently has open foo and oof and o and f.
00:45:13.760 --> 00:45:18.880
We actually tried opening O twice, but this it knows that it's the same thing, so it opened it only once.
00:45:19.119 --> 00:45:20.800
These are this is just APL code.
00:45:21.039 --> 00:45:23.760
I can take this and I can embed that into my normal code.
00:45:24.079 --> 00:45:30.000
So this sort of breaks the whole mold you have of what even is an IDE.
00:45:30.480 --> 00:45:31.760
Is this just the language?
00:45:31.920 --> 00:45:36.159
And the language has in self-editing features.
00:45:37.280 --> 00:45:41.280
Well, I guess the well is it the more important question is is is does it matter?
00:45:41.440 --> 00:45:45.519
I mean, I don't actually spend a ton of time thinking about REPL versus IDE.
00:45:45.599 --> 00:45:50.159
I went and asked Gemini, is there an umbrella term for REPL and IDE?
00:45:50.480 --> 00:45:55.039
And it gave a really long explanation, but the summary is the summary is no.
00:45:55.679 --> 00:45:56.639
There's not a word.
00:45:56.800 --> 00:46:00.320
It it it's suggested programming environment, but let's be honest.
00:46:00.480 --> 00:46:07.599
On here on the array cast, we're not about to introduce something into the the wider vernacular at large, and it's not going to get picked up.
00:46:07.760 --> 00:46:10.719
So I think we are just stuck calling them REPLs and IDEs.
00:46:10.800 --> 00:46:26.639
But I mean it it begs, I was thinking while you were explaining all this, like what do you call you know, we want typically when I see folks doing WiWAP programming and they're not in the WiWAMP, you know, Kai uses I think it's VS Code, which is a code editor in my mind, but it uses a plugin.
00:46:26.960 --> 00:46:28.719
So like what is a code editor plus a plugin?
00:46:28.960 --> 00:46:30.079
Does that equal yeah?
00:46:30.239 --> 00:46:31.840
Does that equal an an IDE?
00:46:32.000 --> 00:46:33.440
Because it's it's clearly not a replica.
00:46:33.599 --> 00:46:37.599
Yeah, VS Code, it can it can take it can take advantage of language engines.
00:46:37.679 --> 00:46:47.360
So it can have like okay, VS Code itself doesn't really know about the programming language, but you have a plugin, and the plugin contacts some other thing that's outside that doesn't know about the language and can query things.
00:46:47.519 --> 00:46:55.119
And and sometimes I say like that ride, which is used to at least stand for remote IDE, is not an IDE at all.
00:46:55.360 --> 00:47:13.360
I like to say that it's pretty dumb, it's just it's just an HTM renderer, because in fact, behind this remote IDE is actually another, a real IDE, either one of these, the command line ones, or or one of these, the the Windows one, where the interpreter itself has has the graphic facilities.
00:47:13.599 --> 00:47:33.840
So if I type something here, you might think, oh right, it looks like it's the whole integrated thing, but I believe with a little bit of cleverness, you can't actually see what I'm doing here, but and I'm clicking in my in my task bar, and I think I will be able to find the window behind it.
00:47:34.000 --> 00:47:34.559
There you go.
00:47:34.719 --> 00:47:39.599
So what's going on here is actually I did not type this IOTA 2.3.
00:47:39.840 --> 00:47:41.199
I can make this a little bit bigger.
00:47:41.599 --> 00:47:42.239
You can see it.
00:47:42.480 --> 00:47:45.760
But anything I type over here happens over here.
00:47:45.920 --> 00:47:53.440
So what's actually happening here is that is that this IDE, this language engine, which is the same thing, is in charge completely.
00:47:53.920 --> 00:48:01.119
And this ride here is just a front end that renders a user interface for this language engine.
00:48:01.199 --> 00:48:05.599
So this is a whole different concept of IDE than again something else here.
00:48:06.480 --> 00:48:09.360
The the thing like VS Code, as you say, is a code editor.
00:48:09.679 --> 00:48:19.280
When I open something up here and I edit that, it might look like the source is actually here in ride in this window, but it's not.
00:48:19.519 --> 00:48:26.559
All that happens here is that ride sends this information back to the interpreter that lives over here and it kept keeps track of the source code.
00:48:26.719 --> 00:48:30.559
Source code lives inside here, it has loaded in here, and ride has no idea.
00:48:30.639 --> 00:48:37.840
Now that there are no windows that are open, ride does not even know that foo exists or has a specific definition or anything.
00:48:38.000 --> 00:48:39.519
Everything lives over here.
00:48:39.679 --> 00:48:41.280
So what is ride even?
00:48:42.000 --> 00:49:02.480
Yeah, I think it's I think it's a fool's errand in 2026 to try and uh taxonomize this stuff because it's just we used to live in a world that was simpler, and now in between REPLs and IDEs and code editors and plugins and language engines or language servers, it's it's like honestly, there should be a new term.
00:49:02.559 --> 00:49:06.880
Like uh Gemini's suggestion programming environment, it seems like a decent one, right?
00:49:06.960 --> 00:49:12.480
It's just an environment which you're programming and I don't think that it's something you have to invent the new term for.
00:49:12.559 --> 00:49:16.880
Yes, a programming environment, even if it isn't a technical term, that it everybody will understand.
00:49:16.960 --> 00:49:18.800
That's an environment where you can do the programming.
00:49:19.199 --> 00:49:46.800
Whether the actual code execution happens there in that environment, like it does in the Windows IDE here, or it does in the TGY version we have, or it does in any of the online repls that are running like WASM or a or a JavaScript implementation of the programming language, or whether the actual execution happens somewhere else in a language engine, or whether it's just a front end that's a graphical rendering, but the whole logic of which windows are open and so on is actually somewhere else.
00:49:46.880 --> 00:49:48.000
That doesn't really matter, right?
00:49:48.239 --> 00:49:48.480
Right.
00:49:48.719 --> 00:49:52.719
It really doesn't, unless you lose your internet connection, in which case it doesn't matter.
00:49:54.239 --> 00:50:01.360
But yeah, so so I think with that out of the way, just that just this is just the introduction, basically, so we know what are we even talking about.
00:50:01.519 --> 00:50:19.280
So we're talking about programming environments where you have some sort of text field, either single line or multi-line, where you can enter some array language code, and ideally there's some additional features that makes your life nicer, right?
00:50:19.519 --> 00:50:27.360
And the very bare minimum being able to recall at previous entered expressions and edit uh expressions.
00:50:27.760 --> 00:50:35.679
And it wasn't always like that, you know, in back in the in the typewriter terminal days on paper, you type a letter, that letter basically stays there forever.
00:50:35.840 --> 00:50:39.039
You can't, there's no back backspace did that.
00:50:39.119 --> 00:50:43.599
It went back, moved the cursor backwards, but it didn't remove the letter that you just typed.
00:50:43.840 --> 00:50:50.239
And uh there's a little bit of like as a fun thing, there's a little bit of a remnant of that still in in dialogue.
00:50:50.480 --> 00:51:00.000
So if if I type, say a circle, um, and so in and I go back to the circle and I type a vertical bar, I get the reverse symbol.
00:51:00.239 --> 00:51:06.159
The point is like the circle doesn't go away, it doesn't get overwritten by um by the new character.
00:51:06.400 --> 00:51:07.039
It's actually false.
00:51:07.119 --> 00:51:09.280
It says down here in the corner, it's in the replace mode, right?
00:51:09.360 --> 00:51:11.599
I can I can switch that between insert mode and replace mode.
00:51:11.679 --> 00:51:15.280
It's not if replace mode, it's over type mode, over strike mode.
00:51:15.519 --> 00:51:18.000
And and dialogue has a little remnant of that left.
00:51:18.079 --> 00:51:20.880
I'm not sure if other APLs have any remnant of that left.
00:51:21.119 --> 00:51:23.199
It used to be even more in the really old days.
00:51:23.360 --> 00:51:31.440
It used to be that like let's say you typed an L and it was a mistake and you wanted to type an E, then you could actually type an E or an F even on top.
00:51:31.519 --> 00:51:34.719
So like you imagine you type an F on top of an L, it becomes an E, right?
00:51:34.800 --> 00:51:38.320
Because you get top and the middle bars and the bottom bar, things like that.
00:51:38.480 --> 00:51:41.039
Uh, you could do if it looks right, then it would be right.
00:51:41.119 --> 00:51:42.960
It would do all the math for that.
00:51:43.119 --> 00:51:53.199
So even if non-APL symbols, you like type an S and then type a vertical bar on top, and you get a dollar sign, even though that's not syntactically valid APL, but hey, it looks like a dollar sign, better be.
00:51:53.840 --> 00:52:03.199
So so then from there, we build up more and more features and hand holding and niceties and helps and so on.
00:52:03.280 --> 00:52:17.199
You've got syntax coloring in some of them, uh, we've got autocomplete uh in uh in some of them, multi-line entry of of things depending on whether the language supports that kind of thing.
00:52:17.360 --> 00:52:23.440
Um language bars, as you can see, that helps you to enter the the Unicode glyphs.
00:52:23.920 --> 00:52:43.760
And yeah, that keyboard shortcuts for doing various actions, even macros, you can set your own keyboard shortcuts to do things, output formats like we've already seen when you do uh an IO2 2.3, not this right, it's just following along over here, just mirroring everything.
00:52:43.840 --> 00:52:44.960
It's the same thing.
00:52:45.039 --> 00:52:47.199
But there's different ways that we could show this, right?
00:52:47.280 --> 00:52:48.320
So we got facilities.
00:52:48.400 --> 00:52:58.159
So in the early days, we would have like functions that would draw arrays in certain ways, and then it became built-in and it just showed an example of a user command.
00:52:58.559 --> 00:52:59.760
Well, actually, let's pause here.
00:53:00.159 --> 00:53:06.400
So this is the default in I believe cap and tiny Apple.
00:53:06.480 --> 00:53:09.920
I could be wrong about that, but uh, I'm almost positive it's the default in cap.
00:53:10.559 --> 00:53:22.559
What's the I didn't actually know this was configurable, and I just thought this was like artistic choices, and it kind of confused me because when you use this Mac style, if you just do IOTA 5, it boxes it with some arrows.
00:53:22.800 --> 00:53:27.679
And I've always noticed that they have like depending on the implementation, there's like different symbols.
00:53:27.760 --> 00:53:30.000
Sometimes you get the little enclosed torch shoe.
00:53:30.079 --> 00:53:31.840
I'm seeing the tilde at the bottom here.
00:53:32.000 --> 00:53:33.119
Sometimes they got arrows.
00:53:33.519 --> 00:53:35.119
What the heck's all this stuff?
00:53:35.280 --> 00:53:36.239
I mean, what are we talking about here?
00:53:36.559 --> 00:53:42.800
There is documentation for this, but I can just briefly say this is a very old function in the APL the APL world.
00:53:42.880 --> 00:53:44.079
It's not specific to dialogue.
00:53:44.159 --> 00:54:00.079
There's an old function called display, which you could look at, and it takes a it with the advent of nested arrays, then the this the this default clean display form, which we can we can look see what that looks like, became sort of harder to read, right?
00:54:00.159 --> 00:54:14.960
You can sort of see because of the double spacing that these are like six small vectors of vectors, but there are also limitations to this because if we if we try to do if you do like three, four reshape enclose two, two reshape iota four.
00:54:15.199 --> 00:54:17.280
So this is pretty horrible, right?
00:54:17.599 --> 00:54:29.119
You can't really tell right the difference between this and whether they would just be like notice this the these two are two separate vectors, but but down here we've got a like a two by two matrix, and you can't you can't tell.
00:54:29.280 --> 00:54:29.760
Right, yeah.
00:54:29.920 --> 00:54:35.039
So then somebody wrote or some people worked on made made a function that that drew this instead.
00:54:35.199 --> 00:54:50.400
Actually, originally it it was drawn not with with these nice line drawing characters that this that make this up, they would because they weren't available, so they would use like minuses and pluses in the corners, the arrows were there, and and they all of this has significance.
00:54:50.480 --> 00:54:55.679
So what's happening here is that every arrow indicates an axis.
00:54:55.920 --> 00:54:59.119
So there's a trailing axis over here that has length two in this case.
00:54:59.199 --> 00:55:00.880
There's a leading axis going down.
00:55:01.119 --> 00:55:02.960
There's an outer, so this is nested arrays.
00:55:03.199 --> 00:55:05.920
There's the outer array is also a matrix, you can see that.
00:55:06.079 --> 00:55:08.480
And the bottom left has a type indicator.
00:55:08.719 --> 00:55:12.239
The the tilde means let me change the front here and make it a little bit clearer.
00:55:12.320 --> 00:55:15.039
I think the tilde means it's numeric.
00:55:15.199 --> 00:55:18.079
Uh, the epsilon means it's nested.
00:55:18.320 --> 00:55:20.480
The there are other possibilities.
00:55:20.639 --> 00:55:24.400
If it's just a straight out line, like here, that means it's text.
00:55:24.559 --> 00:55:26.639
It's undecorated basically, it's text.
00:55:26.800 --> 00:55:35.119
So if we if we go in like format each of these, now you can see that the only thing that that visibly changed was the decorator and the bottom, bottom left.
00:55:35.199 --> 00:55:37.679
Instead of being the tilde for numbers, it means it means this.
00:55:37.760 --> 00:55:43.119
If we if we try to write like ABC1, two three, it's it says it's nested.
00:55:43.360 --> 00:55:53.840
If we if we do this, so it's it's a four-element vector, that the first element is character and the remaining elements are numbers, it says plus, it means more than one type, which means it's actually lossy, right?
00:55:53.920 --> 00:55:55.119
You can't tell what's what.
00:55:55.280 --> 00:56:01.280
If I write these two arrays, um where so they they look the same.
00:56:01.440 --> 00:56:07.360
So this the format isn't perfect, but it gives you a pretty good image of what's going on with some hints to to what's going on.
00:56:07.519 --> 00:56:10.239
And there are other decorators, there are other some other other things.
00:56:10.320 --> 00:56:19.599
If you if you try to do a uh uh a many-dimensional array, so we can see how it it sort of tries to stack up leading X's.
00:56:19.840 --> 00:56:22.960
This is the this is it's basically decoration on the old format.
00:56:23.039 --> 00:56:32.639
So this is how it would look without any decoration, and then we just add boxes and add indicators to show that we've got X's, but it's not very clear where exactly the X's are.
00:56:32.800 --> 00:56:34.480
The spacing sort of shows it as well.
00:56:34.639 --> 00:56:40.800
These are these are layers, and these, and then you've got a Q a cube here, and then it's it's a hypercube.
00:56:40.960 --> 00:56:41.760
So that's what's going on.
00:56:41.840 --> 00:56:43.119
But there are other other ways you can do that.
00:56:43.360 --> 00:56:44.880
What was the first expression that you tested?
00:56:44.960 --> 00:56:46.480
It was because I'm doing this in a ray box.
00:56:46.639 --> 00:56:49.360
I'm testing, so cap seems to be doing what you're showing here.
00:56:49.599 --> 00:56:52.400
Tiny Apple does something slightly different.
00:56:52.639 --> 00:56:53.199
I don't know exactly.
00:56:53.360 --> 00:56:54.000
Yeah, what was this?
00:56:54.079 --> 00:56:55.599
So this uh one more up?
00:56:55.920 --> 00:57:03.199
This one was so you're basically making a matrix and then enclosing it and then doing another reshape on it.
00:57:03.360 --> 00:57:12.480
Yeah, uh so tiny apple for if we do two, three, and so if we enclose that and then we go three, four.
00:57:13.360 --> 00:57:21.760
So yeah, tiny apple does something different, it doesn't look like they use the you know type indicators, they just use the arrows everywhere.
00:57:21.840 --> 00:57:33.519
Although I do some variations on this as well, and and this is just the built-in one, so to say, the one we can enable with this boxing user command, it's just one of the many variations on this that exist.
00:57:34.000 --> 00:57:45.360
I discovered that in J when I was implementing the boxing that by default they use the terrible ASCII things, but then there was, I want to say it was Joshua My aka Oracle.
00:57:45.440 --> 00:57:47.440
If it wasn't that individual, it was someone else.
00:57:47.599 --> 00:57:52.079
They pointed me towards the fact that you can set, like, yeah, like you're showing here, the settings of these.
00:57:53.679 --> 00:58:00.880
Yeah, and uh it was some horrible incantation that I had to put into whatever the the execution, but then it looks a lot nicer.
00:58:01.199 --> 00:58:04.559
So it actually looks like from what I can tell that this this is the REPL, right?
00:58:04.639 --> 00:58:12.079
So the the the GUI thing, and it has menu items for some of those horrible incantations you would otherwise have to enter to switch this.
00:58:12.320 --> 00:58:12.639
Right.
00:58:12.880 --> 00:58:13.679
So it does it.
00:58:13.760 --> 00:58:20.400
This REPL is sort of bare bones, but it has it, it has the basic stuff and it has some niceties and and some help.
00:58:20.719 --> 00:58:24.320
The the configuration as well, like is very bare bones.
00:58:24.559 --> 00:58:32.559
So here so you can configure it, but all it does is it opens up this equivalent of the JSON file or some kind of YAML file back there.
00:58:32.800 --> 00:58:34.400
Yeah, it's like an in the any file thing.
00:58:34.639 --> 00:58:40.400
Dialogue has has a proper GUI for configuration where you with lots of tabs and then and settings.
00:58:40.559 --> 00:58:41.920
Not everything you can configure like this.
00:58:42.000 --> 00:58:52.079
Sometimes you have to like go and configure it in configuration files, or otherwise, but at least it's got it's got some some GUI, like capturing keystrokes and things for which for setting up shortcut keys.
00:58:52.239 --> 00:58:55.039
Same thing goes for for the for ride.
00:58:55.519 --> 00:59:00.159
It's got this nice looking GUI for that comes up on a different screen, of course.
00:59:00.639 --> 00:59:02.719
You can modify the keyboard even, right?
00:59:03.280 --> 00:59:04.320
Set multiple keys here.
00:59:04.400 --> 00:59:06.000
That's got lots of lots of things you can configure.
00:59:06.159 --> 00:59:11.760
Again, it's not everything, but so some things you need to configure otherwise, but uh but the most common things you can set.
00:59:12.159 --> 00:59:17.599
And so is there just to wrap up the the pretty printing of arrays?
00:59:17.840 --> 00:59:22.960
Like so uh because I guess this this came about due to the introduction of nested arrays.
00:59:23.199 --> 00:59:33.920
Yeah, at that point it became necessary to to and so the the difference between this pretty printing, like when you're looking at a nested array in the like what what do we call these modes?
00:59:34.000 --> 00:59:35.760
Are they the minimax like display?
00:59:36.239 --> 00:59:39.280
But there are actually a lot, there's I mean, I could show you the help for it.
00:59:39.440 --> 00:59:41.760
There's a lot of a lot of settings here.
00:59:41.840 --> 00:59:44.880
So there's this is the style, it's called officially the style.
00:59:45.039 --> 00:59:50.719
So there's there's none, which is like just plain, like you saw before, with no decorations.
00:59:50.880 --> 00:59:52.639
Then there's the the min style.
00:59:52.800 --> 00:59:58.400
So if we go up and take our example, well, maybe we should do a little bit more interesting example than this.
00:59:58.960 --> 01:00:00.960
We can do something like this.
01:00:01.920 --> 01:00:07.519
And okay, so so here's the min style.
01:00:07.679 --> 01:00:09.360
You can't really tell the types, right?
01:00:09.519 --> 01:00:13.599
You can't if a was a was an and numeric character.
01:00:13.760 --> 01:00:18.000
No, sorry, if a with a here was a character one, you can't really tell what it is.
01:00:18.159 --> 01:00:22.000
And so this looks like it's just numbers, but it's not, it's actually a character.
01:00:22.159 --> 01:00:24.320
But it's a very clean, it's very compact.
01:00:24.559 --> 01:00:30.960
Then there's a there's a mid-level, which is exactly the same thing as a min level, but with decorator characters on.
01:00:31.039 --> 01:00:37.199
So you can see the X's here, and now you get an indication that this one one actually we should rewrite over here.
01:00:37.440 --> 01:00:39.280
One one, which you can see.
01:00:39.679 --> 01:00:41.280
You can see these two are not the same.
01:00:41.440 --> 01:00:41.679
Right?
01:00:41.760 --> 01:00:44.639
This one has a plus in the corner, and this one has a tilde.
01:00:44.719 --> 01:00:48.719
So that means this one is mixed type and this is numeric, even though they look the same.
01:00:48.960 --> 01:00:57.280
But it it basically puts the indicators on the borders, like sharing border lines, but it says tries to be really compact, but that means it's it's also lossy.
01:00:57.360 --> 01:00:59.039
There are things it cannot really show.
01:00:59.199 --> 01:01:05.360
If we if we do further enclosures, then it starts it starts padding around and you can start seeing a bit more.
01:01:05.599 --> 01:01:12.239
And then we can turn on the style to max, and at that point it blows totally blows up, it becomes giant.
01:01:12.400 --> 01:01:15.119
You see, compare the the sizes of these two.
01:01:15.360 --> 01:01:21.280
This is the same array shown in two different styles, but this one is way more informative, you can see exactly what's going on.
01:01:22.159 --> 01:01:26.960
Whereas this one is somewhat limited in what you can see, but it's very robust.
01:01:27.119 --> 01:01:32.320
I personally prefer the min most of the time, and now in dialect 20, I have to plug that a little bit.
01:01:32.400 --> 01:01:37.039
There's a new thing we can do, which is the array notation.
01:01:37.760 --> 01:01:39.440
So I like this.
01:01:39.679 --> 01:01:43.280
It's maybe not as pretty as this, but it tells me exactly what I have.
01:01:43.440 --> 01:01:46.159
I mean, there's no ambiguity here at all.
01:01:46.320 --> 01:01:49.760
And not only that, the best thing with this is this is executable notation.
01:01:49.920 --> 01:01:54.880
So I can just go in here and say, you know, reverse each, and that's just valid.
01:01:55.039 --> 01:01:56.480
I can I can reformat it.
01:01:56.559 --> 01:01:59.280
I can do and then it's got syntax coloring and so on.
01:01:59.360 --> 01:02:00.320
But this is the output value.
01:02:00.559 --> 01:02:04.320
Output values are input values, which I think I think is a really nice thing to have.
01:02:04.960 --> 01:02:06.400
Very interesting.
01:02:06.719 --> 01:02:14.400
Going back to the the chat, just so I haven't been catching uh following along there while I've been speaking, saying the APL session is like a debuggable shell.
01:02:14.480 --> 01:02:14.639
Yeah.
01:02:14.800 --> 01:02:20.880
Smalltalk even allows users to modify things like menu bar and color theme and write as a front end to the interpreter.
01:02:21.119 --> 01:02:22.880
Yeah, just to mention that.
01:02:23.119 --> 01:02:24.559
Look at the the can you see that?
01:02:24.639 --> 01:02:27.760
It's tiny, but you can see the the help menu item up here.
01:02:28.000 --> 01:02:31.840
So again, I can do SCE is the is the session object.
01:02:32.000 --> 01:02:43.840
So I can there's a a menu bar, and the menu bar has an item called help that has a caption, and I'm going to just set that caption to hello arraycast.
01:02:44.639 --> 01:02:48.320
And now the menu item up here is hello array cast.
01:02:48.960 --> 01:02:50.400
We can change change that back again.
01:02:50.480 --> 01:03:00.239
So yeah, we can to a certain degree we can uh we can manipulate the IDE itself, and I can I can hide the menu bar, I can add my own menu items and and buttons and so on.
01:03:00.400 --> 01:03:15.599
And then also mentioned in the chat, instead of using the boxing, there I made a user command called wrapper, and which creates an APL expression similar to what we do with the array notation, but it just like gives you a one-liner expression for things.
01:03:15.840 --> 01:03:20.880
So if I write, well, we can take the example from up here, actually you see what it does with that here.
01:03:21.360 --> 01:03:22.800
Oh, boxing is still on.
01:03:22.880 --> 01:03:23.920
That's a bit awkward.
01:03:24.239 --> 01:03:34.000
But so notice that it it returned the same thing because that's this is basically the the minimum or somewhat minimal representation of it, but it it gives you an APL expression for something.
01:03:34.079 --> 01:03:36.880
So if I don't know what something is, I can find out.
01:03:36.960 --> 01:03:39.360
Remember, I said earlier iota iota zero?
01:03:39.920 --> 01:03:41.760
Let's say we don't have boxing on at all.
01:03:41.920 --> 01:03:42.320
Nothing.
01:03:42.480 --> 01:03:43.679
This is what we sh we get.
01:03:43.840 --> 01:03:44.880
So this is a nice example.
01:03:44.960 --> 01:03:46.400
Like you get something like this.
01:03:46.559 --> 01:03:48.000
Uh, what am I gonna do with this?
01:03:48.079 --> 01:03:48.880
Uh it's nothing.
01:03:49.039 --> 01:03:52.239
Well, it's something, I can select it, it's represented by two spaces.
01:03:52.320 --> 01:03:53.599
So we can turn boxing on.
01:03:53.760 --> 01:03:56.159
Box on, uh style minimal.
01:03:56.559 --> 01:03:57.360
Oh, we get this.
01:03:57.519 --> 01:03:58.639
Not very useful, right?
01:03:58.719 --> 01:04:02.159
We can turn we can turn them in the medium level.
01:04:02.400 --> 01:04:03.519
This helps a little bit.
01:04:03.679 --> 01:04:09.760
It says this tells us, oh, it's it has one empty axis, that's what this means, and it's numeric.
01:04:09.920 --> 01:04:12.000
So, but actually, it's not the full truth.
01:04:12.079 --> 01:04:16.159
You might think this is the same thing as as just the empty empty vector, but it's not.
01:04:16.400 --> 01:04:26.880
We can go to the max level, and now we can see that okay, this is you can see there are no there are no this looks like we're we're joining some kind of dark religion or something like that.
01:04:27.440 --> 01:04:42.239
We've got to worship the so what this is saying is that there are no X's, that meaning the outer the outer frame here is a scalar, it's nested, it has a single element inside, which is has a single axis.
01:04:42.320 --> 01:04:52.719
There's the instead of an error, there's this symbol meaning it's an empty axis, so it's a length zero vector that is has the prototype of zero because it's numeric.
01:04:53.039 --> 01:04:58.800
So for this you can discern what it is, but you have to really think and and know things in array notation.
01:04:58.960 --> 01:05:01.679
You do the same thing, it it gives you this, right?
01:05:01.760 --> 01:05:05.599
It just says it's enclosed delta, which is nice, you can understand that.
01:05:05.760 --> 01:05:08.400
And I think the wrapper is going to give you the same thing.
01:05:08.639 --> 01:05:11.920
Yeah, okay, our boxing is still on, so it looks a bit funny.
01:05:12.000 --> 01:05:15.199
Yeah, it says it's just this in close delta again.
01:05:15.679 --> 01:05:27.440
But you can have weird things that are that are sort of hard to understand, like zero, six, one, eight, reshape, enclose a null zero.
01:05:28.320 --> 01:05:30.480
Notice that we got nothing, right?
01:05:30.639 --> 01:05:32.000
Literally it printed nothing.
01:05:32.239 --> 01:05:33.360
So what is this array?
01:05:33.840 --> 01:05:35.599
Let's turn turn boxing on again.
01:05:35.760 --> 01:05:38.400
Yeah, we can use a box style min.
01:05:39.039 --> 01:05:43.599
This is where if I was doing serious editing, I would cut in the F1 box box, box box.
01:05:43.920 --> 01:05:44.239
Yeah, yeah.
01:05:44.480 --> 01:05:50.159
Well, so so if I turn it even to mid, we get like a lot of white space, right?
01:05:50.480 --> 01:05:51.280
It's useless.
01:05:51.519 --> 01:05:54.480
If you turn it to max, we get this.
01:05:54.880 --> 01:05:58.800
Okay, now we can begin to see that this is actually a giant empty array, right?
01:05:58.880 --> 01:06:06.960
With lots of we see the Outer level here is this it's it's a empty axis followed by a non-empty axis with a non-empty axis and a non-empty axis.
01:06:07.039 --> 01:06:09.679
So a rank four array, that's the that's this, right?
01:06:09.760 --> 01:06:11.599
Every element is this.
01:06:11.840 --> 01:06:16.559
Maybe we should make the numbers here a bit smaller so we just see what it's easier to see what's going on.
01:06:17.119 --> 01:06:20.960
And uh and array notation will give us give us this, right?
01:06:21.039 --> 01:06:22.159
So this is also a nice thing.
01:06:22.320 --> 01:06:31.679
So we can see the square brackets represent uh rank basically, and we can see that the the leading axis is is compressed to length zero zero, right?
01:06:31.760 --> 01:06:42.639
So so it has a leading empty axis followed by two axes that are uh that are non-empty, and then the innermost axis, the trailing one, which is a vector axis, then right.
01:06:42.880 --> 01:06:52.719
So that's that's in here, and then we we it the content, actual content, is a space, the prototypical character, a null, and and the zero.
01:06:52.800 --> 01:06:54.880
So this is a very nice way to see it as well.
01:06:55.599 --> 01:06:56.480
That's wild.
01:06:56.639 --> 01:07:01.920
This is definitely like at least brown belt level stuff.
01:07:02.239 --> 01:07:07.760
Yes, there are a lot of options for this kind of thing, and various IDEs will have various ways of showing it.
01:07:07.840 --> 01:07:18.159
There are some of the newer things that use both like uh both thick and thin and then and double struck line drawing characters to show things.
01:07:18.400 --> 01:07:26.880
Bqn has its own thing with like dotted lines to show things, and there are lots of different ways you can you can get to these things.
01:07:27.039 --> 01:07:29.039
You don't have to print it into the session.
01:07:29.440 --> 01:07:33.519
Dialogue also has things like it's called show?
01:07:34.000 --> 01:07:34.800
Show view.
01:07:34.880 --> 01:07:36.320
I don't even use this anymore.
01:07:36.480 --> 01:07:38.000
Oh, not show view.
01:07:38.320 --> 01:07:40.239
I mean someone in the chat just mentioned display.
01:07:40.480 --> 01:07:42.320
Yeah, yes, there's display as well.
01:07:42.480 --> 01:07:45.920
Display is just it's just a temporary display.
01:07:46.480 --> 01:07:56.559
That's what I thought actually reper was gonna be, because I was thinking I probably still prefer min as well, but in certain cases you might want to see all the information.
01:07:56.719 --> 01:08:16.079
Like honestly, there's an analogy to for the Haskell programmers out there, they have the I think it's colon i and t, but is like for type information of an expression, and i is like all the information, so it's type plus some other stuff, and uh this is like kind of the uh equivalent, right?
01:08:16.159 --> 01:08:22.720
You've baked in the type information to like a legend that is completely invisible, but now I understand.
01:08:23.439 --> 01:08:28.800
Um so yeah, so here here we we uh I mean it's all the information is available, right?
01:08:28.960 --> 01:08:45.279
But so here we as mentioned in the chat, you've used the display user command that's like temporarily having the boxing set to the maximum just for single one single expression, and if this sets it to min just for a single single expression, there's no setting for no, not to min, sorry, to mid for for single expression.
01:08:45.359 --> 01:08:47.520
There's no corresponding thing for min.
01:08:47.760 --> 01:08:53.520
But there are actually a lot of in the defense workspace, there are a lot of extra functions for showing things in various ways.
01:08:53.680 --> 01:08:56.319
So if we we can copy, I think it's called DSP.
01:08:56.880 --> 01:09:00.880
So this is yet another minimalist way to show things, yeah.
01:09:01.119 --> 01:09:07.199
So it it like dispenses with the outer borders and just draws the bare minimum to separate things from each other.
01:09:07.520 --> 01:09:12.720
And there's one called this display R, and I think this display S.
01:09:14.000 --> 01:09:14.800
So we can see.
01:09:15.680 --> 01:09:18.800
So this one this one gives you numeric information.
01:09:18.880 --> 01:09:24.560
It's saying this instead of drawing little arrow, it says this is an axis of length two, and axis of length.
01:09:24.640 --> 01:09:29.359
So this is it gives us the the the shapes everywhere, and this gives you the depth.
01:09:29.680 --> 01:09:38.319
So this instead of saying it's nested, it says it has depth too, and this axis length two, length three, two, and then this is numeric, so it gives you all that information.
01:09:38.800 --> 01:09:44.880
Display S gives you the axis plus the shape information written there, right?
01:09:44.960 --> 01:09:48.960
So we can see that this is a two by three with the decorators and so on.
01:09:49.119 --> 01:09:55.199
So there are lots of variations of things, and some of them even take left arguments where you can further customize exactly what you want.
01:09:55.359 --> 01:09:59.279
Do you want the text centered or do you want it right adjusted and vertically centered?
01:09:59.359 --> 01:10:10.159
And they're sorry, lots and lots of options for things, and then yeah, some repls have this built in in various forms, and we have only talked about display of arrays, it's also display of functions.
01:10:10.239 --> 01:10:11.119
That's interesting.
01:10:11.840 --> 01:10:12.399
Oh, yeah.
01:10:12.479 --> 01:10:13.760
I mean, we could spend some time on that.
01:10:13.840 --> 01:10:15.680
I mean, I've been trying to bake that stuff.
01:10:15.920 --> 01:10:23.119
The tree train, the train tree view is there in uh in dialogue and so BQN has explain.
01:10:23.439 --> 01:10:29.520
Uh cap has a thing called structure viewing, but I've played around with it.
01:10:29.600 --> 01:10:39.840
It breaks frequently for the examples that I was testing, and then J has something called I actually can't remember what it's called, but it is the equivalent.
01:10:40.000 --> 01:10:42.479
It's horizontal instead of vertical.
01:10:42.720 --> 01:10:47.039
And I think uh I mean it's it's kind of uh by you know, it's personal opinion, right?
01:10:47.119 --> 01:10:52.319
But I think by far the dialogue tree train is by far the best BQM.
01:10:52.560 --> 01:11:05.199
So you can that's a nice thing you have in in the dialogue the uh sorry in the with JD is you can actually choose the display forms from the menu instead of having to write like weird incantations to enable them for for discoverability.
01:11:05.359 --> 01:11:06.159
I really like that.
01:11:06.239 --> 01:11:10.800
I would I'm going to add this if everything goes according to my plans.
01:11:10.960 --> 01:11:12.880
I'm going to add this kind of thing to to dialogue.
01:11:12.960 --> 01:11:14.560
So I want to overhaul the whole way you do.
01:11:15.039 --> 01:11:22.239
I also noticed that in the dialog editor, all of the expressions now are syntax highlighted, which is something I complained about at some point.
01:11:22.399 --> 01:11:26.479
Is that oh yeah, that's it used to be something you can configure.
01:11:26.720 --> 01:11:27.359
Or it was configured.
01:11:27.760 --> 01:11:33.199
You can choose whether yeah, you can choose whether it's only the current input light or or all them their history as well.
01:11:33.840 --> 01:11:34.720
There you go.
01:11:35.680 --> 01:11:37.760
So yeah, that's an it's a nice thing to have.
01:11:37.920 --> 01:11:40.319
I definitely like having syntax coloring like that.
01:11:40.479 --> 01:11:45.039
And of course, you get syntax colored output when you do a ray notation output, which is really awesome.
01:11:45.279 --> 01:11:47.119
So this is the default display form.
01:11:47.279 --> 01:11:49.520
We can see that as well over here in in J.
01:11:49.840 --> 01:11:53.279
It does much the same thing, just basically tokenization things.
01:11:53.439 --> 01:12:00.880
But if you turn boxing on, then the default style for Tessit things is is boxing.
01:12:01.359 --> 01:12:02.399
So we get this.
01:12:02.640 --> 01:12:22.479
So this tries to show you the structure of this average idiom where the we plus and the and the slash bar are bound more tightly together, and then you have outer level of a three train, this is the three boxes like this, and then we can we can switch it to a uh uh to the three mode, as you get this, which is what you prefer.
01:12:22.880 --> 01:12:28.079
But there are other options, but there's also the parens, which might be useful for like white belt.
01:12:29.039 --> 01:12:32.079
So it just fully parenthesizes whatever you give it.
01:12:32.560 --> 01:12:35.199
So you can see that you can see how things bind together.
01:12:35.439 --> 01:12:42.880
And that that's pretty nice, especially for weird things that you might not might not be so obvious how things bind together.
01:12:43.439 --> 01:12:44.479
Are those the three modes?
01:12:44.640 --> 01:12:50.000
Parens, tree, uh the thing I think there's there's one as well, which is I think def.
01:12:50.399 --> 01:12:54.399
And that one that one tries to minimize the number of parentheses instead.
01:12:54.640 --> 01:12:56.159
Okay, so the anti-parens.
01:12:56.800 --> 01:12:59.520
Uh yeah, but it will result to parens when necessary.
01:12:59.760 --> 01:13:05.680
So, like if we write something like this, so it will it will preserve the parentheses because you have to have them there.
01:13:05.840 --> 01:13:10.479
The only the reason I didn't want to pull that up at first is because I think it has a bug in it.
01:13:10.640 --> 01:13:20.319
So if you take this function, like the decrement just as just an example, decrement increment type thing, that's a mistake.
01:13:20.560 --> 01:13:26.079
It it should have parenthesized at least one of them, because this is not the same function because of stranding.
01:13:26.399 --> 01:13:27.119
Right, right, right.
01:13:27.439 --> 01:13:31.760
Um, so so that I tend to not and that's really what the point is either.
01:13:31.920 --> 01:13:34.239
It's just trying to rec reconstruct.
01:13:34.399 --> 01:13:35.760
Here we'll you'll do it right.
01:13:35.920 --> 01:13:41.279
And if we turn on the tree view instead, which is also what I prefer, by the way, in general.
01:13:41.520 --> 01:13:43.760
And and I think that looks very nice.
01:13:44.000 --> 01:13:53.359
You can see these are the two operands that are bound to the to this operator, and these are the two operator operands that are bound there, and then these bind together to a two true two tree.
01:13:53.520 --> 01:13:58.000
It also means that like a fork really looks like a fork, like a trident.
01:13:58.399 --> 01:13:59.359
Yeah, yeah, yeah.
01:14:00.319 --> 01:14:01.680
It's quite quite nice.
01:14:02.000 --> 01:14:03.359
And this is just display form, right?
01:14:03.520 --> 01:14:09.520
That's a that's a there's a lot, there's a lot of stuff that is that can be added to an IDE.
01:14:09.760 --> 01:14:23.600
BQN has like by default, recognizing that certain arrays look like sound definitions or like image definitions or video definitions, even, and then we'll create a little media player and show those those things.
01:14:23.680 --> 01:14:25.840
That's also something I would like to do to add.
01:14:25.920 --> 01:14:28.399
It's not really that hard to recognize things.
01:14:28.560 --> 01:14:30.399
Arrays are too big to display, really.
01:14:30.720 --> 01:14:32.560
But sometimes sometimes we do that.
01:14:32.800 --> 01:14:35.920
You can make uh fun patterns.
01:14:37.359 --> 01:14:49.680
So and then uh yeah, sometimes we we uh make the font size really small so you can to to sort of draw pictures in the IDE you're using character art, which I think is is is cute.
01:14:50.000 --> 01:14:50.239
Right.
01:14:50.960 --> 01:14:54.159
I've done that before with the game of life-ish kind of thing.
01:14:54.399 --> 01:14:55.279
Yeah, exactly.
01:14:55.520 --> 01:15:05.119
So that's another feature that you can have when you have this interactivity with the editor windows that if if we make an array, so here's here's the alphabet, and I can I can edit that again.
01:15:05.199 --> 01:15:08.720
Notice I'm just applying a function to oh, where did it go?
01:15:09.520 --> 01:15:09.840
In here.
01:15:10.159 --> 01:15:11.199
Where did they go?
01:15:11.600 --> 01:15:12.399
I don't know.
01:15:12.640 --> 01:15:13.760
That's funny.
01:15:14.079 --> 01:15:15.199
Oh hang on a second.
01:15:15.279 --> 01:15:18.239
I think it's just popped, might have popped up another another window.
01:15:18.560 --> 01:15:20.560
Let me let me clear everything here.
01:15:25.760 --> 01:15:27.680
Even I don't know what I've done.
01:15:27.760 --> 01:15:29.039
Oh, I think I know what it is.
01:15:29.119 --> 01:15:31.279
I'm actually running in this thing that has that's ride.
01:15:31.520 --> 01:15:33.600
Okay, let's switch over to ride, it's the same thing.
01:15:34.079 --> 01:15:44.880
Okay, so so here is is a character array, and and if I if I make changes to the array, then they get updated in real time inside the editor.
01:15:45.199 --> 01:15:49.760
Um, so there are lots of fun things you can do without playing around.
01:15:50.079 --> 01:15:56.880
Then there are features like you you probably don't want to even think about should be there, but have to be there.
01:15:57.039 --> 01:16:04.880
Like in the menu bar for on the dialogue IDE, you can uh you can export to a an exafile.
01:16:05.119 --> 01:16:12.159
Like you can create a standalone application that nobody can even tell is written in dialogue APL that's just completely packaged with icon and everything, right?
01:16:12.479 --> 01:16:23.840
Choose an icon file, and we can make a console application, those things, and choose the settings for Windows when we're when we're running it, version information, all that stuff you get when you when you look at the properties.
01:16:24.319 --> 01:16:43.680
Those things need to be there because it's all fun and games playing around with uh with a with array languages, but there are actually people out there that use this you know for real work, actual applications that get shipped to users that have to boot up and and they use them and then and they make money on it.
01:16:43.840 --> 01:16:45.760
So you have to be able to package your whole thing.
01:16:45.840 --> 01:16:47.119
That's also part of the IDE.
01:16:47.840 --> 01:16:50.079
There's access to help in various ways.
01:16:50.239 --> 01:16:54.720
Again, this is of course, every IDE has its its ways to do this.
01:16:54.960 --> 01:17:02.960
One thing I would like to do is that we haven't done yet, but sort of working on that as a as a quiet project in the background, is that the first time you start, wouldn't it?
01:17:03.119 --> 01:17:06.960
Would be nice if the IDE would, I think so at least, would we say, you know, welcome.
01:17:07.039 --> 01:17:08.800
It knows whether it's the first time you start.
01:17:08.880 --> 01:17:14.720
Or it could give you the option to not show this again or show this again, that kind of thing, where it's like, hey, let me give you an intro tour.
01:17:14.800 --> 01:17:15.920
Up here is the language bar.
01:17:16.000 --> 01:17:22.079
This is the session, this is where you type things, uh, so that people can can get going a bit a bit faster.
01:17:22.640 --> 01:17:30.399
Yeah, I feel like we're gonna have to do one of these for all the different because we've only scratched the surface, and this is just basically APL, and we've only got a couple minutes left.
01:17:31.039 --> 01:17:35.920
Yeah, there's a just to a preview of some things that exist here.
01:17:36.079 --> 01:17:37.359
This is APL64.
01:17:37.439 --> 01:17:38.800
I don't use this normally.
01:17:38.960 --> 01:17:40.159
I have a license for it.
01:17:40.399 --> 01:17:45.119
This is Dialux, I think, most serious competitor in the commercial space.
01:17:45.520 --> 01:17:48.079
They have completely rewritten the IDE, right?
01:17:48.159 --> 01:17:54.560
Dialux has has is is a continuous evolution from the early 80s.
01:17:54.880 --> 01:18:04.159
This dialogue's uh APL64, which is the language is basically the same thing as as APL Plus, has a ton of features.
01:18:04.319 --> 01:18:10.079
I haven't even looked at everything, it's both language features, not in primitives, but in system functions.
01:18:10.239 --> 01:18:15.359
They've got loads and and control structures and things, but also the IDE has a lot of features.
01:18:15.520 --> 01:18:20.560
I'm not sure how much of it I would actually want, but they do have some some cool things.
01:18:20.720 --> 01:18:49.920
Like you can you can go into to the idiom manager and and we we've got a whole it's like basically like Apple cart thing, but uh structured with an i with a with an interface and you can add your own user idioms and it has got yeah, well you can see got lots of stuff and you can search the session itself, like the REPL part, has has some settings, so you have this history format, and I'm I'm not even really sure how this works.
01:18:50.000 --> 01:18:54.800
Now it's set to classic, which means that that things are this I don't think this works.
01:18:54.960 --> 01:18:55.760
Oh it does, okay.
01:18:55.920 --> 01:19:05.520
Things are as you expect, but I think you can switch to like a different mode, and now you've got like an input bar like you've seen on on uh on Triapia.
01:19:06.000 --> 01:19:08.880
And and now you now we're typing in here instead.
01:19:09.199 --> 01:19:10.560
And it copies it up here.
01:19:10.640 --> 01:19:14.319
And I think there are things you can like select and and redo and so on.
01:19:14.479 --> 01:19:16.239
There are I'm not really sure how this works.
01:19:16.399 --> 01:19:20.960
It's got a ton of stuff you can do you can do and settings for this group.
01:19:21.199 --> 01:19:28.399
Right here you can see which outputs belong with which inputs, and and uh it it sort of remembers where things belong.
01:19:28.560 --> 01:19:32.479
I think you can you can choose separate input and output.
01:19:32.640 --> 01:19:35.920
So an input pane and output pane, which might be more familiar to some people.
01:19:36.159 --> 01:19:41.039
I know browsers have like a mode you can do this, and and we've got our input bar down here.
01:19:41.600 --> 01:19:43.760
There are yeah, we can't even go into all of it.
01:19:43.920 --> 01:19:51.840
We haven't looked at dialogue things either, but we can but scratch the surface just looking at the at the possibilities that are here.
01:19:52.159 --> 01:19:58.319
So I I grew up with a good old style, basically like computer enhanced paper.
01:19:58.880 --> 01:20:04.880
So I'm used to do it to doing doing things the old style, but uh there are new cool things that you could do.
01:20:05.119 --> 01:20:11.600
I've actually written a library myself to do cool output stuff, just as an experimental thing.
01:20:11.840 --> 01:20:13.680
I think I think I have it available here.
01:20:13.760 --> 01:20:14.399
Let's see.
01:20:14.880 --> 01:20:42.800
And as as Adam's typing this and we're winding down, uh if you're either watching this live or in the future, uh or if you're listening to the audio and you have a favorite you know feature of an IEDE or REPL or programming environment, find the uh YouTube video, leave a comment, and whenever we do a follow-up where we explore uh this again, we will make sure to highlight the greatest, latest features from the different programming environments.
01:20:43.039 --> 01:20:43.359
Yeah.
01:20:43.600 --> 01:20:51.119
Because I'm sure that there's stuff that I definitely don't know, and probably even Adam in in the other you know, programming environments and languages that we don't use as often.
01:20:51.439 --> 01:20:53.359
Yeah, we we should maybe we should have guests.
01:20:53.439 --> 01:20:55.840
I know about the dialogue one fairly well.
01:20:56.159 --> 01:21:04.239
I know some of the APL ones, a little bit of the J things, and then the things get really progressively worse and worse as you get further away from that.
01:21:04.399 --> 01:21:07.039
We should have it's not fair that I should show these things.
01:21:07.119 --> 01:21:11.520
Now I'm not even going to run it, but I just want to show a little tool that I made.
01:21:11.760 --> 01:21:13.920
Can you open this picture?
01:21:14.239 --> 01:21:30.479
So so this is where similar to what you saw in APL in the APL64, where input remains over here in the in the session, in the normal session, but all output goes into a separate window, which is like a rich window uh for output.
01:21:30.560 --> 01:21:38.800
And you can you can get type information and and timing information and so on about when these various outputs happen and what they are, right?
01:21:39.039 --> 01:21:46.399
So and errors are like treated separately and and so on, and you can collapse and then remove pieces and so on.
01:21:46.560 --> 01:22:05.119
So there are possibilities you can so again, what this is saying is or hinting at is that you can catch the events that happen when things are printed and when various things happened, and when windows are closed, the editor window closes, you can catch that event, you can intercept it, you can write your own code that manipulates the flow of things.
01:22:05.359 --> 01:22:07.680
We even have some tools that that's how they work.
01:22:07.920 --> 01:22:09.359
It also means it's an open system.
01:22:09.439 --> 01:22:12.960
You can go and look at what is the code that actually does the the output.
01:22:13.119 --> 01:22:14.800
It's it's right there for you.
01:22:15.279 --> 01:22:18.479
There I don't know how we should treat this.
01:22:18.640 --> 01:22:23.279
There are so many ways we can go into this and so many dimensions and so many, so much more.
01:22:23.760 --> 01:22:29.119
We just have a recurring uh recurring series where uh I mean yeah, we're gonna we're gonna grow the the panel in the future.
01:22:29.199 --> 01:22:34.319
So I mean we'll have l like more expertise on different different IDs in the future.
01:22:34.399 --> 01:22:41.760
And yeah, when we bring folks on, it can be just one of our questions we ask folks are the things that that you know about that you can share with our our listeners.
01:22:41.840 --> 01:22:46.960
So doesn't we don't need to cover clearly we don't need to cover it all in one episode because we have tried and failed.
01:22:47.600 --> 01:22:52.560
But we knew that that that's the anyways.
01:22:52.640 --> 01:22:58.399
We will uh make sure to link all of these in the in the show notes so that if you want to go check them out.
01:22:58.560 --> 01:23:04.479
I think most of these except for APL64 are freely available uh either online or via download.
01:23:04.560 --> 01:23:05.680
So that is the nice thing about this.
01:23:06.560 --> 01:23:08.560
I even forgot the one, I forgot APLX.
01:23:09.359 --> 01:23:14.159
I actually was thinking that when you were showing all the windows, and I was like, actually, there is one that I have personally used.
01:23:14.319 --> 01:23:20.159
Not I don't have it on my computer right now, but at one point I did at one point have the APLX, and they have great docs.
01:23:20.479 --> 01:23:26.479
At one point, they were nicer than dialogs, but dialogue says revamped theirs and I'd say docs better now.
01:23:27.039 --> 01:23:34.640
So I do have it here, but yes, that's a it doesn't the ID isn't doesn't do very much interesting things, but yeah, it does.
01:23:34.960 --> 01:23:37.920
It's still nice, it's it's still minimal APL, nice for getting started.
01:23:38.079 --> 01:23:38.399
Yeah.
01:23:38.720 --> 01:23:39.279
Absolutely.
01:23:39.359 --> 01:23:44.079
The documentation is is awesome, and the ID does have features that dialogue doesn't have either.
01:23:44.319 --> 01:23:54.319
Um so Max says a last comment is saying, My favorite is hint-based jumps in Avi, Easy Motion, and hop.nvim on the other side.
01:23:55.760 --> 01:23:57.119
I think different like tools.
01:23:57.199 --> 01:24:08.399
Um and I mentioned head over to the YouTube comments, but I also forgot that the main way you can reach us, as always, is contact at array cost man, I was so close.
01:24:08.560 --> 01:24:09.279
I was so close.
01:24:09.359 --> 01:24:13.279
I was about to say array cost contact at arraycast.com.
01:24:13.439 --> 01:24:14.000
We'll get it.
01:24:14.079 --> 01:24:17.039
It's uh, you know, Bob was doing it for a hundred plus episodes.
01:24:17.279 --> 01:24:21.600
And so uh you have to give us time to be able to say a simple email address correctly.
01:24:21.840 --> 01:24:36.399
But yeah, if you've got tips, tricks, features, or you want to, you know, message us about anything else, you can reach us there and consider this part one of an ongoing series of you know, editor REPL IDE programming environment features.
01:24:36.560 --> 01:24:37.439
I learned a bunch of stuff.
01:24:37.520 --> 01:24:45.039
I didn't know about the min-max mode stuff, and that is very useful for understanding what the difference is.
01:24:45.119 --> 01:24:49.279
And also, two, it's nice to know that you can get type information in like the encoding of the box.
01:24:49.439 --> 01:24:52.800
So hopefully other listeners learned something today as well.
01:24:53.119 --> 01:24:57.039
With that, I guess we will say happy array proming.
01:24:57.199 --> 01:24:58.079
Happy array proming.
01:24:58.720 --> 01:24:59.840
Oh man, that that didn't work.
01:25:00.079 --> 01:25:01.199
It did, it worked on my end.
01:25:01.520 --> 01:25:02.720
It worked on my end.
01:25:02.880 --> 01:25:03.439
Really?
01:25:03.680 --> 01:25:06.399
Yeah, okay, it's all right until next time.
01:25:06.640 --> 01:25:07.119
See ya.
00:00:12.080 --> 00:00:16.079
Welcome to episode 122 of Arraycast.
00:00:16.160 --> 00:00:24.079
I'm your host, Connor, and today with us we have our for the moment only co-host, or I guess panelist, and therefore co-host Adam.
00:00:24.160 --> 00:00:25.519
And I guess I totally messed that up.
00:00:25.600 --> 00:00:27.760
We're supposed to go around and do brief introductions.
00:00:28.000 --> 00:00:29.519
And so now they know who I am.
00:00:29.839 --> 00:00:30.640
Now they know who you are.
00:00:30.719 --> 00:00:34.799
But we will let you briefly introduce yourself and then we'll hop into uh one or two announcements.
00:00:35.119 --> 00:00:37.039
Okay, so as Connor said, I'm Adam.
00:00:37.200 --> 00:00:38.640
But so is my family name.
00:00:38.719 --> 00:00:40.079
Don't try to pronounce that.
00:00:40.320 --> 00:00:43.359
I work at Dialog, been working for a decade at Dialog.
00:00:43.759 --> 00:00:45.520
Now the head of language design.
00:00:45.679 --> 00:00:48.719
That doesn't mean I do language design all the time, just sometimes.
00:00:48.960 --> 00:00:51.840
But I sort of have to sign off on language changes.
00:00:52.159 --> 00:01:07.040
I'm really interested in the whole language design aspect, all the possibilities there are, and especially when it comes to array languages, especially Amazonian languages, always lamenting the lack of array features and non-array languages.
00:01:07.359 --> 00:01:07.760
Awesome.
00:01:07.920 --> 00:01:15.519
And I, as mentioned before, I'm Connor, host of ArrayCast, massive fan of all the array languages, all the existing ones, all the future ones.
00:01:15.760 --> 00:01:20.719
And today with us, today, we're gonna be chatting about REPLs and IDEs.
00:01:20.959 --> 00:01:22.319
And we'll get to that in a sec.
00:01:22.400 --> 00:01:23.840
So I I think we have a couple announcements.
00:01:24.079 --> 00:01:26.719
Adam, I think you've got one, and then I've got one and a half.
00:01:26.799 --> 00:01:27.840
So we'll we'll go to you first.
00:01:28.560 --> 00:01:36.239
It's a fairly minor thing, but there's the the Dinah, this dialect North America meetup at the 27th of April, I think it is.
00:01:36.560 --> 00:01:48.159
And there's a the the program for what's going to be presented there is now up on the website dinandodialog.com slash program in British spelling, the MME at the end.
00:01:48.959 --> 00:01:49.359
Awesome.
00:01:49.519 --> 00:01:53.519
Links for that will be in the show notes slash description in the future.
00:01:53.680 --> 00:01:59.439
Not now, but if you're watching live, as always, well not as always, since the second era of a ray cast has started.
00:01:59.680 --> 00:02:00.879
We are live on YouTube.
00:02:01.200 --> 00:02:03.840
And today is Monday, 23rd of March.
00:02:04.000 --> 00:02:07.840
So I think we haven't settled completely, but I think we're gonna be doing this regularly on Mondays.
00:02:07.920 --> 00:02:08.719
But TBD.
00:02:08.879 --> 00:02:10.240
So that's one announcement out of the way.
00:02:10.400 --> 00:02:15.120
My one and a half announcements are, so Adam doesn't even know about this, although actually maybe you were on the email.
00:02:15.280 --> 00:02:27.840
So I want to say a year ago, at least, maybe two years ago, around the same time that Bob was working on like the special Ken Iverson interviews, like a blast from the past.
00:02:28.560 --> 00:02:43.840
Bob Bernecki, local to Toronto, reached out to us at the Arraycast and said that he was sitting on a ton of recordings from the 1991 and 1993 APL conferences.
00:02:44.319 --> 00:02:55.360
And skipping over some details, at some point I got a thumb drive with the digitized versions of these, because I think they existed on, I don't know, VHS or whatever technology was used in the 90s.
00:02:55.599 --> 00:03:00.400
And we were supposed to find a way to publish those on YouTube.
00:03:00.560 --> 00:03:06.560
I think at one point we were going to do it on the Code Report channel, but we didn't end up doing that because I think I was just too busy.
00:03:06.800 --> 00:03:11.680
And Bob Renecky reached out again and was sort of asking what's the status of this.
00:03:12.159 --> 00:03:14.479
And we now have this array cast channel.
00:03:14.639 --> 00:03:22.159
So long story long, my plan is every other week, so we're doing once every two weeks for array cast.
00:03:22.319 --> 00:03:26.080
In between, I think there's like 15 or 20 of these videos.
00:03:26.240 --> 00:03:28.400
One of these videos will drop.
00:03:28.719 --> 00:03:34.639
And that'll be exciting for those that are interested in older footage of array conferences.
00:03:34.719 --> 00:03:40.800
So I think the first one that we are going to be releasing is the 25-year panel perspective.
00:03:40.879 --> 00:03:42.319
It's got a couple different names.
00:03:42.560 --> 00:03:55.439
If you are like the internet sleuth of internet sleuths, I actually, while I was asking for some information to Gemini, it found a recording on someone's channel that had uploaded it.
00:03:55.599 --> 00:03:57.599
And the title of the video is something something.
00:04:03.039 --> 00:04:11.759
But, anyways, you can find this on the internet, but uh a polished version will be uploaded a week from today, which I guess is actually a week because there's no post-processing in terms of the time.
00:04:12.000 --> 00:04:14.479
Anyway, so and there will be some other talks.
00:04:14.639 --> 00:04:16.720
I think one of them's called Mastering Jay.
00:04:16.879 --> 00:04:27.920
There's a few different, you know, I one of them that I haven't actually watched yet, but I'm I'm looking forward to watching when I edit it and upload it is Is Jay an APL question mark, which I I think is also the name of a paper.
00:04:28.000 --> 00:04:30.319
You can you can correct correct me if I'm wrong, Adam.
00:04:30.399 --> 00:04:34.720
Or there was a name of something like they had maybe maybe this just was, it was just a discussion, and that's what this is.
00:04:34.800 --> 00:04:40.079
Or I prefer to say the original name of Jay was APL backslash question mark.
00:04:40.399 --> 00:04:41.360
Oh, okay.
00:04:41.920 --> 00:04:43.199
Because there was a bunch of debate.
00:04:43.279 --> 00:04:48.399
We've talked about that in the past on the array cast when Jay was first born, whether or not it counted.
00:04:48.639 --> 00:04:58.720
Anyway, so look forward to future every other week's in between arraycast episodes, at least for you know a couple months, these videos that'll get uploaded.
00:04:58.959 --> 00:05:02.000
And the half announcement, we'll see if I can share my screen.
00:05:02.160 --> 00:05:12.879
This is less of a an announcement and more of a teaser, which is why I'm calling it, oh, I see, this kind of ruins the because everyone's seeing the the preview of all the other stuff I have on my computer.
00:05:13.040 --> 00:05:14.319
All right, so never again.
00:05:16.079 --> 00:05:20.160
And so this is a I'm working on a I've been working on a YouTube video for like two weeks now.
00:05:20.319 --> 00:05:31.600
Shout out to Madeline, shout out to the folks on the Weewa Discord, but I I've been wanting to make this video since Pearl Weekly Challenge 285, and we're on 366 this week.
00:05:31.839 --> 00:05:39.040
So that's close to like a hundred weeks, which means it's almost like just under two years that I've wanted to make this YouTube video.
00:05:39.199 --> 00:05:41.920
I only started working on it a couple weeks ago.
00:05:42.160 --> 00:05:58.000
But the the preview that I'll show is I've been I decided I wanted a table, and I've made these kind of tables in the past where I show different primitives or even algorithm names in different languages, and and then you just can kind of compare across languages what the different languages call these things.
00:05:58.160 --> 00:06:07.439
But the equivalent in an array language is to have you know the different primitives, and the reason I'm choosing Tiny Apple as the baseline is they have the most number of primitives.
00:06:07.680 --> 00:06:14.800
So, in terms of like you're trying to find one primitive and what they translate to another primitives, the language with the most primitives is uh the best choice.
00:06:14.879 --> 00:06:27.199
And so if you hit a shortcut, which I won't tell folks yet, but this is live on ArrayBox, it will bring up this beautiful table, which shows the translations across the six languages that are supported.
00:06:27.360 --> 00:06:28.720
You can see there's a tiny little bug here.
00:06:28.800 --> 00:06:30.560
This subscript shouldn't be white.
00:06:30.720 --> 00:06:33.759
And the really cool thing is it's like, well, it's only showing the monadic ones.
00:06:33.839 --> 00:06:39.360
Well, if you click on the verb or the function, it'll toggle from monadic to dyadic.
00:06:39.519 --> 00:06:41.439
And then a nice little feature that I'm working on.
00:06:41.600 --> 00:06:51.439
Oh, I guess you can't click or else it gets rid of it, is if you hit C, it then color codes the ones that are, you know, if it's two primitives, it gets yellow, because two is fine.
00:06:51.600 --> 00:06:53.839
If it's three primitives, it gets orange.
00:06:54.079 --> 00:06:56.240
But if it's four or more, it gets red.
00:06:56.480 --> 00:06:59.519
And uh, anyways, this is uh a cute feature.
00:06:59.680 --> 00:07:10.560
It's it's very much in beta because the the primitives that you're looking at on scene are on the screen, are and I guess for the audio listener, we're looking at first cell, ooh, except this is a little bit broken now.
00:07:10.639 --> 00:07:14.879
It should say first, last, first cell, last cell without split and mix.
00:07:14.959 --> 00:07:18.240
And I actually have to split split into split and major cells.
00:07:18.319 --> 00:07:20.720
As Madeline pointed out, there's some slight differences.
00:07:21.120 --> 00:07:23.120
I have I have other things that I want to remark here.
00:07:23.360 --> 00:07:27.439
Yeah, and this is what I thought is like maybe a little like 10-minute mini episode inside of our REPL.
00:07:27.600 --> 00:07:30.639
And like technically, this is uh a REPL feature, is it not?
00:07:30.720 --> 00:07:33.040
So I mean we're technically still on task.
00:07:33.120 --> 00:07:38.639
Uh and I thought I I really liked the tally behind I don't know what is it, skinny squad?
00:07:38.720 --> 00:07:39.600
I don't know what that character is.
00:07:39.839 --> 00:07:40.480
It's called squad.
00:07:40.720 --> 00:07:41.600
Is it called squad?
00:07:41.759 --> 00:07:44.399
I thought that was quite nice, and and the comparison to cap.
00:07:44.959 --> 00:07:47.519
It only only works on quad IO1, though.
00:07:48.399 --> 00:07:51.759
As Madeline pointed out, sometimes quad IO1 is better.
00:07:51.839 --> 00:07:56.319
And it's actually my preferred uh index origin, but we'll we'll save that for a whole other episode.
00:07:56.639 --> 00:07:58.079
Oh, shots fired.
00:07:59.759 --> 00:08:01.519
But no, I mean I also work like that.
00:08:01.600 --> 00:08:04.160
But I would, I mean, if the first column was supposed to be first, right?
00:08:04.720 --> 00:08:05.439
It should be first, yeah.
00:08:05.519 --> 00:08:06.959
I don't know when that got changed.
00:08:07.360 --> 00:08:08.079
That's primitive.
00:08:08.160 --> 00:08:10.879
Why did why is it not APL's first primitive?
00:08:11.120 --> 00:08:12.959
Oh, actually, wait, you know what happened here?
00:08:13.120 --> 00:08:14.480
This is actually there's no bug here.
00:08:14.560 --> 00:08:15.839
I've just typed this incorrectly.
00:08:16.160 --> 00:08:20.480
So at some point, like switching between the languages, they have like the primitive translation.
00:08:20.879 --> 00:08:21.920
This just got messed up.
00:08:22.079 --> 00:08:23.439
So this is actually what it should be.
00:08:23.920 --> 00:08:28.319
And and and uh Madeline asked when I was asking questions about this like what is the relationship between all these?
00:08:28.399 --> 00:08:32.000
These are the primitives used for solving pro weekly challenge 285.
00:08:32.159 --> 00:08:36.960
So that's why I'm comparing like what you have access to when trying to solve that challenge.
00:08:37.279 --> 00:08:40.159
But can you that that last is wrong, right?
00:08:40.240 --> 00:08:41.120
That's not last.
00:08:41.759 --> 00:08:42.399
Last for what?
00:08:42.480 --> 00:08:43.759
We've got six languages here.
00:08:44.240 --> 00:08:45.919
No, look, I'm just talking about APL.
00:08:46.000 --> 00:08:46.480
That's what I know about.
00:08:46.639 --> 00:08:47.759
We can look at the other ones in a moment.
00:08:47.919 --> 00:08:50.799
Okay, so dialogue APL is in the second row, not that that helps the audio listen.
00:08:51.919 --> 00:08:54.879
Part of this problem here is like what is the definition here?
00:08:55.200 --> 00:08:57.200
Last element in REVEL order?
00:08:57.519 --> 00:09:00.639
And do you need to disclose it, unbox it depending on your language?
00:09:00.799 --> 00:09:01.120
Right?
00:09:01.279 --> 00:09:07.519
So the the one you have for currently on APL for last, that's the last cell one, not last.
00:09:08.000 --> 00:09:10.559
Last would be first of the reverse.
00:09:10.879 --> 00:09:15.120
Or first of the reverse of the rabble, if you want to be strict about multi-dimensional arrays.
00:09:15.200 --> 00:09:16.000
Are we talking vectors?
00:09:16.080 --> 00:09:18.799
Are we talking any dimensional arrays when it comes to first and last?
00:09:18.960 --> 00:09:26.080
But in in if you want to be really strict, it should be the the first of the reverse of the first of the rabble of the reverse, right?
00:09:26.399 --> 00:09:27.120
Or something like that.
00:09:27.519 --> 00:09:29.039
First, well you could easily decide.
00:09:29.120 --> 00:09:33.519
It should be the you want to rabbel, yeah, so first of the reverse of the rabble.
00:09:34.000 --> 00:09:37.440
And which is how you would do it, which you can't even do as a three-train, right?
00:09:37.519 --> 00:09:38.799
So you don't have to start composing.
00:09:39.039 --> 00:09:43.600
First cell is left tech first axis reduction.
00:09:43.840 --> 00:09:47.360
And left cell is right tech first axis reduction.
00:09:47.759 --> 00:09:48.799
That's two characters.
00:09:49.360 --> 00:09:50.960
Nobody ever writes like this.
00:09:51.600 --> 00:09:54.720
So I mean, well, this is this is great uh, what do you call it?
00:09:54.879 --> 00:10:01.279
Food for thought and ideas for discussion, because you'll you'll the history of this, and this is part of the problem, folks.
00:10:01.440 --> 00:10:03.200
I'm I'm a big part of the problem here.
00:10:03.519 --> 00:10:16.639
I tend to think in a small bubble that is a subset of the array language world, which is the rank one plus sometimes rank two uh world, which is a subset.
00:10:16.879 --> 00:10:20.639
And when I started constructing this, I didn't even have first cell and last cell.
00:10:20.720 --> 00:10:24.399
I just had first, last, dyadic without split and mix.
00:10:24.559 --> 00:10:31.440
And then as soon as I went to the Wiwa Discord, because honestly, it's the Weewa is probably I have the biggest gaps in my knowledge.
00:10:31.519 --> 00:10:33.039
Maybe J you can put up there as well.
00:10:33.120 --> 00:10:33.840
And so I went to the We.
00:10:41.519 --> 00:10:45.919
So it talks about rows and columns, even though it's actually first access, last access type of thing.
00:10:46.240 --> 00:10:47.519
Uh yeah, I have not observed that.
00:10:47.600 --> 00:10:57.120
But I mean, this is part this is why I said I'm part of the problem, and that there's a problem here, is that when you think in like primarily rank one, like a lot of times I'll say like, oh, it's just that, and then you'll go, no, no, no, no, no.
00:10:57.200 --> 00:11:00.480
Or you know, when Marshall was on the podcast, he'd be saying, Oh no, that's not technically correct.
00:11:00.720 --> 00:11:17.679
Because there's there's like rank one world, there's like rank two world, then there's just arbitrarily ranked world, so all the ranks, and then there's nested arrays, which like if you're gonna spell this correctly, a lot of the times my brain is like, oh, well, what you're looking at on screen works for rank ones, therefore it's correct.
00:11:17.840 --> 00:11:36.399
But it's no, it's not, it's like if you're gonna do the strictly correct, you have to consider nested arrays, you need to consider all the different ranked arrays, and and that's it, it causes a problem in terms of like teaching, in that a lot of the times when people are solving small problems, they actually are in a rank one world.
00:11:36.639 --> 00:12:01.840
And so if you show them the strictly correct for all of the nested and the higher ranked arrays, it's and like so if you have some kind of BQN crate or you know, Apple cart where you go there and you have the strictly correct thing and it shows you know some four or five character ravel with the disclose or whatever, that is strictly correct, but it it should have some like little toggle thing that is like, are you just do you need this just for a rank one array, or are you solving for like a more general broad problem?
00:12:02.000 --> 00:12:12.480
Because I just put multiple entries into Apple cards and say f with and then the description says what the restrictions are, and also the syntax specification often has the restriction built into the names, right?
00:12:12.559 --> 00:12:22.879
So I will call it I can call it the Y if it's a general array, the right argument, and I will call it YS if it's a scalar, ym if it's a matrix, yv if it's a vector.
00:12:23.200 --> 00:12:23.600
Right.
00:12:24.240 --> 00:12:27.120
So there are ways that you can sort of add that in there.
00:12:27.759 --> 00:12:28.639
You have to think about that though.
00:12:28.799 --> 00:12:37.840
When you're gen when you're going to you know different places where there's different varying levels of that kind of specificity specificity, you don't end up necessarily getting all that.
00:12:38.000 --> 00:12:54.080
Anyways, the point being is that I came into this thinking about just in the context of the problem that I was solving, and then I realized, well, technically this is all and like I said, split technically needs to be split into the split from dialogue APL and then Tiny Apple has something called major cells.
00:12:54.320 --> 00:13:00.080
And anyway, so I will update this for what you say, and but then I also need I uh maybe I should do that.
00:13:00.159 --> 00:13:09.519
I should add some little toggle that says, like, you know, do you want the strictly correct or do you want the non-nested, non-higher ranks, just rank one?
00:13:09.919 --> 00:13:12.480
Yeah, I mean that's that's that's it gets complicated, right?
00:13:12.559 --> 00:13:22.960
Because even something you will see a lot in APL code, modern APL code, is that people want to to merge say a vector vectors to be a flat vector, often like character vectors.
00:13:23.440 --> 00:13:25.440
Uh so they'll just run an enlist on it.
00:13:25.919 --> 00:13:27.600
But that works in that case.
00:13:27.759 --> 00:13:28.720
It doesn't work in general.
00:13:28.799 --> 00:13:31.600
You can't just merge things using enlist, right?
00:13:31.679 --> 00:13:34.320
But that doesn't mean it's not idiot-ematic and normal and so on.
00:13:34.480 --> 00:13:35.919
So it's hard to do this.
00:13:36.240 --> 00:13:38.240
How how does a ray box do this?
00:13:38.399 --> 00:13:43.440
Does it just have a giant lookup table for primitives for in for every language?
00:13:44.399 --> 00:13:51.360
I I basically uh yeah, I mean I've I it's been no secret that I I built a ray box entirely using AI tools.
00:13:51.440 --> 00:14:00.399
And so when I had this idea, you know, the the b the basics of the idea was like, all right, if I have a space separate separated primitives, they don't even really need to be space separated, I guess.
00:14:00.720 --> 00:14:04.159
Actually, the uh they do in the sense that well, they act they actually don't.
00:14:04.320 --> 00:14:14.960
Anyways, you know, build a table that's got the languages on the left, the monadic and dyadic at the top that you can toggle, you know, and it didn't look as nice at first, but you just ask it to change.
00:14:15.200 --> 00:14:19.679
And then I said initially just like reach for primitives if they exist.
00:14:19.840 --> 00:14:25.039
And I'd say it got like 75% of them correct, but then not have to go in and be like, ah, that's wrong, this is wrong.
00:14:25.120 --> 00:14:28.639
But I mean 75% is still, and that's the thing, is people say, oh, it's it gets it wrong.
00:14:28.720 --> 00:14:33.759
But the point being is that's 75% of the work that I didn't have to do, and I just have to go and like review.
00:14:33.840 --> 00:14:41.279
I'd rather have, you know, an intern that you know made a bunch of mistakes and and did most of the work for me, and then I just have to go clean things up.
00:14:41.519 --> 00:14:48.399
And then for the the longer ones, you know, like the cap last cell and the weewo ones, I just manually input those.
00:14:48.559 --> 00:14:54.320
And so it's yeah, there I think there's a table called primitive hyphen compare.js somewhere in the GitHub repo.
00:14:54.480 --> 00:14:58.879
So if people are more than welcome to go and either submit issues or even better, pull requests.
00:14:59.039 --> 00:15:06.320
Because like I said, I have not reviewed any of the primitives because I only asked for these ones, but it was just like, well, clearly you're gonna want all of them in the future.
00:15:06.399 --> 00:15:07.360
I'll go do that for you.
00:15:07.519 --> 00:15:13.679
But I have not reviewed any of those, so I guarantee, like, so I mean, what's some what's a random primitive that we don't have here?
00:15:13.840 --> 00:15:17.440
Let's just type in I mean there's some complicated ones that will be.
00:15:17.759 --> 00:15:23.679
No, no, let's do something let's do something simple, like IOTA and well, let's let's uh let's Iota in reverse, two of my favorite primitives.
00:15:23.759 --> 00:15:24.799
So let's see what happens.
00:15:25.360 --> 00:15:30.480
This looks I mean first X's, last X's.
00:15:31.120 --> 00:15:38.240
Yeah, that's the that's a good point, because Tiny Apple actually doesn't have they only have re reverse first, correct?
00:15:38.639 --> 00:15:41.919
Reverse first, so you have to do a rank rank one or something.
00:15:42.240 --> 00:15:56.159
But if we change it to look at that, look at that, lovely that uh and also too, a few people on the Wi Wa Discord said that my coloring of the primitives in Wiwa is cursed because I reversed the blue-green coloring scheme from Kai's site.
00:15:57.200 --> 00:16:09.360
I made an executive decision for a ray box that I prefer blue because in the ambivalent languages, you just have to color basically all functions and verbs one of the colors.
00:16:09.440 --> 00:16:11.039
You're not able to disambiguate.
00:16:11.200 --> 00:16:18.879
And therefore, I chose blue because I think blue is a little less electric, and so it just looks better as like the more common color.
00:16:19.120 --> 00:16:23.759
And I'm not gonna have Wiwa go against the other five languages.
00:16:23.840 --> 00:16:27.120
So unfortunately, it will be cursed for some of you.
00:16:27.279 --> 00:16:30.399
But yes, you can see the color changing on the Wi Wa ones, which is quite nice.
00:16:30.480 --> 00:16:35.440
But I think this is right, but like also there's so yeah, like as you mentioned, the reverse first versus reverse.
00:16:35.600 --> 00:16:40.480
Also, two technically, is this accurate if some of them are one indexed versus zero indexed?
00:16:40.559 --> 00:16:42.720
You know, you gotta put there's always these like nuance.
00:16:43.039 --> 00:16:44.000
Yeah, a lot of nuance.
00:16:45.279 --> 00:16:54.320
Do you give it a single element or a scale uh vector argument or a scalar argument or a multiple element vector argument?
00:16:55.120 --> 00:16:58.960
Then the definitions are completely different between APL and J, for example.
00:16:59.360 --> 00:17:00.720
Well, so here's here's a question.
00:17:01.039 --> 00:17:14.319
What would be your because there I just had an idea that if you could imagine under every single primitive, there were three columns, one for like rank one, one for all ranks, and one for nested.
00:17:14.480 --> 00:17:18.799
Is that the correct number of columns in order to capture and then you could you can have enough?
00:17:18.880 --> 00:17:28.559
You want like scalar on a scalar vector, higher uh maybe a scalar, vector, matrix, and nested, maybe not all of them are valid in every combination.
00:17:28.799 --> 00:17:46.319
But that's that's the point though, so that you'd have the columns, and so for the base one, that's the problem, is though, like you know, I don't actually know what tiny Apple does for if you give it like a two two character array, is that gonna do the I mean I guess we can check right now to that's what you've got the ray box for.
00:17:46.480 --> 00:17:48.400
All right, so it does it does have like the J behavior.
00:17:48.799 --> 00:17:49.519
It does the dialog thing.
00:17:49.680 --> 00:17:50.880
Or the dialogue thing, sorry.
00:17:51.039 --> 00:17:57.680
But that's the thing, is like when you have behavior that exists in a language that's not tiny apple, then how do you how do you communicate?
00:17:57.839 --> 00:18:06.559
You know, so it's it is very tricky, but you're saying that potentially it would be it would be four columns scalar, aka, so rank zero, rank one, rank two, and nested.
00:18:07.119 --> 00:18:13.839
Those are what I would do first, but that's but that and that's the thing, is as a begin and that's actually that's another thing.
00:18:13.920 --> 00:18:16.480
Maybe we should dedicate a whole episode to that at some point.
00:18:16.640 --> 00:18:27.359
I've had this kind of mental model on the back of my head that I'd love to give like or actually I would love someone else to give a talk on it, but yeah, the problem is is I I throw all these talk ideas out into the world and no one ever does them.
00:18:27.440 --> 00:18:28.960
So I just end up having to do them.
00:18:29.119 --> 00:18:37.599
But I have this mental model of like the the the like karate belt system of like array language programming skill level.
00:18:37.839 --> 00:18:40.160
And so I am definitely not a black belt.
00:18:40.240 --> 00:18:42.640
I'm not a triple black belt, I'm not a double black belt.
00:18:42.799 --> 00:18:44.640
I don't know actually what the colors are.
00:18:44.720 --> 00:18:45.599
I'm not white.
00:18:45.759 --> 00:18:50.480
I I know there's like purple and brown, so I'm somewhere, you know, probably halfway to black belt.
00:18:50.640 --> 00:18:53.680
Maybe if you want to be generous, you know, 70% or 75%.
00:18:54.240 --> 00:19:05.440
You are definitely at least a single, if not triple black belt in dialogue APL, but then even, you know, in BQN and a lot of these other languages, like you might not say that for We WAR, all the array languages.
00:19:05.680 --> 00:19:14.319
But this this is the reason I bring this up is that the this four column idea is definitely not like a white belt, it's not a white belt like teaching topic.
00:19:14.480 --> 00:19:30.240
And I feel like if you're gonna teach yourself online, which is what I did and a lot of folks do these days now, because there's a a cornucopia of resources across dialogs docs and BQN docs and wewa docs and the YouTube videos and a ray cast, you can get to like, I don't know what I like.
00:19:30.319 --> 00:19:31.279
We should actually bring it up.
00:19:31.440 --> 00:19:34.400
Well, uh, should we do should I do it on a different screen?
00:19:34.559 --> 00:19:35.039
What is it?
00:19:35.119 --> 00:19:38.559
The karate belt colors.
00:19:39.359 --> 00:19:40.160
All right, here we go.
00:19:40.400 --> 00:19:44.799
You want to choose in the interface what's your level, and then we'll do like do it simplified.
00:19:45.119 --> 00:19:45.359
Yeah.
00:19:45.599 --> 00:19:52.960
Well, I just like started doing a a simplified APL in you know the the APL challenge that we have running all the time.
00:19:53.200 --> 00:19:53.680
Uh yeah.
00:19:53.839 --> 00:19:57.359
So there we teach everything you need to know as you go along.
00:19:57.599 --> 00:20:00.079
But I've taken to simplifying the language.
00:20:00.240 --> 00:20:07.119
So I I never sh or very rarely, I think never actually, teach the monetic and dadic form of the same primitive.
00:20:07.279 --> 00:20:09.440
So it's sort of pretended to fix APL.
00:20:09.839 --> 00:20:10.079
Right?
00:20:10.160 --> 00:20:13.759
That there's only I just have to choose one of the two primitives in this round.
00:20:13.839 --> 00:20:15.759
In a different round, I could have something else.
00:20:16.000 --> 00:20:33.039
I I often avoid completely discussing operators, I just say they're special syntax or avoid them altogether, often avoiding nested arrays, definitely avoiding all sort of overloads of things and and the syntax is simplified and all of this to ease teaching.
00:20:33.200 --> 00:20:36.880
Then you can always learn the spases and warts and everything later.
00:20:37.119 --> 00:20:41.279
So that's basically that white belt, like the the the very first level you come in.
00:20:41.519 --> 00:20:47.519
Well, so I realized I only shared a single window, so you can't see this, but I'm showing a very, or if you go to the YouTube stream, you might be able to see it.
00:20:47.599 --> 00:20:52.640
Uh, but it's a white belt, yellow belt, orange belt, green belt, blue belt, purple belt, brown belt, red belt, and black belt.
00:20:52.720 --> 00:20:56.319
So I would I would say I'm a blue belt or a purple belt, I don't know, somewhere in there.
00:20:56.400 --> 00:21:01.920
But I there's still a bunch of stuff, like, and this is a uh a perfect example of one of those things.
00:21:02.079 --> 00:21:10.799
It's the I don't want to say perfect knowledge of scalar vector matrix nested, but like I my default is not thinking in that mode at all.
00:21:10.960 --> 00:21:18.640
Like I think primarily in like rank one when I use an outer product, sometimes rank two, or if the problem calls for it, you know, rank two.
00:21:18.960 --> 00:21:21.039
But like I'm rarely ever thinking in rank three.
00:21:21.119 --> 00:21:31.519
And I know like I've seen Marshall do some like triple outer products or double outer products where like he goes up to rank three or four, and that's just like that's just a tool in his tool belt that he does for some kind of problem.
00:21:31.599 --> 00:21:33.039
And I'm like, whoa, whoa, whoa, whoa, whoa.
00:21:33.119 --> 00:21:34.480
Like, what point do you get to learn that?
00:21:34.559 --> 00:21:44.079
Like, in what dungeon do I have to go to in order to pick up the like the brown belt or red belt skill of like a double outer product or a triple outer product?
00:21:44.240 --> 00:21:59.759
And I think it would be amazing if there was like a course that existed out there that literally used these, like it you don't need to use the karate belt colors, but that just has some kind of, you know, you progressively scale up, and you know, the white belt you're showing the one plus two or one, two, three plus four.
00:22:00.160 --> 00:22:01.440
Five, six, like all that stuff.
00:22:01.599 --> 00:22:08.480
But I think that like the purple belt, brown belt, red belt, and black belt topics, we don't touch those as much.
00:22:08.640 --> 00:22:19.039
And I would love to like have a series of array cast episodes where we talk about the like, you know, you have to go to some special dungeon to put some tool or skill in your tool belt.
00:22:19.200 --> 00:22:21.680
Because I I I don't actually know how to acquire those.
00:22:21.839 --> 00:22:28.640
Like I, you know, I arguably you could say that the tacit programming stuff is up there, but that's just because I haven't you can do simple tacit programming.
00:22:28.880 --> 00:22:32.079
You can do advanced, completely explicit programming too, I would say.
00:22:32.240 --> 00:22:41.680
But there is actually a video series that Richard and I did on the rank and the rank operator and dyadic transpose.
00:22:42.079 --> 00:22:47.759
Those are like the that pair, I call them the keys to the array kingdom.
00:22:48.240 --> 00:22:51.759
Because everything else is just specific manipulation.
00:22:51.839 --> 00:22:52.960
You're doing things.
00:22:53.440 --> 00:22:58.640
But dyadic transpose is what you need, generalized transpose, you want to call it that.
00:22:58.799 --> 00:23:08.160
You need that to put things into the right position so that you can chop your arrays using the rank operator in the way that you want.
00:23:08.400 --> 00:23:11.920
And then you need to manipulate things back again to where they came from.
00:23:12.720 --> 00:23:16.079
So we have this series of videos where we like build it up.
00:23:16.240 --> 00:23:23.119
And and I'm actually, I want to boast a little bit and and a shout out to a customer of ours that I that I help.
00:23:23.279 --> 00:23:25.759
Maybe I don't know if I should mention his name, so I'll not do that.
00:23:25.839 --> 00:23:32.240
But we have a customer that I help every um quite often with with various language-related things, usually, sometimes some technical things.
00:23:32.559 --> 00:23:38.400
And lately I've managed to get him to really use the rank operator like properly.
00:23:38.640 --> 00:23:45.599
So now he's wielding double ranks, you know, function, rank specification, rank specification to do things.
00:23:45.759 --> 00:23:48.480
And that's that's black belt rank usage.
00:23:48.720 --> 00:23:50.720
Uh see, this is what this is what we need to do.
00:23:50.799 --> 00:23:55.680
We need to de should we just abolish this episode of diving into repls and just to talk about this?
00:23:56.000 --> 00:23:57.359
We can come back to this another time.
00:23:57.519 --> 00:24:01.200
Yeah, we'll come well, we'll we'll we'll table this and start talking about repls and IDs like we agreed to.
00:24:01.279 --> 00:24:08.880
Uh, but we should have an episode where you know how they have those videos on YouTube where they classify like Pokemon as S tier, A tier, B tier, C tier?
00:24:09.039 --> 00:24:14.160
We should do the same thing, but like with these, uh I'll I'll build a little app and we can drag and drop.
00:24:14.319 --> 00:24:19.920
And the thing is, is the usage of these primitives like fall into different categories, right?
00:24:20.000 --> 00:24:26.960
Like what you're saying here, like double rank, you know, like that's a black belt skill, but like just using rank itself is probably not black belt.
00:24:27.039 --> 00:24:28.960
It's it's probably not white belt, but it's somewhere in between.
00:24:29.039 --> 00:24:39.599
And so that's the thing, is you know, that there's you can you can learn a uh an operator or a function in its like canonical, like the way it's used most of the times.
00:24:39.680 --> 00:24:50.160
But then like if for instance, like the not equal scan, you know, like that is a use of the scan operator that like is above the just like learning scan.
00:24:50.319 --> 00:25:06.000
And so I think it would be like fantastic if we could go through a bunch of primitives and like the different uses of the primitives, create some little like tiered thing, and then over time create episodes like, all right, we're gonna do a black belt episode today on double rank, or you know, a red belt episode today on on some other topic.
00:25:06.160 --> 00:25:32.960
I think that would be fantastic because I I I I'm not that I'm uh what do you call it, uh a barometer for our listeners, but I know I would love to have a bunch of brown, red, and black belt episodes talking talking about these advanced topics the same way that we're gonna have like the primitive talk episodes, but the usage of this stuff there should be like a color mode on Apple Cart where like it colors the entries in Apple cart, but the the built color of using this expression, this function.
00:25:33.039 --> 00:25:34.480
It's like this is advanced.
00:25:35.359 --> 00:25:37.039
It's funny you mentioned the dungeon thing.
00:25:37.119 --> 00:25:41.440
Did I ever tell you about I think it was called uh Runemaster?
00:25:41.680 --> 00:25:42.880
Ever told you about that?
00:25:43.519 --> 00:25:50.720
Yes, I it has come up on the podcast, and I also stumbled into it at one point during my APL deep diving.
00:25:50.880 --> 00:25:53.440
It's it's a little like game online that you can play, right?
00:25:53.680 --> 00:25:55.039
Yeah, dungeon crawler game.
00:25:55.119 --> 00:25:55.440
Yeah, yeah.
00:25:55.599 --> 00:25:56.480
And it's not done yet.
00:25:56.559 --> 00:26:01.279
It's I'm stuck in some technicalities of JavaScript that it's written in.
00:26:01.440 --> 00:26:05.039
These days I should probably just start over and by code the whole thing.
00:26:05.359 --> 00:26:09.279
But that basically is that kind of feeling is what I wanted, right?
00:26:09.359 --> 00:26:14.480
Where you you you're fenced in by the level that you're at.
00:26:14.559 --> 00:26:23.519
And as you acquire skills you're acqu that you can show through trials in this dungeon, that you you know how to wield these these runes, right?
00:26:23.680 --> 00:26:31.759
The field glyphs, then that opens doors to you to access other problems in the in the dungeon that requires those kind of skills.
00:26:32.000 --> 00:26:32.400
Oh yeah.
00:26:32.480 --> 00:26:34.000
I mean, there's a ton of great ideas here.
00:26:34.079 --> 00:26:39.519
Like I don't I'm not a huge video game person, but I know that like skill trees are like a big thing.
00:26:39.599 --> 00:26:44.480
Like there's uh what's that really popular video game where it's like shadow something?
00:26:44.640 --> 00:26:52.160
Anyways, I know people that have played it like 10 times in a row because it's got so much like replayability, no one game of the year, and it's it's like a I don't know, 2D.
00:26:52.240 --> 00:27:03.279
Anyway, someone someone you need to acquire the monetic application to go to dadic rank application, then you need dadic rank application to progress to multi-rank application.
00:27:03.680 --> 00:27:19.279
But I I would go if you had one of those with like a skill tree, I would go down the tacit route as quickly as possible because there's nothing that irritates me more is when I'm doing an APL challenge and they're like, no, no, no, you can't use you gotta wear it where you're missing the braces, and I'm like, I don't need frankly, I don't need the braces.
00:27:19.759 --> 00:27:21.839
Yeah, these are not do that in the APL challenge.
00:27:22.000 --> 00:27:25.119
Once you progress to answering with a function, you can do anything you want.
00:27:25.279 --> 00:27:25.759
Right, yeah.
00:27:25.920 --> 00:27:33.200
It's only the early early days we had to do it exactly the way we we tell you to do it because otherwise you don't acquire those skills to progress.
00:27:33.680 --> 00:27:34.079
Yeah.
00:27:34.319 --> 00:27:36.480
But this is I'm glad we had this little mini episode.
00:27:36.559 --> 00:27:41.039
It turned into kind of a uh less of a mini and more of a medium episode within an episode.
00:27:41.200 --> 00:27:42.960
We will uh maybe that's what we'll do next.
00:27:43.039 --> 00:27:48.240
We'll do our primitive and primitive usage classification and then we'll we'll set up a bunch of topics.
00:27:48.400 --> 00:27:52.319
Max in the chat, or meme god, I should say, says, which belt would code funds be?
00:27:52.559 --> 00:27:53.599
Probably black.
00:27:53.920 --> 00:27:56.720
I mean the question is, what is what does code funds mean?
00:27:56.880 --> 00:28:02.880
You can read and understand the code funds, you know, project, or you can- That's very different from just uh compiling your code usage.
00:28:03.200 --> 00:28:03.839
Exactly, exactly.
00:28:04.079 --> 00:28:10.640
It's probably well, I but that's the thing, is it's not even an APL, you know, thing to get codifunds compiling.
00:28:10.720 --> 00:28:12.880
It's uh it's just like a build system.
00:28:13.359 --> 00:28:14.640
Yeah, that's that's not it.
00:28:14.880 --> 00:28:17.200
But reading it, I mean, uh I should say a different way.
00:28:17.279 --> 00:28:20.319
And and code funds isn't as tacit as it used to be.
00:28:20.480 --> 00:28:21.680
It's not very tacit anymore.
00:28:21.759 --> 00:28:28.640
The the code base, there was a time when it was very tacit, but I think there's a whole different thing, there's a different dimension on that entirely than the notation.
00:28:28.720 --> 00:28:32.319
So one is your style, you're writing explicit, writing tacit.
00:28:32.559 --> 00:29:04.400
Another thing is that that dream that Aaron Sue has that people will use their array languages for uh those kind of problems where they that people haven't even dreamt of being able to apply them, and and having benefits of simplicity, of of conciseness in doing things that people have otherwise made very verbose by using array languages, using techniques that people didn't even imagine you could do.
00:29:04.640 --> 00:29:09.839
So the the point of uh of uh codifens, I think actually we're supposed to say cod fins these days.
00:29:12.000 --> 00:29:20.319
Yeah, it's yeah as in like the fins on a codfish on a cod cod fins because it's not defense anymore because it can do transfens too.
00:29:20.720 --> 00:29:34.400
So anyway, uh the you could you could misunderstand uh codifens as being uh Aaron just wants to show off his his tacit skills, which he doesn't really do anymore, or his coding skills.
00:29:34.640 --> 00:29:47.119
But really, what Aaron wants to show is that it is possible to compile, even difficult to compile uh programming languages as a sort of single pass parallel uh thing.
00:29:48.079 --> 00:29:54.160
Normally we you you go through code in a sort of linear fashion, and he wants to show that you don't have to do that.
00:29:54.240 --> 00:30:04.079
You can take an array-based approach of the whole bag of potatoes rather than one potato, two potatoes, to compiling a language, a language that requires context, like APL.
00:30:04.559 --> 00:30:06.960
That's that's really what he wants to show.
00:30:07.119 --> 00:30:18.079
And then there are some other things that you could do in the same sort of style, and and his uh apprentice, Brandon, uh, has tried to do something similar with parsing YAML using APL.
00:30:18.799 --> 00:30:34.640
So definitely a black belt thing is being able to take a subject that is not traditionally considered an array approachable subject, and applying successfully, of course, the array approach to it.
00:30:35.279 --> 00:30:40.079
And notice this is a completely different dimension than the notation itself.
00:30:40.400 --> 00:30:40.960
Yeah, yeah.
00:30:41.039 --> 00:30:42.720
There's a I mean, there could be a whole world.
00:30:42.799 --> 00:30:48.319
We'd start with the primitive black belt arena, and and then there's the there's like probably functions.
00:30:50.799 --> 00:30:52.799
Yeah, and yeah, array structures.
00:30:52.880 --> 00:30:59.759
I there's also how do you structure your data so that it's amenable to good application of the tools you've got in your array toolbox.
00:31:00.319 --> 00:31:02.720
That's that's also outside of the language itself.
00:31:02.880 --> 00:31:03.200
Yeah.
00:31:03.359 --> 00:31:04.559
And you can get better at that.
00:31:04.640 --> 00:31:07.039
There are all kinds of optimization techniques, right?
00:31:07.200 --> 00:31:14.480
Never mind the primitives themselves, but like how do you run things fast by being sympathetic to the machine that you're running on?
00:31:14.640 --> 00:31:25.039
Like be having a mental model of the memory layout of your data and the internal representation of the data allows you to predict what the performance is going to be like.
00:31:25.359 --> 00:31:25.680
Right.
00:31:25.920 --> 00:31:29.599
And that's like you can also get better belts in that subject.
00:31:29.759 --> 00:31:33.200
I mean, there are all kinds of techniques that you could get belts in.
00:31:33.279 --> 00:31:37.440
So, and and really everything to do with computing, you could involve in this.
00:31:37.519 --> 00:31:39.039
But that's this is a way of tangent.
00:31:39.200 --> 00:31:39.440
Yeah, yeah.
00:31:39.599 --> 00:31:41.599
All right, so we will listener.
00:31:41.759 --> 00:31:49.519
Look forward to a future episode where we, you know, S tier or karate belt rank primitives, and we'll start there and then we'll see where we get to.
00:31:49.680 --> 00:31:51.920
I'm gonna close the karate belt.
00:31:52.000 --> 00:31:54.079
I'm gonna stop uh sharing my screen.
00:31:54.480 --> 00:32:03.759
By the way, kinda, do you know that the Apple card is loosely ordered by uh belt on the on the entries?
00:32:04.160 --> 00:32:04.960
I had no idea.
00:32:05.039 --> 00:32:09.599
No, I thought I I don't think I've ever thought because I mean this is aesthetic ordering, right?
00:32:09.680 --> 00:32:13.039
It never you might think that it's like sorting things somehow, but it's not.
00:32:13.200 --> 00:32:15.279
It doesn't sort by relevance or anything like that.
00:32:15.359 --> 00:32:16.319
There's no smart features.
00:32:16.400 --> 00:32:25.440
There's literally a table of entries, and it literally just does a search for all your search to search space separated search terms, unless you use slashes for regex, whatever.
00:32:25.680 --> 00:32:29.359
And then it just filters away rows that are not matching.
00:32:29.599 --> 00:32:30.559
That's how it works.
00:32:30.720 --> 00:32:41.920
So the ordering that you get, individual things, if you get the two same lines in two different queries, they will always be in the same order, namely the original order in the table, the grand table of everything that Apple card contains.
00:32:42.079 --> 00:32:56.559
And that table is ordered loosely by difficulty or in inverse simplicity, which is why if you look at the entire table, the first thing it has is just zilda, the the constant empty numeric vector.
00:32:56.640 --> 00:32:58.720
That's like the simplest thing you could possibly have.
00:32:58.960 --> 00:33:04.559
And then it goes to monetic right tech, which is just a monetic identity function, and it's uses.
00:33:04.640 --> 00:33:13.200
And then it does the left tech, which is also an identity function, but the one that's slightly more complicated because it does a funny thing about the right side becomes the left side, that kind of thing.
00:33:13.279 --> 00:33:19.920
And then it goes to plus, which is like the simplest arithmetic function, and then minus and then times, and so on.
00:33:20.319 --> 00:33:29.599
I think for our for our the cut like the the tricky part there is that uh it sounds like they're contained both definitions in the glyph.
00:33:29.759 --> 00:33:39.920
Where I would say for our for our ranking operation or ranking execution, you want to split it to like because for me, you know, like I would say that well, what is the simplest?
00:33:40.000 --> 00:33:45.359
It's all it's all philosophical, but you know, for me, like iota is like the very first thing I ever typed into try APL.
00:33:45.440 --> 00:33:53.599
So I consider iota like you know what a sequence of numbers, you learn how to do that like very quickly, but diadic iota, you know, oh that's a different thing.
00:33:54.079 --> 00:33:56.000
You know, yes, it's the same primitive, but that is an offense.
00:33:58.400 --> 00:33:59.759
That's also not so obvious.
00:34:00.079 --> 00:34:00.400
Right.
00:34:00.559 --> 00:34:03.200
Oh, and do you even know I was gonna say, let me know.
00:34:05.200 --> 00:34:05.759
Do you know?
00:34:06.000 --> 00:34:06.400
Sorry?
00:34:06.640 --> 00:34:08.719
What is iota iota zero?
00:34:09.119 --> 00:34:10.000
Iota zero.
00:34:10.239 --> 00:34:10.880
Nothing?
00:34:11.119 --> 00:34:12.559
Well, it can be nothing.
00:34:12.800 --> 00:34:14.639
It has to be something, right?
00:34:15.039 --> 00:34:22.719
I mean I just did it in uh in in Tiny Apple, which I'm not sharing anymore.
00:34:22.960 --> 00:34:29.599
It's an enclosed, empty, it's got you know the the the angle brackets, and then it's enclosed in a box.
00:34:30.159 --> 00:34:31.039
Try APL.
00:34:31.360 --> 00:34:35.440
It's the same thing, it's just formatted differently because it's nothing for the inner thing.
00:34:35.519 --> 00:34:38.239
And that's that's kind of what I meant by nothing.
00:34:39.039 --> 00:34:41.440
Well, it's something which contains nothing.
00:34:41.679 --> 00:34:43.440
Yeah, but those kind of things, right?
00:34:43.679 --> 00:34:50.639
A primitive that might be superficially simple, but can but explaining why this is the result you get is not maybe not so obvious.
00:34:50.880 --> 00:34:56.639
So anyway, there's a question in the chat also can you reverse the sort you reverse sort the the Apple card results?
00:34:56.800 --> 00:35:04.639
No, not in the not in the web interface, but yeah, you can you can extract things yourself, but you can also just you know scroll to the bottom if you want to read it in reverse.
00:35:05.119 --> 00:35:07.360
So why would you want to do that?
00:35:07.440 --> 00:35:09.280
You want the most complicated thing first?
00:35:09.599 --> 00:35:12.239
It's yeah, Max is trying to do things on uh hard mode.
00:35:12.400 --> 00:35:13.519
Anyways, we we definitely should.
00:35:13.599 --> 00:35:17.119
I have a hard stop at uh 11:30, which is in 42 minutes.
00:35:17.360 --> 00:35:21.920
So we definitely uh should well before we get to the halfway mark, switch to our subject.
00:35:22.079 --> 00:35:23.599
Yeah, yeah, switch to our topic for today.
00:35:23.679 --> 00:35:27.760
I mean, tech like I said, technically, we were inside a REPL array box.
00:35:27.920 --> 00:35:31.760
Oh, we were so we weren't entirely off topic, we just took a couple tangents.
00:35:32.000 --> 00:35:33.760
So today, yeah, we're talking about.
00:35:33.840 --> 00:35:41.599
I mean, we I think Adam, you were the one that had this idea because I had announced as an announcement on one of the previous array cast episodes.
00:35:41.679 --> 00:35:44.320
It might have been the first one where we came back.
00:35:44.480 --> 00:36:02.320
I I had this YouTube video ranking repls where I was on a number of criteria saying, you know, TriAPL is better than, you know, or I guess I didn't say that, but you know, WeWAPAD is better than Tri-APL is better than, you know, the cap REPL based on these criteria.
00:36:02.639 --> 00:36:16.079
And then you said, Adam, I would love to do an episode where we just deep dive on the different REPLs and we just share our thoughts on like what's good, what's bad, you know, or what's missing that we wish was there.
00:36:16.239 --> 00:36:22.960
And and also, too, this is a way to like demo and show folks maybe some features that they're not aware of.
00:36:23.119 --> 00:36:26.960
I might not even be aware of them because you know I I spend most of my time now in ArrayBox.
00:36:27.119 --> 00:36:30.400
And before then, I spent most of my time on the online REPLs.
00:36:30.559 --> 00:36:39.920
Every once in a while I would open Ride for dialogue, and I would always have CAP because the CAP GUI is so much better than the online REPL.
00:36:40.239 --> 00:36:48.719
But it that's the thing, is if the online REPL is good enough, I tend to not want to go to like an application because I'm usually programming in the small when it comes to this stuff.
00:36:48.800 --> 00:36:54.320
I'm not building, I'm not launching a workspace with you know 50 different or 100 different functions and state.
00:36:54.480 --> 00:37:00.719
I'm solving small problems, if not small to medium problems that can be done in an online REPL.
00:37:01.039 --> 00:37:04.719
Anyway, so I'm not sure if you want to share your screen and where we want to start.
00:37:05.199 --> 00:37:06.079
I can share my screen.
00:37:06.159 --> 00:37:08.480
You might get a bit like overwhelmed by my screen.
00:37:08.559 --> 00:37:13.119
I I tried arranging the windows on my screen and uh completely failed at doing so.
00:37:13.280 --> 00:37:15.119
So so we'll we'll see what happens here.
00:37:15.199 --> 00:37:23.199
And I'm not even doing all of them, so I'm just doing like a little subset that I well this might this might end up being part one, or uh some of them might we get dropped on the floor.
00:37:24.159 --> 00:37:24.719
We'll see.
00:37:25.039 --> 00:37:28.719
So so what do you what do you say to this?
00:37:29.039 --> 00:37:35.679
So okay, so just I mean we're just getting through what I've got on my screen, which is just some repls, right?
00:37:35.840 --> 00:37:37.199
This is dialogue ride.
00:37:37.519 --> 00:37:44.639
That's the that's the um uh remote and also non-Windows REPL that we have.
00:37:44.800 --> 00:37:48.159
There's one that I haven't put up here, which I guess I should.
00:37:48.480 --> 00:37:55.119
And for for the audio listener, we're looking at one, two, three, four, five, six, seven different windows, or at least that I can count.
00:37:55.519 --> 00:37:58.079
Yeah, I'll bring up the next one in a moment.
00:37:58.320 --> 00:38:02.079
Um over here is that's the Windows dialogue REPL.
00:38:02.480 --> 00:38:08.320
This is the NARS 2000 REPL, or or I mean session, whatever you want to call it, IDE.
00:38:08.880 --> 00:38:10.880
This is triapil down here.
00:38:11.039 --> 00:38:14.159
This is the JEQT going on here.
00:38:14.239 --> 00:38:20.719
This is the online trignu APL, which this actually has two sections, two different ways to run that over there.
00:38:20.960 --> 00:38:28.880
And this is the APL64, which is the new APL Plus, and then with tiny little font size, I'll try to make that bigger in a moment.
00:38:29.119 --> 00:38:36.480
This is the dialogue terminal interface, so it's like it's a text-based thing that they can run as well.
00:38:36.639 --> 00:38:37.679
Look at that here.
00:38:37.920 --> 00:38:55.360
Yeah, they they all work, they all have their upsides and their downsides, and they have their their fans and their detractors, and and then what we don't have here is BQN, Tiny APL, Wii Wire, and we've got nothing QK related at all.
00:38:55.599 --> 00:39:01.519
There's right, there are so many array languages these days that we haven't even touched on.
00:39:01.599 --> 00:39:07.039
There's Nell and yeah, there are many, many.
00:39:07.440 --> 00:39:16.800
And and some of them have online REPLs, some of them have offline ones, some of them can only or and and we say I say REPL here loosely for like everything.
00:39:17.119 --> 00:39:37.280
I I use the word REPL about some of these things, but often the strict meaning of REPL is just what you basically got in a command line interface on your OS, like where you you input the line of text, possibly like multiple lines because it's reps, and then you press enter and you get a result back, and you can do that again.
00:39:37.360 --> 00:39:41.199
You might have some fancy features like recalling previous statements, things like that, but that's basically it.
00:39:41.360 --> 00:39:42.159
So very simple.
00:39:42.400 --> 00:39:48.079
But then there is also the possibility of more interactive user interface elements.
00:39:48.239 --> 00:39:52.320
So even this that runs in the in the terminal, I can I can open.
00:39:52.480 --> 00:39:57.760
See, we've got a status bar that shows various things here, and and I can open a window.
00:39:57.920 --> 00:39:59.360
So it's got a windowing interface.
00:39:59.519 --> 00:40:03.360
Dialogue's terminal thing does not have mouse support.
00:40:03.760 --> 00:40:09.199
So um you have to do everything with the keyboard shortcuts that you have to memorize.
00:40:09.920 --> 00:40:15.679
But it's definitely it definitely can do things, it can open things, you can do full tracing and things like that.
00:40:15.840 --> 00:40:17.840
So uh, but everything text-based.
00:40:18.000 --> 00:40:21.840
And and the other ones have the same features basically, but plus more.
00:40:22.239 --> 00:40:29.519
Try APL is very limited, it's still not just a REPL, it's sort of have a REPL bar where you can enter things to make it more familiar to some people.
00:40:29.760 --> 00:40:46.559
But the normal thing for APLs and APL family languages is to have a what we call a session, which is sort of like a log, like what scrolls up like in your in a OS command line, but you can go up to the previous statements and interact with them.
00:40:46.960 --> 00:40:59.519
That hasn't always been an APL because APL started back when there was typewriter terminals on paper, and but you were able to recall previous statements and then edit them, so that did exist.
00:40:59.760 --> 00:41:06.320
And then as soon as it became screens, people started taking advantage of that, drawing, editing windows and so on.
00:41:06.400 --> 00:41:14.239
So so IDEs and with windows and trace windows and so and all that stuff has always been there in in APL land.
00:41:14.559 --> 00:41:28.400
And even back when it wasn't, even if it was just typewriter, you could still suspend in the middle of execution, like due to an error or or even an explicit stop that you said stop bit, and then you could change your functions that are on the stack and then continue.
00:41:28.559 --> 00:41:30.719
So this interactivity has very much been there.
00:41:31.039 --> 00:41:36.239
And uh the development of that has been in parallel to what the rest of the world went with.
00:41:36.480 --> 00:41:45.840
I don't think there were any uh early IDEs that had the sort of interactivities that the APL had even back in the in the typewriter days.
00:41:46.159 --> 00:41:56.800
It's and then the way that APLs work, especially like core APL and APL dialects, is then become very different from how our other program writers work.
00:41:56.880 --> 00:42:06.320
A lot of people that come to APL, they go like, oh right, I edit my text files and then I run it, and if it I look at the error message, and then I change my code and I start over again.
00:42:06.480 --> 00:42:08.079
But that's not how APLs work.
00:42:08.239 --> 00:42:13.440
They will often do a single run of their function that's a typical work day.
00:42:13.519 --> 00:42:18.239
They've got some some top-level function, and they'll run that once at the beginning of the day.
00:42:18.480 --> 00:42:32.239
And then they just have that stack and they they they go in and out of various levels of subfunctions that they're calling the whole day, and and they get they hit errors and they edit the edit the functions and fix the problems and continue execution.
00:42:32.400 --> 00:42:35.599
Only at the end of the day they could shut down the system.
00:42:35.840 --> 00:42:40.159
That's very different than people that start over and over and over and over every time there's an error.
00:42:40.559 --> 00:42:48.320
So we've got facilities to inspect what's going on on the stack, and and there's super tight, especially in APL.
00:42:48.400 --> 00:42:58.880
I think of all the array languages, the one that has the most of this, and it's not just I like it, all the APLs have super tight integration between the language and the development environment.
00:42:59.039 --> 00:43:02.400
So it's like really an underscore on the I and IDE.
00:43:02.559 --> 00:43:09.599
Other languages might have something they call an IDE, integrated development environment, but but it's so integrated that you cannot separate them.
00:43:09.760 --> 00:43:23.280
You can the people have been talking about, oh, we should make have like a language engine where other tools can like call into an APL executor core that then uh crunches the data and sends the results back.
00:43:24.000 --> 00:43:32.880
But you cannot cut with a knife the language, the array crunching parts away from the IDE parts.
00:43:33.119 --> 00:43:44.239
They are sort of intricately connected in dialogue and think and also other APLs, commercial APLs, they do have special interpreters that are runtime interpreters for actual delivery of end user applications.
00:43:44.559 --> 00:43:53.840
And those you can't access necessarily the the IDE parts, although although they might actually be there hidden inside, just sort of prohibited.
00:43:55.519 --> 00:43:59.199
But other than that, they it's very much the same thing.
00:43:59.280 --> 00:44:03.679
You can't really You you can't really separate and just give you an example of that.
00:44:03.760 --> 00:44:06.480
So let's say I want to open an edit window.
00:44:06.719 --> 00:44:12.239
So in many languages and IDs and so on, you might use menu bars, and in some APL IDs, you can do that as well.
00:44:12.320 --> 00:44:17.280
You go up and like, okay, create a new module function, whatever it might be, and then it creates that.
00:44:17.440 --> 00:44:21.519
But you can also always do it with a function or command.
00:44:21.679 --> 00:44:25.119
So I want to create a function foo, and it opens up here.
00:44:25.280 --> 00:44:30.320
Now, syntactically speaking, this is a function and this is an array.
00:44:30.480 --> 00:44:40.559
I just applied a function to an array and it had a side effect of opening up an editor that I can that I can then use to manipulate the function foo that doesn't quite exist yet.
00:44:41.199 --> 00:44:52.000
But because this is just a normal APL function, this is just a normal APL array, if I insert the reverse glyph here, I'm now editing oof instead.
00:44:52.719 --> 00:44:54.239
This is just normal APL.
00:44:54.480 --> 00:45:01.920
And if I insert an each over here, then I'll be editing F and O, and they are they're all here.
00:45:02.559 --> 00:45:06.719
You can't necessarily see that they're all here, but if I go we've got window.
00:45:07.440 --> 00:45:09.519
So we can see here, it might be a little smaller.
00:45:09.599 --> 00:45:13.679
We can see the editor currently has open foo and oof and o and f.
00:45:13.760 --> 00:45:18.880
We actually tried opening O twice, but this it knows that it's the same thing, so it opened it only once.
00:45:19.119 --> 00:45:20.800
These are this is just APL code.
00:45:21.039 --> 00:45:23.760
I can take this and I can embed that into my normal code.
00:45:24.079 --> 00:45:30.000
So this sort of breaks the whole mold you have of what even is an IDE.
00:45:30.480 --> 00:45:31.760
Is this just the language?
00:45:31.920 --> 00:45:36.159
And the language has in self-editing features.
00:45:37.280 --> 00:45:41.280
Well, I guess the well is it the more important question is is is does it matter?
00:45:41.440 --> 00:45:45.519
I mean, I don't actually spend a ton of time thinking about REPL versus IDE.
00:45:45.599 --> 00:45:50.159
I went and asked Gemini, is there an umbrella term for REPL and IDE?
00:45:50.480 --> 00:45:55.039
And it gave a really long explanation, but the summary is the summary is no.
00:45:55.679 --> 00:45:56.639
There's not a word.
00:45:56.800 --> 00:46:00.320
It it it's suggested programming environment, but let's be honest.
00:46:00.480 --> 00:46:07.599
On here on the array cast, we're not about to introduce something into the the wider vernacular at large, and it's not going to get picked up.
00:46:07.760 --> 00:46:10.719
So I think we are just stuck calling them REPLs and IDEs.
00:46:10.800 --> 00:46:26.639
But I mean it it begs, I was thinking while you were explaining all this, like what do you call you know, we want typically when I see folks doing WiWAP programming and they're not in the WiWAMP, you know, Kai uses I think it's VS Code, which is a code editor in my mind, but it uses a plugin.
00:46:26.960 --> 00:46:28.719
So like what is a code editor plus a plugin?
00:46:28.960 --> 00:46:30.079
Does that equal yeah?
00:46:30.239 --> 00:46:31.840
Does that equal an an IDE?
00:46:32.000 --> 00:46:33.440
Because it's it's clearly not a replica.
00:46:33.599 --> 00:46:37.599
Yeah, VS Code, it can it can take it can take advantage of language engines.
00:46:37.679 --> 00:46:47.360
So it can have like okay, VS Code itself doesn't really know about the programming language, but you have a plugin, and the plugin contacts some other thing that's outside that doesn't know about the language and can query things.
00:46:47.519 --> 00:46:55.119
And and sometimes I say like that ride, which is used to at least stand for remote IDE, is not an IDE at all.
00:46:55.360 --> 00:47:13.360
I like to say that it's pretty dumb, it's just it's just an HTM renderer, because in fact, behind this remote IDE is actually another, a real IDE, either one of these, the command line ones, or or one of these, the the Windows one, where the interpreter itself has has the graphic facilities.
00:47:13.599 --> 00:47:33.840
So if I type something here, you might think, oh right, it looks like it's the whole integrated thing, but I believe with a little bit of cleverness, you can't actually see what I'm doing here, but and I'm clicking in my in my task bar, and I think I will be able to find the window behind it.
00:47:34.000 --> 00:47:34.559
There you go.
00:47:34.719 --> 00:47:39.599
So what's going on here is actually I did not type this IOTA 2.3.
00:47:39.840 --> 00:47:41.199
I can make this a little bit bigger.
00:47:41.599 --> 00:47:42.239
You can see it.
00:47:42.480 --> 00:47:45.760
But anything I type over here happens over here.
00:47:45.920 --> 00:47:53.440
So what's actually happening here is that is that this IDE, this language engine, which is the same thing, is in charge completely.
00:47:53.920 --> 00:48:01.119
And this ride here is just a front end that renders a user interface for this language engine.
00:48:01.199 --> 00:48:05.599
So this is a whole different concept of IDE than again something else here.
00:48:06.480 --> 00:48:09.360
The the thing like VS Code, as you say, is a code editor.
00:48:09.679 --> 00:48:19.280
When I open something up here and I edit that, it might look like the source is actually here in ride in this window, but it's not.
00:48:19.519 --> 00:48:26.559
All that happens here is that ride sends this information back to the interpreter that lives over here and it kept keeps track of the source code.
00:48:26.719 --> 00:48:30.559
Source code lives inside here, it has loaded in here, and ride has no idea.
00:48:30.639 --> 00:48:37.840
Now that there are no windows that are open, ride does not even know that foo exists or has a specific definition or anything.
00:48:38.000 --> 00:48:39.519
Everything lives over here.
00:48:39.679 --> 00:48:41.280
So what is ride even?
00:48:42.000 --> 00:49:02.480
Yeah, I think it's I think it's a fool's errand in 2026 to try and uh taxonomize this stuff because it's just we used to live in a world that was simpler, and now in between REPLs and IDEs and code editors and plugins and language engines or language servers, it's it's like honestly, there should be a new term.
00:49:02.559 --> 00:49:06.880
Like uh Gemini's suggestion programming environment, it seems like a decent one, right?
00:49:06.960 --> 00:49:12.480
It's just an environment which you're programming and I don't think that it's something you have to invent the new term for.
00:49:12.559 --> 00:49:16.880
Yes, a programming environment, even if it isn't a technical term, that it everybody will understand.
00:49:16.960 --> 00:49:18.800
That's an environment where you can do the programming.
00:49:19.199 --> 00:49:46.800
Whether the actual code execution happens there in that environment, like it does in the Windows IDE here, or it does in the TGY version we have, or it does in any of the online repls that are running like WASM or a or a JavaScript implementation of the programming language, or whether the actual execution happens somewhere else in a language engine, or whether it's just a front end that's a graphical rendering, but the whole logic of which windows are open and so on is actually somewhere else.
00:49:46.880 --> 00:49:48.000
That doesn't really matter, right?
00:49:48.239 --> 00:49:48.480
Right.
00:49:48.719 --> 00:49:52.719
It really doesn't, unless you lose your internet connection, in which case it doesn't matter.
00:49:54.239 --> 00:50:01.360
But yeah, so so I think with that out of the way, just that just this is just the introduction, basically, so we know what are we even talking about.
00:50:01.519 --> 00:50:19.280
So we're talking about programming environments where you have some sort of text field, either single line or multi-line, where you can enter some array language code, and ideally there's some additional features that makes your life nicer, right?
00:50:19.519 --> 00:50:27.360
And the very bare minimum being able to recall at previous entered expressions and edit uh expressions.
00:50:27.760 --> 00:50:35.679
And it wasn't always like that, you know, in back in the in the typewriter terminal days on paper, you type a letter, that letter basically stays there forever.
00:50:35.840 --> 00:50:39.039
You can't, there's no back backspace did that.
00:50:39.119 --> 00:50:43.599
It went back, moved the cursor backwards, but it didn't remove the letter that you just typed.
00:50:43.840 --> 00:50:50.239
And uh there's a little bit of like as a fun thing, there's a little bit of a remnant of that still in in dialogue.
00:50:50.480 --> 00:51:00.000
So if if I type, say a circle, um, and so in and I go back to the circle and I type a vertical bar, I get the reverse symbol.
00:51:00.239 --> 00:51:06.159
The point is like the circle doesn't go away, it doesn't get overwritten by um by the new character.
00:51:06.400 --> 00:51:07.039
It's actually false.
00:51:07.119 --> 00:51:09.280
It says down here in the corner, it's in the replace mode, right?
00:51:09.360 --> 00:51:11.599
I can I can switch that between insert mode and replace mode.
00:51:11.679 --> 00:51:15.280
It's not if replace mode, it's over type mode, over strike mode.
00:51:15.519 --> 00:51:18.000
And and dialogue has a little remnant of that left.
00:51:18.079 --> 00:51:20.880
I'm not sure if other APLs have any remnant of that left.
00:51:21.119 --> 00:51:23.199
It used to be even more in the really old days.
00:51:23.360 --> 00:51:31.440
It used to be that like let's say you typed an L and it was a mistake and you wanted to type an E, then you could actually type an E or an F even on top.
00:51:31.519 --> 00:51:34.719
So like you imagine you type an F on top of an L, it becomes an E, right?
00:51:34.800 --> 00:51:38.320
Because you get top and the middle bars and the bottom bar, things like that.
00:51:38.480 --> 00:51:41.039
Uh, you could do if it looks right, then it would be right.
00:51:41.119 --> 00:51:42.960
It would do all the math for that.
00:51:43.119 --> 00:51:53.199
So even if non-APL symbols, you like type an S and then type a vertical bar on top, and you get a dollar sign, even though that's not syntactically valid APL, but hey, it looks like a dollar sign, better be.
00:51:53.840 --> 00:52:03.199
So so then from there, we build up more and more features and hand holding and niceties and helps and so on.
00:52:03.280 --> 00:52:17.199
You've got syntax coloring in some of them, uh, we've got autocomplete uh in uh in some of them, multi-line entry of of things depending on whether the language supports that kind of thing.
00:52:17.360 --> 00:52:23.440
Um language bars, as you can see, that helps you to enter the the Unicode glyphs.
00:52:23.920 --> 00:52:43.760
And yeah, that keyboard shortcuts for doing various actions, even macros, you can set your own keyboard shortcuts to do things, output formats like we've already seen when you do uh an IO2 2.3, not this right, it's just following along over here, just mirroring everything.
00:52:43.840 --> 00:52:44.960
It's the same thing.
00:52:45.039 --> 00:52:47.199
But there's different ways that we could show this, right?
00:52:47.280 --> 00:52:48.320
So we got facilities.
00:52:48.400 --> 00:52:58.159
So in the early days, we would have like functions that would draw arrays in certain ways, and then it became built-in and it just showed an example of a user command.
00:52:58.559 --> 00:52:59.760
Well, actually, let's pause here.
00:53:00.159 --> 00:53:06.400
So this is the default in I believe cap and tiny Apple.
00:53:06.480 --> 00:53:09.920
I could be wrong about that, but uh, I'm almost positive it's the default in cap.
00:53:10.559 --> 00:53:22.559
What's the I didn't actually know this was configurable, and I just thought this was like artistic choices, and it kind of confused me because when you use this Mac style, if you just do IOTA 5, it boxes it with some arrows.
00:53:22.800 --> 00:53:27.679
And I've always noticed that they have like depending on the implementation, there's like different symbols.
00:53:27.760 --> 00:53:30.000
Sometimes you get the little enclosed torch shoe.
00:53:30.079 --> 00:53:31.840
I'm seeing the tilde at the bottom here.
00:53:32.000 --> 00:53:33.119
Sometimes they got arrows.
00:53:33.519 --> 00:53:35.119
What the heck's all this stuff?
00:53:35.280 --> 00:53:36.239
I mean, what are we talking about here?
00:53:36.559 --> 00:53:42.800
There is documentation for this, but I can just briefly say this is a very old function in the APL the APL world.
00:53:42.880 --> 00:53:44.079
It's not specific to dialogue.
00:53:44.159 --> 00:54:00.079
There's an old function called display, which you could look at, and it takes a it with the advent of nested arrays, then the this the this default clean display form, which we can we can look see what that looks like, became sort of harder to read, right?
00:54:00.159 --> 00:54:14.960
You can sort of see because of the double spacing that these are like six small vectors of vectors, but there are also limitations to this because if we if we try to do if you do like three, four reshape enclose two, two reshape iota four.
00:54:15.199 --> 00:54:17.280
So this is pretty horrible, right?
00:54:17.599 --> 00:54:29.119
You can't really tell right the difference between this and whether they would just be like notice this the these two are two separate vectors, but but down here we've got a like a two by two matrix, and you can't you can't tell.
00:54:29.280 --> 00:54:29.760
Right, yeah.
00:54:29.920 --> 00:54:35.039
So then somebody wrote or some people worked on made made a function that that drew this instead.
00:54:35.199 --> 00:54:50.400
Actually, originally it it was drawn not with with these nice line drawing characters that this that make this up, they would because they weren't available, so they would use like minuses and pluses in the corners, the arrows were there, and and they all of this has significance.
00:54:50.480 --> 00:54:55.679
So what's happening here is that every arrow indicates an axis.
00:54:55.920 --> 00:54:59.119
So there's a trailing axis over here that has length two in this case.
00:54:59.199 --> 00:55:00.880
There's a leading axis going down.
00:55:01.119 --> 00:55:02.960
There's an outer, so this is nested arrays.
00:55:03.199 --> 00:55:05.920
There's the outer array is also a matrix, you can see that.
00:55:06.079 --> 00:55:08.480
And the bottom left has a type indicator.
00:55:08.719 --> 00:55:12.239
The the tilde means let me change the front here and make it a little bit clearer.
00:55:12.320 --> 00:55:15.039
I think the tilde means it's numeric.
00:55:15.199 --> 00:55:18.079
Uh, the epsilon means it's nested.
00:55:18.320 --> 00:55:20.480
The there are other possibilities.
00:55:20.639 --> 00:55:24.400
If it's just a straight out line, like here, that means it's text.
00:55:24.559 --> 00:55:26.639
It's undecorated basically, it's text.
00:55:26.800 --> 00:55:35.119
So if we if we go in like format each of these, now you can see that the only thing that that visibly changed was the decorator and the bottom, bottom left.
00:55:35.199 --> 00:55:37.679
Instead of being the tilde for numbers, it means it means this.
00:55:37.760 --> 00:55:43.119
If we if we try to write like ABC1, two three, it's it says it's nested.
00:55:43.360 --> 00:55:53.840
If we if we do this, so it's it's a four-element vector, that the first element is character and the remaining elements are numbers, it says plus, it means more than one type, which means it's actually lossy, right?
00:55:53.920 --> 00:55:55.119
You can't tell what's what.
00:55:55.280 --> 00:56:01.280
If I write these two arrays, um where so they they look the same.
00:56:01.440 --> 00:56:07.360
So this the format isn't perfect, but it gives you a pretty good image of what's going on with some hints to to what's going on.
00:56:07.519 --> 00:56:10.239
And there are other decorators, there are other some other other things.
00:56:10.320 --> 00:56:19.599
If you if you try to do a uh uh a many-dimensional array, so we can see how it it sort of tries to stack up leading X's.
00:56:19.840 --> 00:56:22.960
This is the this is it's basically decoration on the old format.
00:56:23.039 --> 00:56:32.639
So this is how it would look without any decoration, and then we just add boxes and add indicators to show that we've got X's, but it's not very clear where exactly the X's are.
00:56:32.800 --> 00:56:34.480
The spacing sort of shows it as well.
00:56:34.639 --> 00:56:40.800
These are these are layers, and these, and then you've got a Q a cube here, and then it's it's a hypercube.
00:56:40.960 --> 00:56:41.760
So that's what's going on.
00:56:41.840 --> 00:56:43.119
But there are other other ways you can do that.
00:56:43.360 --> 00:56:44.880
What was the first expression that you tested?
00:56:44.960 --> 00:56:46.480
It was because I'm doing this in a ray box.
00:56:46.639 --> 00:56:49.360
I'm testing, so cap seems to be doing what you're showing here.
00:56:49.599 --> 00:56:52.400
Tiny Apple does something slightly different.
00:56:52.639 --> 00:56:53.199
I don't know exactly.
00:56:53.360 --> 00:56:54.000
Yeah, what was this?
00:56:54.079 --> 00:56:55.599
So this uh one more up?
00:56:55.920 --> 00:57:03.199
This one was so you're basically making a matrix and then enclosing it and then doing another reshape on it.
00:57:03.360 --> 00:57:12.480
Yeah, uh so tiny apple for if we do two, three, and so if we enclose that and then we go three, four.
00:57:13.360 --> 00:57:21.760
So yeah, tiny apple does something different, it doesn't look like they use the you know type indicators, they just use the arrows everywhere.
00:57:21.840 --> 00:57:33.519
Although I do some variations on this as well, and and this is just the built-in one, so to say, the one we can enable with this boxing user command, it's just one of the many variations on this that exist.
00:57:34.000 --> 00:57:45.360
I discovered that in J when I was implementing the boxing that by default they use the terrible ASCII things, but then there was, I want to say it was Joshua My aka Oracle.
00:57:45.440 --> 00:57:47.440
If it wasn't that individual, it was someone else.
00:57:47.599 --> 00:57:52.079
They pointed me towards the fact that you can set, like, yeah, like you're showing here, the settings of these.
00:57:53.679 --> 00:58:00.880
Yeah, and uh it was some horrible incantation that I had to put into whatever the the execution, but then it looks a lot nicer.
00:58:01.199 --> 00:58:04.559
So it actually looks like from what I can tell that this this is the REPL, right?
00:58:04.639 --> 00:58:12.079
So the the the GUI thing, and it has menu items for some of those horrible incantations you would otherwise have to enter to switch this.
00:58:12.320 --> 00:58:12.639
Right.
00:58:12.880 --> 00:58:13.679
So it does it.
00:58:13.760 --> 00:58:20.400
This REPL is sort of bare bones, but it has it, it has the basic stuff and it has some niceties and and some help.
00:58:20.719 --> 00:58:24.320
The the configuration as well, like is very bare bones.
00:58:24.559 --> 00:58:32.559
So here so you can configure it, but all it does is it opens up this equivalent of the JSON file or some kind of YAML file back there.
00:58:32.800 --> 00:58:34.400
Yeah, it's like an in the any file thing.
00:58:34.639 --> 00:58:40.400
Dialogue has has a proper GUI for configuration where you with lots of tabs and then and settings.
00:58:40.559 --> 00:58:41.920
Not everything you can configure like this.
00:58:42.000 --> 00:58:52.079
Sometimes you have to like go and configure it in configuration files, or otherwise, but at least it's got it's got some some GUI, like capturing keystrokes and things for which for setting up shortcut keys.
00:58:52.239 --> 00:58:55.039
Same thing goes for for the for ride.
00:58:55.519 --> 00:59:00.159
It's got this nice looking GUI for that comes up on a different screen, of course.
00:59:00.639 --> 00:59:02.719
You can modify the keyboard even, right?
00:59:03.280 --> 00:59:04.320
Set multiple keys here.
00:59:04.400 --> 00:59:06.000
That's got lots of lots of things you can configure.
00:59:06.159 --> 00:59:11.760
Again, it's not everything, but so some things you need to configure otherwise, but uh but the most common things you can set.
00:59:12.159 --> 00:59:17.599
And so is there just to wrap up the the pretty printing of arrays?
00:59:17.840 --> 00:59:22.960
Like so uh because I guess this this came about due to the introduction of nested arrays.
00:59:23.199 --> 00:59:33.920
Yeah, at that point it became necessary to to and so the the difference between this pretty printing, like when you're looking at a nested array in the like what what do we call these modes?
00:59:34.000 --> 00:59:35.760
Are they the minimax like display?
00:59:36.239 --> 00:59:39.280
But there are actually a lot, there's I mean, I could show you the help for it.
00:59:39.440 --> 00:59:41.760
There's a lot of a lot of settings here.
00:59:41.840 --> 00:59:44.880
So there's this is the style, it's called officially the style.
00:59:45.039 --> 00:59:50.719
So there's there's none, which is like just plain, like you saw before, with no decorations.
00:59:50.880 --> 00:59:52.639
Then there's the the min style.
00:59:52.800 --> 00:59:58.400
So if we go up and take our example, well, maybe we should do a little bit more interesting example than this.
00:59:58.960 --> 01:00:00.960
We can do something like this.
01:00:01.920 --> 01:00:07.519
And okay, so so here's the min style.
01:00:07.679 --> 01:00:09.360
You can't really tell the types, right?
01:00:09.519 --> 01:00:13.599
You can't if a was a was an and numeric character.
01:00:13.760 --> 01:00:18.000
No, sorry, if a with a here was a character one, you can't really tell what it is.
01:00:18.159 --> 01:00:22.000
And so this looks like it's just numbers, but it's not, it's actually a character.
01:00:22.159 --> 01:00:24.320
But it's a very clean, it's very compact.
01:00:24.559 --> 01:00:30.960
Then there's a there's a mid-level, which is exactly the same thing as a min level, but with decorator characters on.
01:00:31.039 --> 01:00:37.199
So you can see the X's here, and now you get an indication that this one one actually we should rewrite over here.
01:00:37.440 --> 01:00:39.280
One one, which you can see.
01:00:39.679 --> 01:00:41.280
You can see these two are not the same.
01:00:41.440 --> 01:00:41.679
Right?
01:00:41.760 --> 01:00:44.639
This one has a plus in the corner, and this one has a tilde.
01:00:44.719 --> 01:00:48.719
So that means this one is mixed type and this is numeric, even though they look the same.
01:00:48.960 --> 01:00:57.280
But it it basically puts the indicators on the borders, like sharing border lines, but it says tries to be really compact, but that means it's it's also lossy.
01:00:57.360 --> 01:00:59.039
There are things it cannot really show.
01:00:59.199 --> 01:01:05.360
If we if we do further enclosures, then it starts it starts padding around and you can start seeing a bit more.
01:01:05.599 --> 01:01:12.239
And then we can turn on the style to max, and at that point it blows totally blows up, it becomes giant.
01:01:12.400 --> 01:01:15.119
You see, compare the the sizes of these two.
01:01:15.360 --> 01:01:21.280
This is the same array shown in two different styles, but this one is way more informative, you can see exactly what's going on.
01:01:22.159 --> 01:01:26.960
Whereas this one is somewhat limited in what you can see, but it's very robust.
01:01:27.119 --> 01:01:32.320
I personally prefer the min most of the time, and now in dialect 20, I have to plug that a little bit.
01:01:32.400 --> 01:01:37.039
There's a new thing we can do, which is the array notation.
01:01:37.760 --> 01:01:39.440
So I like this.
01:01:39.679 --> 01:01:43.280
It's maybe not as pretty as this, but it tells me exactly what I have.
01:01:43.440 --> 01:01:46.159
I mean, there's no ambiguity here at all.
01:01:46.320 --> 01:01:49.760
And not only that, the best thing with this is this is executable notation.
01:01:49.920 --> 01:01:54.880
So I can just go in here and say, you know, reverse each, and that's just valid.
01:01:55.039 --> 01:01:56.480
I can I can reformat it.
01:01:56.559 --> 01:01:59.280
I can do and then it's got syntax coloring and so on.
01:01:59.360 --> 01:02:00.320
But this is the output value.
01:02:00.559 --> 01:02:04.320
Output values are input values, which I think I think is a really nice thing to have.
01:02:04.960 --> 01:02:06.400
Very interesting.
01:02:06.719 --> 01:02:14.400
Going back to the the chat, just so I haven't been catching uh following along there while I've been speaking, saying the APL session is like a debuggable shell.
01:02:14.480 --> 01:02:14.639
Yeah.
01:02:14.800 --> 01:02:20.880
Smalltalk even allows users to modify things like menu bar and color theme and write as a front end to the interpreter.
01:02:21.119 --> 01:02:22.880
Yeah, just to mention that.
01:02:23.119 --> 01:02:24.559
Look at the the can you see that?
01:02:24.639 --> 01:02:27.760
It's tiny, but you can see the the help menu item up here.
01:02:28.000 --> 01:02:31.840
So again, I can do SCE is the is the session object.
01:02:32.000 --> 01:02:43.840
So I can there's a a menu bar, and the menu bar has an item called help that has a caption, and I'm going to just set that caption to hello arraycast.
01:02:44.639 --> 01:02:48.320
And now the menu item up here is hello array cast.
01:02:48.960 --> 01:02:50.400
We can change change that back again.
01:02:50.480 --> 01:03:00.239
So yeah, we can to a certain degree we can uh we can manipulate the IDE itself, and I can I can hide the menu bar, I can add my own menu items and and buttons and so on.
01:03:00.400 --> 01:03:15.599
And then also mentioned in the chat, instead of using the boxing, there I made a user command called wrapper, and which creates an APL expression similar to what we do with the array notation, but it just like gives you a one-liner expression for things.
01:03:15.840 --> 01:03:20.880
So if I write, well, we can take the example from up here, actually you see what it does with that here.
01:03:21.360 --> 01:03:22.800
Oh, boxing is still on.
01:03:22.880 --> 01:03:23.920
That's a bit awkward.
01:03:24.239 --> 01:03:34.000
But so notice that it it returned the same thing because that's this is basically the the minimum or somewhat minimal representation of it, but it it gives you an APL expression for something.
01:03:34.079 --> 01:03:36.880
So if I don't know what something is, I can find out.
01:03:36.960 --> 01:03:39.360
Remember, I said earlier iota iota zero?
01:03:39.920 --> 01:03:41.760
Let's say we don't have boxing on at all.
01:03:41.920 --> 01:03:42.320
Nothing.
01:03:42.480 --> 01:03:43.679
This is what we sh we get.
01:03:43.840 --> 01:03:44.880
So this is a nice example.
01:03:44.960 --> 01:03:46.400
Like you get something like this.
01:03:46.559 --> 01:03:48.000
Uh, what am I gonna do with this?
01:03:48.079 --> 01:03:48.880
Uh it's nothing.
01:03:49.039 --> 01:03:52.239
Well, it's something, I can select it, it's represented by two spaces.
01:03:52.320 --> 01:03:53.599
So we can turn boxing on.
01:03:53.760 --> 01:03:56.159
Box on, uh style minimal.
01:03:56.559 --> 01:03:57.360
Oh, we get this.
01:03:57.519 --> 01:03:58.639
Not very useful, right?
01:03:58.719 --> 01:04:02.159
We can turn we can turn them in the medium level.
01:04:02.400 --> 01:04:03.519
This helps a little bit.
01:04:03.679 --> 01:04:09.760
It says this tells us, oh, it's it has one empty axis, that's what this means, and it's numeric.
01:04:09.920 --> 01:04:12.000
So, but actually, it's not the full truth.
01:04:12.079 --> 01:04:16.159
You might think this is the same thing as as just the empty empty vector, but it's not.
01:04:16.400 --> 01:04:26.880
We can go to the max level, and now we can see that okay, this is you can see there are no there are no this looks like we're we're joining some kind of dark religion or something like that.
01:04:27.440 --> 01:04:42.239
We've got to worship the so what this is saying is that there are no X's, that meaning the outer the outer frame here is a scalar, it's nested, it has a single element inside, which is has a single axis.
01:04:42.320 --> 01:04:52.719
There's the instead of an error, there's this symbol meaning it's an empty axis, so it's a length zero vector that is has the prototype of zero because it's numeric.
01:04:53.039 --> 01:04:58.800
So for this you can discern what it is, but you have to really think and and know things in array notation.
01:04:58.960 --> 01:05:01.679
You do the same thing, it it gives you this, right?
01:05:01.760 --> 01:05:05.599
It just says it's enclosed delta, which is nice, you can understand that.
01:05:05.760 --> 01:05:08.400
And I think the wrapper is going to give you the same thing.
01:05:08.639 --> 01:05:11.920
Yeah, okay, our boxing is still on, so it looks a bit funny.
01:05:12.000 --> 01:05:15.199
Yeah, it says it's just this in close delta again.
01:05:15.679 --> 01:05:27.440
But you can have weird things that are that are sort of hard to understand, like zero, six, one, eight, reshape, enclose a null zero.
01:05:28.320 --> 01:05:30.480
Notice that we got nothing, right?
01:05:30.639 --> 01:05:32.000
Literally it printed nothing.
01:05:32.239 --> 01:05:33.360
So what is this array?
01:05:33.840 --> 01:05:35.599
Let's turn turn boxing on again.
01:05:35.760 --> 01:05:38.400
Yeah, we can use a box style min.
01:05:39.039 --> 01:05:43.599
This is where if I was doing serious editing, I would cut in the F1 box box, box box.
01:05:43.920 --> 01:05:44.239
Yeah, yeah.
01:05:44.480 --> 01:05:50.159
Well, so so if I turn it even to mid, we get like a lot of white space, right?
01:05:50.480 --> 01:05:51.280
It's useless.
01:05:51.519 --> 01:05:54.480
If you turn it to max, we get this.
01:05:54.880 --> 01:05:58.800
Okay, now we can begin to see that this is actually a giant empty array, right?
01:05:58.880 --> 01:06:06.960
With lots of we see the Outer level here is this it's it's a empty axis followed by a non-empty axis with a non-empty axis and a non-empty axis.
01:06:07.039 --> 01:06:09.679
So a rank four array, that's the that's this, right?
01:06:09.760 --> 01:06:11.599
Every element is this.
01:06:11.840 --> 01:06:16.559
Maybe we should make the numbers here a bit smaller so we just see what it's easier to see what's going on.
01:06:17.119 --> 01:06:20.960
And uh and array notation will give us give us this, right?
01:06:21.039 --> 01:06:22.159
So this is also a nice thing.
01:06:22.320 --> 01:06:31.679
So we can see the square brackets represent uh rank basically, and we can see that the the leading axis is is compressed to length zero zero, right?
01:06:31.760 --> 01:06:42.639
So so it has a leading empty axis followed by two axes that are uh that are non-empty, and then the innermost axis, the trailing one, which is a vector axis, then right.
01:06:42.880 --> 01:06:52.719
So that's that's in here, and then we we it the content, actual content, is a space, the prototypical character, a null, and and the zero.
01:06:52.800 --> 01:06:54.880
So this is a very nice way to see it as well.
01:06:55.599 --> 01:06:56.480
That's wild.
01:06:56.639 --> 01:07:01.920
This is definitely like at least brown belt level stuff.
01:07:02.239 --> 01:07:07.760
Yes, there are a lot of options for this kind of thing, and various IDEs will have various ways of showing it.
01:07:07.840 --> 01:07:18.159
There are some of the newer things that use both like uh both thick and thin and then and double struck line drawing characters to show things.
01:07:18.400 --> 01:07:26.880
Bqn has its own thing with like dotted lines to show things, and there are lots of different ways you can you can get to these things.
01:07:27.039 --> 01:07:29.039
You don't have to print it into the session.
01:07:29.440 --> 01:07:33.519
Dialogue also has things like it's called show?
01:07:34.000 --> 01:07:34.800
Show view.
01:07:34.880 --> 01:07:36.320
I don't even use this anymore.
01:07:36.480 --> 01:07:38.000
Oh, not show view.
01:07:38.320 --> 01:07:40.239
I mean someone in the chat just mentioned display.
01:07:40.480 --> 01:07:42.320
Yeah, yes, there's display as well.
01:07:42.480 --> 01:07:45.920
Display is just it's just a temporary display.
01:07:46.480 --> 01:07:56.559
That's what I thought actually reper was gonna be, because I was thinking I probably still prefer min as well, but in certain cases you might want to see all the information.
01:07:56.719 --> 01:08:16.079
Like honestly, there's an analogy to for the Haskell programmers out there, they have the I think it's colon i and t, but is like for type information of an expression, and i is like all the information, so it's type plus some other stuff, and uh this is like kind of the uh equivalent, right?
01:08:16.159 --> 01:08:22.720
You've baked in the type information to like a legend that is completely invisible, but now I understand.
01:08:23.439 --> 01:08:28.800
Um so yeah, so here here we we uh I mean it's all the information is available, right?
01:08:28.960 --> 01:08:45.279
But so here we as mentioned in the chat, you've used the display user command that's like temporarily having the boxing set to the maximum just for single one single expression, and if this sets it to min just for a single single expression, there's no setting for no, not to min, sorry, to mid for for single expression.
01:08:45.359 --> 01:08:47.520
There's no corresponding thing for min.
01:08:47.760 --> 01:08:53.520
But there are actually a lot of in the defense workspace, there are a lot of extra functions for showing things in various ways.
01:08:53.680 --> 01:08:56.319
So if we we can copy, I think it's called DSP.
01:08:56.880 --> 01:09:00.880
So this is yet another minimalist way to show things, yeah.
01:09:01.119 --> 01:09:07.199
So it it like dispenses with the outer borders and just draws the bare minimum to separate things from each other.
01:09:07.520 --> 01:09:12.720
And there's one called this display R, and I think this display S.
01:09:14.000 --> 01:09:14.800
So we can see.
01:09:15.680 --> 01:09:18.800
So this one this one gives you numeric information.
01:09:18.880 --> 01:09:24.560
It's saying this instead of drawing little arrow, it says this is an axis of length two, and axis of length.
01:09:24.640 --> 01:09:29.359
So this is it gives us the the the shapes everywhere, and this gives you the depth.
01:09:29.680 --> 01:09:38.319
So this instead of saying it's nested, it says it has depth too, and this axis length two, length three, two, and then this is numeric, so it gives you all that information.
01:09:38.800 --> 01:09:44.880
Display S gives you the axis plus the shape information written there, right?
01:09:44.960 --> 01:09:48.960
So we can see that this is a two by three with the decorators and so on.
01:09:49.119 --> 01:09:55.199
So there are lots of variations of things, and some of them even take left arguments where you can further customize exactly what you want.
01:09:55.359 --> 01:09:59.279
Do you want the text centered or do you want it right adjusted and vertically centered?
01:09:59.359 --> 01:10:10.159
And they're sorry, lots and lots of options for things, and then yeah, some repls have this built in in various forms, and we have only talked about display of arrays, it's also display of functions.
01:10:10.239 --> 01:10:11.119
That's interesting.
01:10:11.840 --> 01:10:12.399
Oh, yeah.
01:10:12.479 --> 01:10:13.760
I mean, we could spend some time on that.
01:10:13.840 --> 01:10:15.680
I mean, I've been trying to bake that stuff.
01:10:15.920 --> 01:10:23.119
The tree train, the train tree view is there in uh in dialogue and so BQN has explain.
01:10:23.439 --> 01:10:29.520
Uh cap has a thing called structure viewing, but I've played around with it.
01:10:29.600 --> 01:10:39.840
It breaks frequently for the examples that I was testing, and then J has something called I actually can't remember what it's called, but it is the equivalent.
01:10:40.000 --> 01:10:42.479
It's horizontal instead of vertical.
01:10:42.720 --> 01:10:47.039
And I think uh I mean it's it's kind of uh by you know, it's personal opinion, right?
01:10:47.119 --> 01:10:52.319
But I think by far the dialogue tree train is by far the best BQM.
01:10:52.560 --> 01:11:05.199
So you can that's a nice thing you have in in the dialogue the uh sorry in the with JD is you can actually choose the display forms from the menu instead of having to write like weird incantations to enable them for for discoverability.
01:11:05.359 --> 01:11:06.159
I really like that.
01:11:06.239 --> 01:11:10.800
I would I'm going to add this if everything goes according to my plans.
01:11:10.960 --> 01:11:12.880
I'm going to add this kind of thing to to dialogue.
01:11:12.960 --> 01:11:14.560
So I want to overhaul the whole way you do.
01:11:15.039 --> 01:11:22.239
I also noticed that in the dialog editor, all of the expressions now are syntax highlighted, which is something I complained about at some point.
01:11:22.399 --> 01:11:26.479
Is that oh yeah, that's it used to be something you can configure.
01:11:26.720 --> 01:11:27.359
Or it was configured.
01:11:27.760 --> 01:11:33.199
You can choose whether yeah, you can choose whether it's only the current input light or or all them their history as well.
01:11:33.840 --> 01:11:34.720
There you go.
01:11:35.680 --> 01:11:37.760
So yeah, that's an it's a nice thing to have.
01:11:37.920 --> 01:11:40.319
I definitely like having syntax coloring like that.
01:11:40.479 --> 01:11:45.039
And of course, you get syntax colored output when you do a ray notation output, which is really awesome.
01:11:45.279 --> 01:11:47.119
So this is the default display form.
01:11:47.279 --> 01:11:49.520
We can see that as well over here in in J.
01:11:49.840 --> 01:11:53.279
It does much the same thing, just basically tokenization things.
01:11:53.439 --> 01:12:00.880
But if you turn boxing on, then the default style for Tessit things is is boxing.
01:12:01.359 --> 01:12:02.399
So we get this.
01:12:02.640 --> 01:12:22.479
So this tries to show you the structure of this average idiom where the we plus and the and the slash bar are bound more tightly together, and then you have outer level of a three train, this is the three boxes like this, and then we can we can switch it to a uh uh to the three mode, as you get this, which is what you prefer.
01:12:22.880 --> 01:12:28.079
But there are other options, but there's also the parens, which might be useful for like white belt.
01:12:29.039 --> 01:12:32.079
So it just fully parenthesizes whatever you give it.
01:12:32.560 --> 01:12:35.199
So you can see that you can see how things bind together.
01:12:35.439 --> 01:12:42.880
And that that's pretty nice, especially for weird things that you might not might not be so obvious how things bind together.
01:12:43.439 --> 01:12:44.479
Are those the three modes?
01:12:44.640 --> 01:12:50.000
Parens, tree, uh the thing I think there's there's one as well, which is I think def.
01:12:50.399 --> 01:12:54.399
And that one that one tries to minimize the number of parentheses instead.
01:12:54.640 --> 01:12:56.159
Okay, so the anti-parens.
01:12:56.800 --> 01:12:59.520
Uh yeah, but it will result to parens when necessary.
01:12:59.760 --> 01:13:05.680
So, like if we write something like this, so it will it will preserve the parentheses because you have to have them there.
01:13:05.840 --> 01:13:10.479
The only the reason I didn't want to pull that up at first is because I think it has a bug in it.
01:13:10.640 --> 01:13:20.319
So if you take this function, like the decrement just as just an example, decrement increment type thing, that's a mistake.
01:13:20.560 --> 01:13:26.079
It it should have parenthesized at least one of them, because this is not the same function because of stranding.
01:13:26.399 --> 01:13:27.119
Right, right, right.
01:13:27.439 --> 01:13:31.760
Um, so so that I tend to not and that's really what the point is either.
01:13:31.920 --> 01:13:34.239
It's just trying to rec reconstruct.
01:13:34.399 --> 01:13:35.760
Here we'll you'll do it right.
01:13:35.920 --> 01:13:41.279
And if we turn on the tree view instead, which is also what I prefer, by the way, in general.
01:13:41.520 --> 01:13:43.760
And and I think that looks very nice.
01:13:44.000 --> 01:13:53.359
You can see these are the two operands that are bound to the to this operator, and these are the two operator operands that are bound there, and then these bind together to a two true two tree.
01:13:53.520 --> 01:13:58.000
It also means that like a fork really looks like a fork, like a trident.
01:13:58.399 --> 01:13:59.359
Yeah, yeah, yeah.
01:14:00.319 --> 01:14:01.680
It's quite quite nice.
01:14:02.000 --> 01:14:03.359
And this is just display form, right?
01:14:03.520 --> 01:14:09.520
That's a that's a there's a lot, there's a lot of stuff that is that can be added to an IDE.
01:14:09.760 --> 01:14:23.600
BQN has like by default, recognizing that certain arrays look like sound definitions or like image definitions or video definitions, even, and then we'll create a little media player and show those those things.
01:14:23.680 --> 01:14:25.840
That's also something I would like to do to add.
01:14:25.920 --> 01:14:28.399
It's not really that hard to recognize things.
01:14:28.560 --> 01:14:30.399
Arrays are too big to display, really.
01:14:30.720 --> 01:14:32.560
But sometimes sometimes we do that.
01:14:32.800 --> 01:14:35.920
You can make uh fun patterns.
01:14:37.359 --> 01:14:49.680
So and then uh yeah, sometimes we we uh make the font size really small so you can to to sort of draw pictures in the IDE you're using character art, which I think is is is cute.
01:14:50.000 --> 01:14:50.239
Right.
01:14:50.960 --> 01:14:54.159
I've done that before with the game of life-ish kind of thing.
01:14:54.399 --> 01:14:55.279
Yeah, exactly.
01:14:55.520 --> 01:15:05.119
So that's another feature that you can have when you have this interactivity with the editor windows that if if we make an array, so here's here's the alphabet, and I can I can edit that again.
01:15:05.199 --> 01:15:08.720
Notice I'm just applying a function to oh, where did it go?
01:15:09.520 --> 01:15:09.840
In here.
01:15:10.159 --> 01:15:11.199
Where did they go?
01:15:11.600 --> 01:15:12.399
I don't know.
01:15:12.640 --> 01:15:13.760
That's funny.
01:15:14.079 --> 01:15:15.199
Oh hang on a second.
01:15:15.279 --> 01:15:18.239
I think it's just popped, might have popped up another another window.
01:15:18.560 --> 01:15:20.560
Let me let me clear everything here.
01:15:25.760 --> 01:15:27.680
Even I don't know what I've done.
01:15:27.760 --> 01:15:29.039
Oh, I think I know what it is.
01:15:29.119 --> 01:15:31.279
I'm actually running in this thing that has that's ride.
01:15:31.520 --> 01:15:33.600
Okay, let's switch over to ride, it's the same thing.
01:15:34.079 --> 01:15:44.880
Okay, so so here is is a character array, and and if I if I make changes to the array, then they get updated in real time inside the editor.
01:15:45.199 --> 01:15:49.760
Um, so there are lots of fun things you can do without playing around.
01:15:50.079 --> 01:15:56.880
Then there are features like you you probably don't want to even think about should be there, but have to be there.
01:15:57.039 --> 01:16:04.880
Like in the menu bar for on the dialogue IDE, you can uh you can export to a an exafile.
01:16:05.119 --> 01:16:12.159
Like you can create a standalone application that nobody can even tell is written in dialogue APL that's just completely packaged with icon and everything, right?
01:16:12.479 --> 01:16:23.840
Choose an icon file, and we can make a console application, those things, and choose the settings for Windows when we're when we're running it, version information, all that stuff you get when you when you look at the properties.
01:16:24.319 --> 01:16:43.680
Those things need to be there because it's all fun and games playing around with uh with a with array languages, but there are actually people out there that use this you know for real work, actual applications that get shipped to users that have to boot up and and they use them and then and they make money on it.
01:16:43.840 --> 01:16:45.760
So you have to be able to package your whole thing.
01:16:45.840 --> 01:16:47.119
That's also part of the IDE.
01:16:47.840 --> 01:16:50.079
There's access to help in various ways.
01:16:50.239 --> 01:16:54.720
Again, this is of course, every IDE has its its ways to do this.
01:16:54.960 --> 01:17:02.960
One thing I would like to do is that we haven't done yet, but sort of working on that as a as a quiet project in the background, is that the first time you start, wouldn't it?
01:17:03.119 --> 01:17:06.960
Would be nice if the IDE would, I think so at least, would we say, you know, welcome.
01:17:07.039 --> 01:17:08.800
It knows whether it's the first time you start.
01:17:08.880 --> 01:17:14.720
Or it could give you the option to not show this again or show this again, that kind of thing, where it's like, hey, let me give you an intro tour.
01:17:14.800 --> 01:17:15.920
Up here is the language bar.
01:17:16.000 --> 01:17:22.079
This is the session, this is where you type things, uh, so that people can can get going a bit a bit faster.
01:17:22.640 --> 01:17:30.399
Yeah, I feel like we're gonna have to do one of these for all the different because we've only scratched the surface, and this is just basically APL, and we've only got a couple minutes left.
01:17:31.039 --> 01:17:35.920
Yeah, there's a just to a preview of some things that exist here.
01:17:36.079 --> 01:17:37.359
This is APL64.
01:17:37.439 --> 01:17:38.800
I don't use this normally.
01:17:38.960 --> 01:17:40.159
I have a license for it.
01:17:40.399 --> 01:17:45.119
This is Dialux, I think, most serious competitor in the commercial space.
01:17:45.520 --> 01:17:48.079
They have completely rewritten the IDE, right?
01:17:48.159 --> 01:17:54.560
Dialux has has is is a continuous evolution from the early 80s.
01:17:54.880 --> 01:18:04.159
This dialogue's uh APL64, which is the language is basically the same thing as as APL Plus, has a ton of features.
01:18:04.319 --> 01:18:10.079
I haven't even looked at everything, it's both language features, not in primitives, but in system functions.
01:18:10.239 --> 01:18:15.359
They've got loads and and control structures and things, but also the IDE has a lot of features.
01:18:15.520 --> 01:18:20.560
I'm not sure how much of it I would actually want, but they do have some some cool things.
01:18:20.720 --> 01:18:49.920
Like you can you can go into to the idiom manager and and we we've got a whole it's like basically like Apple cart thing, but uh structured with an i with a with an interface and you can add your own user idioms and it has got yeah, well you can see got lots of stuff and you can search the session itself, like the REPL part, has has some settings, so you have this history format, and I'm I'm not even really sure how this works.
01:18:50.000 --> 01:18:54.800
Now it's set to classic, which means that that things are this I don't think this works.
01:18:54.960 --> 01:18:55.760
Oh it does, okay.
01:18:55.920 --> 01:19:05.520
Things are as you expect, but I think you can switch to like a different mode, and now you've got like an input bar like you've seen on on uh on Triapia.
01:19:06.000 --> 01:19:08.880
And and now you now we're typing in here instead.
01:19:09.199 --> 01:19:10.560
And it copies it up here.
01:19:10.640 --> 01:19:14.319
And I think there are things you can like select and and redo and so on.
01:19:14.479 --> 01:19:16.239
There are I'm not really sure how this works.
01:19:16.399 --> 01:19:20.960
It's got a ton of stuff you can do you can do and settings for this group.
01:19:21.199 --> 01:19:28.399
Right here you can see which outputs belong with which inputs, and and uh it it sort of remembers where things belong.
01:19:28.560 --> 01:19:32.479
I think you can you can choose separate input and output.
01:19:32.640 --> 01:19:35.920
So an input pane and output pane, which might be more familiar to some people.
01:19:36.159 --> 01:19:41.039
I know browsers have like a mode you can do this, and and we've got our input bar down here.
01:19:41.600 --> 01:19:43.760
There are yeah, we can't even go into all of it.
01:19:43.920 --> 01:19:51.840
We haven't looked at dialogue things either, but we can but scratch the surface just looking at the at the possibilities that are here.
01:19:52.159 --> 01:19:58.319
So I I grew up with a good old style, basically like computer enhanced paper.
01:19:58.880 --> 01:20:04.880
So I'm used to do it to doing doing things the old style, but uh there are new cool things that you could do.
01:20:05.119 --> 01:20:11.600
I've actually written a library myself to do cool output stuff, just as an experimental thing.
01:20:11.840 --> 01:20:13.680
I think I think I have it available here.
01:20:13.760 --> 01:20:14.399
Let's see.
01:20:14.880 --> 01:20:42.800
And as as Adam's typing this and we're winding down, uh if you're either watching this live or in the future, uh or if you're listening to the audio and you have a favorite you know feature of an IEDE or REPL or programming environment, find the uh YouTube video, leave a comment, and whenever we do a follow-up where we explore uh this again, we will make sure to highlight the greatest, latest features from the different programming environments.
01:20:43.039 --> 01:20:43.359
Yeah.
01:20:43.600 --> 01:20:51.119
Because I'm sure that there's stuff that I definitely don't know, and probably even Adam in in the other you know, programming environments and languages that we don't use as often.
01:20:51.439 --> 01:20:53.359
Yeah, we we should maybe we should have guests.
01:20:53.439 --> 01:20:55.840
I know about the dialogue one fairly well.
01:20:56.159 --> 01:21:04.239
I know some of the APL ones, a little bit of the J things, and then the things get really progressively worse and worse as you get further away from that.
01:21:04.399 --> 01:21:07.039
We should have it's not fair that I should show these things.
01:21:07.119 --> 01:21:11.520
Now I'm not even going to run it, but I just want to show a little tool that I made.
01:21:11.760 --> 01:21:13.920
Can you open this picture?
01:21:14.239 --> 01:21:30.479
So so this is where similar to what you saw in APL in the APL64, where input remains over here in the in the session, in the normal session, but all output goes into a separate window, which is like a rich window uh for output.
01:21:30.560 --> 01:21:38.800
And you can you can get type information and and timing information and so on about when these various outputs happen and what they are, right?
01:21:39.039 --> 01:21:46.399
So and errors are like treated separately and and so on, and you can collapse and then remove pieces and so on.
01:21:46.560 --> 01:22:05.119
So there are possibilities you can so again, what this is saying is or hinting at is that you can catch the events that happen when things are printed and when various things happened, and when windows are closed, the editor window closes, you can catch that event, you can intercept it, you can write your own code that manipulates the flow of things.
01:22:05.359 --> 01:22:07.680
We even have some tools that that's how they work.
01:22:07.920 --> 01:22:09.359
It also means it's an open system.
01:22:09.439 --> 01:22:12.960
You can go and look at what is the code that actually does the the output.
01:22:13.119 --> 01:22:14.800
It's it's right there for you.
01:22:15.279 --> 01:22:18.479
There I don't know how we should treat this.
01:22:18.640 --> 01:22:23.279
There are so many ways we can go into this and so many dimensions and so many, so much more.
01:22:23.760 --> 01:22:29.119
We just have a recurring uh recurring series where uh I mean yeah, we're gonna we're gonna grow the the panel in the future.
01:22:29.199 --> 01:22:34.319
So I mean we'll have l like more expertise on different different IDs in the future.
01:22:34.399 --> 01:22:41.760
And yeah, when we bring folks on, it can be just one of our questions we ask folks are the things that that you know about that you can share with our our listeners.
01:22:41.840 --> 01:22:46.960
So doesn't we don't need to cover clearly we don't need to cover it all in one episode because we have tried and failed.
01:22:47.600 --> 01:22:52.560
But we knew that that that's the anyways.
01:22:52.640 --> 01:22:58.399
We will uh make sure to link all of these in the in the show notes so that if you want to go check them out.
01:22:58.560 --> 01:23:04.479
I think most of these except for APL64 are freely available uh either online or via download.
01:23:04.560 --> 01:23:05.680
So that is the nice thing about this.
01:23:06.560 --> 01:23:08.560
I even forgot the one, I forgot APLX.
01:23:09.359 --> 01:23:14.159
I actually was thinking that when you were showing all the windows, and I was like, actually, there is one that I have personally used.
01:23:14.319 --> 01:23:20.159
Not I don't have it on my computer right now, but at one point I did at one point have the APLX, and they have great docs.
01:23:20.479 --> 01:23:26.479
At one point, they were nicer than dialogs, but dialogue says revamped theirs and I'd say docs better now.
01:23:27.039 --> 01:23:34.640
So I do have it here, but yes, that's a it doesn't the ID isn't doesn't do very much interesting things, but yeah, it does.
01:23:34.960 --> 01:23:37.920
It's still nice, it's it's still minimal APL, nice for getting started.
01:23:38.079 --> 01:23:38.399
Yeah.
01:23:38.720 --> 01:23:39.279
Absolutely.
01:23:39.359 --> 01:23:44.079
The documentation is is awesome, and the ID does have features that dialogue doesn't have either.
01:23:44.319 --> 01:23:54.319
Um so Max says a last comment is saying, My favorite is hint-based jumps in Avi, Easy Motion, and hop.nvim on the other side.
01:23:55.760 --> 01:23:57.119
I think different like tools.
01:23:57.199 --> 01:24:08.399
Um and I mentioned head over to the YouTube comments, but I also forgot that the main way you can reach us, as always, is contact at array cost man, I was so close.
01:24:08.560 --> 01:24:09.279
I was so close.
01:24:09.359 --> 01:24:13.279
I was about to say array cost contact at arraycast.com.
01:24:13.439 --> 01:24:14.000
We'll get it.
01:24:14.079 --> 01:24:17.039
It's uh, you know, Bob was doing it for a hundred plus episodes.
01:24:17.279 --> 01:24:21.600
And so uh you have to give us time to be able to say a simple email address correctly.
01:24:21.840 --> 01:24:36.399
But yeah, if you've got tips, tricks, features, or you want to, you know, message us about anything else, you can reach us there and consider this part one of an ongoing series of you know, editor REPL IDE programming environment features.
01:24:36.560 --> 01:24:37.439
I learned a bunch of stuff.
01:24:37.520 --> 01:24:45.039
I didn't know about the min-max mode stuff, and that is very useful for understanding what the difference is.
01:24:45.119 --> 01:24:49.279
And also, two, it's nice to know that you can get type information in like the encoding of the box.
01:24:49.439 --> 01:24:52.800
So hopefully other listeners learned something today as well.
01:24:53.119 --> 01:24:57.039
With that, I guess we will say happy array proming.
01:24:57.199 --> 01:24:58.079
Happy array proming.
01:24:58.720 --> 01:24:59.840
Oh man, that that didn't work.
01:25:00.079 --> 01:25:01.199
It did, it worked on my end.
01:25:01.520 --> 01:25:02.720
It worked on my end.
01:25:02.880 --> 01:25:03.439
Really?
01:25:03.680 --> 01:25:06.399
Yeah, okay, it's all right until next time.
01:25:06.640 --> 01:25:07.119
See ya.