Wiki/Report of Meeting 2024-01-04
Report of Meeting 2024-01-04
Present: Art Anger, Ed Gottsman, Raul Miller, and Bob Therriault
Full transcripts of this meeting are now available below on the this wiki page.
1) Bob congratulated Ed on an excellent presentation for the British APL Association that morning. Ed had found several other sources including a Discord for APL the APL Farm https://discord.com/invite/yHna7nt7zx that includes J users. Ed said that there were some challenges to be overcome to crawl the new google groups forums, but he wanted to take a run at doing it himself. If this does not work out, he will contact Chris to see if there are administrative options to get the information. Bob noticed that when starting J9.5 from scratch the J Viewer script opened the viewer before it had uploaded the sqlite binary. This leaves the J Viewer hanging. Loading the sqlite binary manually fixes the issue, but new users may not know to do that. Ed is looking into cleaning this up. Bob also noted that there are ways to set hotkeys through the JQt menus in addition to Ed's solution which involves directly editing the files. Ed feels that the editing version is more efficient.
2) Bob showed the work that he had done on the Communities page https://code.jsoftware.com/wiki/Category:Community_C and asked about whether there should be links in addition to the category tree links. Raul wondered whether expanded text should be used on the page to allow the user to expand as they wish. Raul wondered if the category page is necessary if the information is already available on the page. Bob wants to retain the subcategory Forums https://code.jsoftware.com/wiki/Category:Forums_C.1 so that users know to find forums in the curated categories. If the sub-category Forums is removed then the user needs to know that they will find Forums in the Community page. There is some redundancy, but that could be solved with a comment for future editors that there is an additional page to be updated. On the Blogs page https://code.jsoftware.com/wiki/Category:Blogs_C.2 Bob has chosen to remove the display of the category tree because all of the links are external. User Groups https://code.jsoftware.com/wiki/Category:User_Groups_C.4 presents a different issue because of the sheer number of entries. The User Groups page could benefit from dividing the display into expandable annual groupings of NYCJUG meetings that would at least allow the reader to choose the year that the would like to review. The large category tree for user groups would still remain. A further example is the Conferences https://code.jsoftware.com/wiki/Category:Conferences_C.7 sub-category which is using the expansion approach.
3) Bob has been making the categories visible as Skip had suggested and it is working well and Bob will continue to show categories as he works on the pages. This makes it much easier to see related pages when the reader is researching a topic. Bob feels that the sub-categories being in a more textual form is a good way to go. The main categories display being more graphical still will need to be resolved.
4) Ed spoke about using being able to represent J sentences so that they are more easily understandable. This is outside of the J Wiki discussion, but has been included in the transcript for those who are interested.
For access to previous meeting reports https://code.jsoftware.com/wiki/Wiki_Development If you would like to participate in the development of the J wiki please contact us on the J forum and we will get you an invitation to the next J wiki meeting held on Thursdays at 23:59 (UTC) Next meeting is January 11, 2024.
Transcript
Congratulations.
I thought that was an excellent presentation.
Well, thank you.
I couldn't comment because I, for some reason, my zoom locked up and I couldn't unmute myself and I couldn't change my video.
So I just sat and listened.
Yeah.
It worked out actually fairly well.
Yeah, it was mostly Adam, I think it was almost exclusively Adam who was talking, but he said really good things.
So I have a lot more repositories to work on if I get up the motivation to do that.
I was particularly interested to hear that there's a Jay discord channel.
I didn't know that.
And apparently it's been around for quite a while.
APL farm.
And both Raul and I show up on that from time to time.
Yeah.
Yeah.
So maybe something to work with.
I have nothing to report.
The thing that I really have to do is to write a crawler for Google groups.
And Google groups is unfortunately similar to Quora in that it is shy about crawlers.
I don't, in Quora's case, it's entirely deliberate.
I don't, they obfuscate on purpose quite clearly.
I don't think that's the case with Google groups, but I am going to, it's not just grab the HTML and parse it and go, there's going to need, I'm probably going to need to use a supplementary service that runs headless browsers rather than just doing a sort of a curl or W get.
And the headless browsers can run JavaScript and that can be necessary to get the content out.
Do you think there's anything that Chris can do as an administrator of it to explore?
It's possible.
I'm reluctant to bother anybody with this.
I'm perfectly willing to take a run at it myself.
Okay.
Yeah.
And leave that in your back pocket in case it really proves to be problematic.
That's good to know.
I appreciate that.
Yeah.
I mean, I don't know that it will, but I'm just wondering whether he has a way of getting in and exporting things.
No, it's a good question.
If I can set something up that doesn't involve me ever having to call somebody to complain because this or that is not available, I would prefer that route.
Yeah.
It was interesting to hear the exchange you had with Adam over the, being hit by a bus or winning the lottery.
If I win the lottery, it's not a problem, but the bosses would be a problem.
Yeah.
That's a bit more to overcome.
Yeah.
Yeah.
Right.
You have to face that.
Buses and lotteries.
Yeah.
There's more buses than lotteries.
Yeah.
And the odds of getting hit by a bus are much, much, much better than the odds of winning the lottery.
So yeah, I don't know.
I don't want to call it better.
Yeah.
All right.
The adjective in question is TBD.
There's a greater chance of.
Right.
I should be neutral.
And that's really it.
Other than that, there's not much going on.
I've got one thing I noticed.
Tell me.
It was because we were asked to start J9.
5 from scratch.
So I'd had the viewer running on J9.
5 before, but when you start from scratch, the beta.
Yeah.
Yeah.
Well, that's right.
The beta.
And then when I went back to 9.
5, opened it up from square one.
And of course, the viewer is no longer there.
You have to load it.
So I loaded from you.
But I think what happens is, is there's a run in that.
Even before you've downloaded, I'm trying to think, is it some kind of an SQLite feeder?
The SQLite binaries.
Yeah.
Yes, you're right.
It starts up when it shouldn't.
Yeah.
And so what happens there is you end up in the screen and it just tells you it's doing this in the background.
It's waiting to find this stuff, but it doesn't tell you it doesn't have the stuff.
Like you've got that line sitting back on your terminal session.
So when you start that up and goes, everything kicks back in, but you end up with basically a zombie sitting there waiting to run something it doesn't have.
Doesn't have.
I think that's what's happening anyway.
I think you're absolutely right.
All right.
I'll add that to the list.
Yeah.
That's a good one.
Yeah.
Because I think anybody who starts up from scratch is probably going to encounter that.
And that might be the source of some of the, I don't know what it's doing now.
That might be what's happening there.
Yeah.
All right.
Good.
Thanks.
I'll work on that.
Yep.
Anyway, I wouldn't have caught that except I had to start from scratch.
It's good to know.
Yeah.
Yeah.
And what was, oh, the only other thing I did is you've got a way of getting into setting up your hotkey.
And I think you do it by going back in and setting up your configuration file.
Do you?
Keys.
config or something like that.
Yeah.
You know, an easier way is actually to use the menu and you go into edit in JQT and you can edit user keys.
That's effectively what I'm doing by evaluating that first line.
Exactly.
It's doing the same things, but you've got an interface to bring you in there rather than going to a file.
I can either describe the interface or I can give you an executable.
Yeah.
No, you're right.
Yeah.
Yeah.
Anyway, that's what I had.
Thank you.
Yeah.
And What do you have?
Well, I got a little bit to show you.
Not a lot, but a little bit based on, excuse me, based on Skip's observations about categories.
And what I did, well, this is what I've been doing is I'll go back to home.
Okay.
So what I've been doing is starting from community.
I've been going through and cleaning this up.
So this is more representative about what these are going to look like.
There'll be headings, some of which are clickable and you'll see in future ones, not all the headings are clickable, but sometimes the heading just describes the links to pages below.
But in the case of these clickable ones, what I've done is I've made the subcategory clickable, and then it takes me here to forums and you can see I've got forums, archives, and an overview of the forums.
Now this forums takes you into the Google groups, just like that.
So that's why it's an external and it doesn't show up.
Hide selfie.
Okay.
I'm just trying to move something out of the way here.
Anyway, forums doesn't show up only the system forum, which is a page on the wiki shows up under the categories.
I can't do a categorization of an external file without just creating a subcategory.
That's just a repository.
I don't see the point in doing that.
Especially if I've got them listed here.
I don't know what are your thoughts?
Should I be doing something that shows up over here?
Can you hear me?
Yeah, I'm thinking.
No, I think you're fine.
Yeah.
Could you return to community?
Because I have a question.
So the subcategories under forums, there were only, I think, three of them.
Yeah.
Could they just show up in parentheses next to forums?
And similarly for IRC channels, blogs, journals, conferences, yada, yada, yada.
So that you're trying to.
I'm trying to cut down on the amount of navigation that people have to do and increase the visibility of the hierarchy.
If you see what I mean.
Yeah.
So what you're suggesting is in addition to forums, I've got the subcategories here of forums.
Would be links here?
Oh, so you do.
I had to move the video postage stamp.
Yeah, no, I ran into the same thing with the video as well.
Yeah.
Yeah, I suppose that's enough.
Yeah.
See, the challenge I've got with the forums in particular is you've got external.
Now I could do a landing thing here, which would allow you to get it right from this page.
Another thing you could do, the link that you take, the thing that we've been doing at other places in the Wiki is we're using the expand collapse thing.
And especially for something like forums where you have a small leaf, it might make sense to take the content from that, the page that he takes you to and just put that in a collapse section here.
So rather than going all the way into another thing, this just basically becomes a collapse section, which takes this information and puts it in that.
And so you don't actually even go to the category.
Right.
Unless there's some, I mean, when you, you have made a point in the past that a category page allows you to put more stuff there, but if you've already decided what the stuff is going to be, you know, it's only a little bit of work to shift gears between the two approaches.
And it might make sense to not be so rigorous on approach and be more focused on, you know, user experience, I guess.
Yeah.
So it's flatter, which I like.
And the other thing is that I'm not going to go in and get rid of the subcategories, but all I need to do is just not attach them to this page anymore.
They would just show up on this page.
They don't have to be, well, how would I do it?
I don't really want to attach them to the community page because that's kind of noise on having a big long list of pages under here.
I mean, I'm thinking the, you know, the categories is independent of the presentation of information.
And if there's redundancy that we can hide the unnecessary redundancy from the user, you know, this thing doesn't have to show up in an easy way, easy to navigate fashion, or they can come here and go back to community and information is there.
I mean, it's.
Yeah.
Yep.
And the way I can do it is I can just go into this page.
I need to log in.
I can just go into this page.
And if I remove this community link, then what will happen is forums will be a gray triangle because there'll be nothing underneath it anymore.
The system forum page will still link back to forum C1.
But forum, well, that would take forum C1 out of community.
Yeah.
You can do a colon link with each community so that it's, you know, a reference to community rather than a member of community.
In other words, if you put a colon, if you go to the forum, that inner forums page, the category page, and if you have community link down the bottom, just put a colon in front of it in the actual link, you know, after this, the two left brackets in that way, it'll become a link instead of a member.
So the, you know, it's, it still takes you to community, it's just not quite the same, the same way in the same way.
Because it's not actually being, it's not actually part of that category anymore.
It's a link to that category.
Right.
Yeah.
Yeah.
I have to think about that a bit because what I'm trying to do there.
Maybe with a comment for editors so that if somebody comes along and they have a reason to change it, they know what's going on and they can, yeah.
And revert the changes or whatever.
Yeah.
I like the flatter idea.
It's just, I also like to have the access here to the forums page, like, but I don't really need a forums page at that point, I guess is what you're saying.
Cause it's right on that page in that case, but I can leave the forums.
Well, basically what I can do is I can take the link for forums out of this one and it still exists in the future if I decide to use it.
Right.
Yeah.
I could do that.
It's an unfortunate aspect of simplified user interfaces is that sometimes a little bit too simple for what you want, really want to get accomplished.
Yeah.
Yeah.
A slightly different example is the blogs page where this is a case where my link is no longer, my heading is no longer linkable because all of these pages are external.
So there'd be no subcategories.
And as a result on this particular page, I decided not to show a category tree because there's nothing in the category tree.
It's external pages.
And unless I want to put a landing page for each of these, the wiki actually doesn't have any pages to attach to it.
Any thoughts about that choice?
I mean, this could be true.
All these, these small leaf things could be incorporated one level up.
That's right.
Collapse section.
Yes.
Now where it gets a little bit trickier, go back to community.
Cause I haven't done this yet, but in the example, I go to user groups, good old New York, New York city, J user group.
That's one where I think I'm going to put in some subcategories to break those down probably into years.
So they're a little bit more accessible, which gives me a way to break, to show these essentially with headings.
And then I can show the pages that are linked to them underneath.
Yep.
Makes sense.
And I, now to be flatter, I could do that anyway, just with these pages, but then what you're going to end up with is this long list of pages to go through.
If you want to use this category tree, as opposed to maybe five or 10 links that will take you down to sub pages.
It just depends on, this is relatively ordered.
So honestly, to me, it's, there is an advantage to keep this one flat too, but I don't think I want to kick it back up to the user groups to be in this area.
Like to, cause you're hoping there'll be more.
There's a Japanese example that might have, I looked into the Japanese one there.
They haven't done anything on their sites since about 2021, but I'm hoping there will be other user groups.
And it would be quite something.
And I guess, similarly to users, this is a page of active users and I could run those alphabetically as well, or, you know, whatever I choose to do with them.
Some of them are just stories, but they're on the different people's stories.
There's some work to do.
It's still in curation in that area.
But I think in some of those really large groups, I wouldn't flatten it.
But for things like IRC channels, I think it makes perfect sense to flatten that one out.
Just three entries and it's an easy thing to expand.
And then the only thing is that takes that category off.
IRC won't show up.
You'll see a heading of forums under community.
So you go to community, you won't see forums, IRC, probably blogs, probably journals you won't see, conferences you won't see, but user groups, users, promotion you wouldn't see, other array languages I think I'd leave open, and can Ivers you wouldn't see.
So it would come down to a fewer number of subcategories.
And you would just see that by going to community and forums would only be a heading.
I have to think more about that.
Yeah.
I think having a little bit of irregularity in the experience is fine because people, you know, that's the way language works.
You know, we have areas that we focus on and we spend a lot of time on other areas that we do slightly different.
I think that's just normal for people.
I wouldn't worry too much about making it more comfortable in some places and leaving it less comfortable in other places because it's a work in progress.
Yeah.
I was thinking though, in terms of search, if somebody is looking for something, they click on community, they're going to find it by visually seeing it.
But having an actual subcategory means that it'll be easier for them to see forums actually do exist within community without having to go to a generic community page.
Yeah.
Community search is also a little bit heuristic.
I mean, there's people use different search tactics and, you know, and it's a lot of it, the hassle with search is coming up with the right word to search on or the right phrase for what you're thinking about.
Actually, thinking it through a bit more, what I think I'll propose to do is instead of having this link to the forums page, this will be a heading that contains all the information on the forums page.
But this would link to that same information on the forums page.
Yeah.
So that way it, you can see that there's forums through the structure of the tree.
If you go to the community, you don't have to go down to that page.
You'll see the information on an expand here.
So there's redundancy, but it allows you to search and allows you to see where forums might be.
And if you happen to the community page, it solves your problem, expand and you're there.
And then that's it.
Yeah.
Right.
I think nothing against trying things.
Okay.
So if I edit this, I'm no longer going to.
So how do I put in the expand for what I'll have to copy across?
Let's see.
Yeah.
It's a couple of classes that you put on there.
One to make it expandable.
MW expandable.
I always have to look it up myself.
The other one is to start out in the collapsed state and you need to put it on a div or a table or some element that will container.
I think what I'll do though, is I think I'll take it offline and I'll set this up because what I have to do is go into the forums page, collect that information, transfer it back to the community page under this heading and then make it collapsible.
And I think rather than taking up my time doing that, I'll try that on a couple to see how that works.
And then I don't actually have to try and change anything else.
The other thing Skip was talking about was for multiple categories.
And I did find at least this one that has multiple categories.
I've unhidden conferences and I've unhidden community, but community actually isn't on this page.
So this is a page we're looking at, not a category, but this is listed as an orphans category.
Because as far as I know, I don't think anything other than, yeah, Eric and the category are the only things that link to it.
So that's why I've called it an orphan.
Because this, because it's only linked to this category and Eric, because that was a site crawl he did.
So everything on the page at that time is linked to Eric site crawl.
So I included as an orphans category, but I've also used that as example, because I've gone into orphans and I've unhidden that subcategory.
And I don't see any other issues with that.
It just shows up as a list of categories at the bottom.
The R11.
1 and the C7 might be a bit confusing, but you've got the prefix of the actual, oh, interesting.
This, that says categories orphans.
Huh.
And why doesn't conferences say categories conferences?
Let's look into that.
- Category.
There's one categories and there's a list after that.
That's the way it presents the- - Oh, I see.
So it's just that there was six of them.
It would just be categories and then a list of categories.
Okay.
That makes more sense.
And I like that better too, because it makes it a bit cleaner and you've got the line in between here.
And I guess you've got the colon to separate it there.
Although I think the colon would separate singles too.
Anyway, that's pretty much what I've been working on and that's what I've done.
So Skip's idea of using the, unhiding the categories is a good one.
And I'm going to go back through as I work through the other pages.
I'll spend some time unhiding them and then their categories will start to show up on other pages as the pages have been categorized.
And that might be useful, especially if people start adding categories.
But I think that's about all I've got to show.
So I've got work to do on this flattening and got to work to do on some of these larger things like user groups to figure out what I want to do with that.
But I kind of like, this is kind of the presentation that I think generally you'll see past the top couple of levels and the cartoonish versions of the top couple of levels is going to be open to a discussion, I suppose.
So this might be closer to what you see in most of the wiki and I'll do my best to flatten it out a bit more.
Cool.
All right.
Yeah.
So I'll stop sharing.
So that's about all I've got.
Welcome aboard, Arthur.
How are you doing?
Pretty well.
Good.
Any response to some of the stuff we've triggered in the last while?
I know you weren't here last week, but.
.
.
Sounds pretty good.
Do you have anything that you're working on?
Not much yet.
Not a lot right now.
Okay.
No, that's fair enough.
There's huge value in being a neutral observer.
I've actually got.
.
.
I've got not a solution, not an approach, but a series of disconnected mechanisms for trying to do some kind of visualization, not exactly of a running J sentence, but of a J sentence that has run.
And if we can shift gears, I can talk about that.
Sure.
I need some cooperation.
Yep.
All right.
Let me just share here.
Well, there's so much that you could do better.
All right.
So this mess, and actually I have a couple of messes.
So the sentence is here, roughly in the vertical middle of the slide, and I won't go through it, except to say that the idea is that we provide anchor points.
Let's see here.
We provide anchor points, and these anchor points are a way of looking at inputs to verbs or modifiers.
So A is an input.
It happens to be the string, the man in the.
.
.
to the conjunction cut.
A man, which would pop up when you clicked on the C, happens to be an input to the verb tally, and its output is three.
Now there's a modifier here, conjunction.
The three, the E, winds up being fed into the have verb, monadically, and the output is 1.
5.
And by this time it's gotten out of the under, so it's actually a boxed 1.
5.
You can start to see the kind of confusion that you run into.
Here's some more.
B down here is not actually something.
It's an output of the conjunction cut, but the cut conjunction doesn't actually have an array output that you can examine, strictly speaking.
Its output is a verb, so there's nothing to examine here in terms of browsing arrays.
But up here, that same B is an input to the boxed verb, and in particular it's got a subscript, and that subscript means you came onto here with your mouse wheel, and you mouse wheeled to one.
Your other options are 0, 2, and 3, because this subscript indicates which of the outputs of the cut conjunction is being processed by the boxed verb at the moment.
So you could change this man to in by mouse wheeling up on the B, turning this into a 2.
Man would become in, this would become a boxed in, this would become in, and this would become 2, and this would become 2, and this would become a boxed 1.
You see what I mean?
I'm having trouble with getting all this to gel.
It's yay even trickier when you've got a dyadic verb, and sometimes you have things that happen in parallel but are yoked.
Like in this case, we're boxing up three integers, excuse me, four integers, which happens to be the number of words we've got here, and it has to be because otherwise this comma operator, the append operator, will fail with a length error.
So as you are mousing on B1, B2, B3, is J1 changing to J2 and J3?
Because after all, these are effectively yoked in some sense.
They're yoked because they're both inputs to the comma verb.
I'm going to stop talking and hope for enlightenment from somebody.
Sure.
Let me throw my perspective in here.
Please do.
Which is, I've been approaching this as, I don't want to replace dissect.
I mean, that's a huge project.
I want to do a different, a supplement to dissect, which means something closer to what the trace facility, in my case, a little closer to what the trace facility is doing, where instead of all the information showing up at once, it's broken down over time, and showing also the parsing process, which is where things like your adverbs and conjunctions take effect, and they glue things together and get you a slightly larger verb.
So basically, my idea is kind of an animated presentation with a forward and a back button, so you can go back to the previous stages and you hold it down, hold down a button, and it would animate through the whole process until you let it up.
And then when you let up, it would move to whatever the evaluation stage it was animating a presentation of, and stop at that point.
And if I share my screen, let me try.
I'm doing that.
I want to do here, and I've got so much stuff going on here.
I'll show you my lame animation that I've got currently.
I'll find it.
That was the thing I emailed.
That is-- I'm sorry, I wasn't planning on showing this code, and so it doesn't-- We've got time.
I was just thinking, Raul's put in the chat a search he did in GitHub for language type repositories, which I think is related to-- I was talking to him about what Adam said about cs.
forGitHub to identify languages.
Yeah, github.
com/search, right?
Language equals J, type equals repositories.
Yeah.
Let me copy that.
One thing I didn't get a chance to ask, because I didn't have my mic open when I went in that presentation, though, was whether or not-- I've got a GitHub repository that's got J code in it.
Is that automatically recognized as J code, or do I have to do something to make it recognizable?
I don't know if GitHub-- I think if there's something really obvious, like a suffix on the source code, on the source file, I think it'll pick that up.
IJS.
Yeah, I think it'll pick it up then.
And if it's doing that, then yeah, we should be able to capture everything.
OK.
OK.
So here's a-- I'm sharing my screen.
I think you can see it now.
Yep.
Yes, we can.
And so this is a little, quickie little animation of-- the UI could be a lot better-- of trace, basically.
And ignore the blue square there.
What this is doing is-- this sentence down here, it's animating-- tracing this sentence.
So it's basically doing nothing more than what trace is already doing, but with the-- showing the stack.
And this should probably be a little bit easier to see.
And where did I put that?
So I'll change that to gray.
And I should maybe do a different sentence.
But this sentence is a little bit too-- well, my whole UI would-- needs to be replaced.
But see here, this is the-- the queue of unevaluated things.
And this is the stack of things that are in process.
And this is not-- I'm not trying to say this as an example of a UI.
I just-- the thing I wanted to convey here was showing stuff over time.
And if I-- the thing I've been wanting to do is something a little more like what you were doing, where the whole sentence is laid out on the screen, which would be this-- the stack, basically.
And the other thing that I wanted to do is have this-- let me slow it down a little bit so that it doesn't flash by so fast.
When it gets to this part here, evaluating this train here, it's going to bring up a-- it's building a verb that's a result.
And that flashes by way too fast here, because it's just before and after.
And so I was going to take this and glue it together with that other thing I emailed you.
And instead of being just going from here-- so in a moment, it's going to be just two things here.
It's going to be this and its arguments.
Instead of this just being a single step, it would-- my plan is to take the time-oriented data in the postmortem and animate based on that.
So this would be like the-- kind of call them the keyframes.
And then the individual steps would be based off of the time series that I would extract from the postmortem.
And each thing would have a place on the screen, perhaps.
And I would show the arguments going in and then the results coming back out as part of the animation.
That's kind of-- it's not a complete thought, but that's kind of in the same general area that what you were thinking.
So I thought it might be useful to-- >>No, I appreciate that, Raul.
Thank you.
The advantage of showing the parse and the stack is that it directly maps to the way the interpreter actually works.
And that's good.
The disadvantage is that it does not map to the way people experience J code, necessarily.
>>Well, that would be-- the point is to have them able to experience J code in this fashion.
>>I see.
Okay.
>>And actually, I find myself in between those two worlds because I did take the time to run through the parser so I understand how it's parsing.
And so when I get to a particularly challenging piece, I'll revert to my parsing brain to figure out how is it breaking this down.
And I actually think like the stack as well.
But typically, I don't think that way because I find it's-- what was it?
I think it was Zen of Motorcycle Maintenance where he talks about the scientific method.
Scientific method can solve anything, but it needs to break it down.
And that takes a lot of time.
So most of us don't use that.
They use different techniques of short cutting and intuition and all sorts of things because most of the time that works.
But if there's something that's really challenging, break it right down to base steps and you can-- it's working that way.
>>And think of this as a drill down.
The way I did it here with the constant step, that saved me from having to build a UI.
I didn't have forward or back buttons.
I didn't have a pacing, anything like that.
I can see focusing on the details is often going to be boring.
And you'd want to skip through it quickly.
And other times, it's of interest and so you want to look at it.
So that's a UI.
That would be something that would have to go into the UI is the ability to run through it quickly to a certain point.
And so the original sentence should probably stay on the screen and have specific screen real estate map to it.
So that a person could select, could navigate that way as well.
>>Although I can see in addition to being able to train somebody about the way the JParser actually works, I can see an advantage in that with what I was just talking about.
When I get stumped, if I could look at a tool like that and see step by step how it's working through, that's going to save me a lot of cognitive work because I don't have to develop that in my mind.
I'm going to be able to watch it.
And so I think it's got a lot of use that way too.
>>And there's more information I should put into that UI.
This was a real quick, just taking, all I was doing is taking the JTrace script and taking the loop apart and putting it and throwing a couple of widgets up on the screen to show the data.
There's a lot more that can be done there.
Like I could show the parsing table.
In that display, there were numbers on the screen and they don't make sense as numbers.
They needed to be converted into representing the noun, verb conjunction, the information that they represent rather than just numbers because numbers don't bring you.
>>If you can do that with the existing graphics you've got there, then I think that is a really good way to approach it.
But one thing I'll show you.
>>Yeah.
I was using tables because they were easy to throw together.
I would want to do something more like what Ed was doing, which is taking a canvas basically and throwing the text under there so that I can control things a lot.
>>I'll just show you something that I don't think I've shown this before.
>>It's a lot fun to bring.
>>But our pictures always get in the way of these things.
Okay.
So I want to go across to here.
And this is actually something that I have saved on MediaWiki.
And it's an SVG file that's an animation.
And that's all it does.
But it just means that if you did have something that you're trying to describe, and there's a way to convert that into an SVG file under a certain number of steps, you can build that kind of an interface for it because this will work in the wiki.
And the big advantage of it, it's not big at all.
It's under 10K total, that animation.
Like it's tiny.
Because it's just basically it's a text description of SVG and SVG runs under HTML, which is what the wiki runs in.
>>Does SVG have interaction?
>>Absolutely.
Yeah, that's the big thing.
That's why I used it for Jig.
It's because if I click on something, every shape I've got there is interactive.
When I click on it, it shows me something.
It can do animation.
I've got it animating just to change shade and color to let you know where you're on.
But then actually clicking on it.
>>Some sort.
>>Yeah, it's just a real simple CSS really, because you're using that for your transitions.
>>I see.
>>Yeah.
But yeah, every object you see on it is able to receive, it's an object that's able to receive an event.
I can click.
And the one challenge to it is it's all done, it's still done by the painter's algorithm.
So your background goes down first.
And your next line is like you build your objects out.
And where that gets to be a challenge, as you can imagine, is if you've got something that's expanding, it's going to cover things and start sucking those events in.
And so you do have to be cognizant that you're dealing with a foreground and a background.
And it's the order in which you build your stack, which gives you that effect.
But that's just in terms of something for like, it's possible to get kind of fancy with interfaces.
The challenge is you'd have to know, you'd have to have a codified way to convert the steps into animations that are consistent.
But with a parser, you might be able to do that.
If you were trying to build something like what I was showing, where clicking on a letter would pop up a matrix view, would you do that in SVG?
Yeah, you could do that.
And it's very dynamic.
Yeah.
And then scroll the matrix internally?
Well, yeah, that's essentially what I was talking about.
And I have it in a different interface.
I have the box interface, which is different than your interface.
But you know where your interface is similar to the box interface.
If you go to a display that hyper parenthesizes everything, you essentially end up with the same as a box, except you don't have the 2D, you just got a line of parentheses.
And the parentheses form around each verb, I think, certainly each fork.
When we were looking at your example, I'll stop sharing.
When we were looking at your example, one thing I noticed is you had your cut conjunction with the minus two on one side and the box verb on the other.
That to me should be in a parentheses.
That's one contained verb.
I don't think so.
I mean, conjunctions bind very tightly to the elements on either side of them.
They do.
That's why I would contain it.
That's why I would contain it.
Just for readability purposes?
Because that's actually the way they work.
The conjunction grabs the box verb and it grabs the minus two and it forms a verb from that.
That's the input output you're working with.
And why would you put parentheses around all verbs?
I have to look and see how it parentheses.
I don't think it has to parenthesize all verbs, other than the fact what we're really looking for is the input to a verb and the output from the verb.
If it didn't parenthesize it, I want a way to be able to say that's a verb, what's its input, what's its output.
And if it's a dyadic verb, it comes in two ways, leaves one way.
But when I got to conjunctions, I started to play around with that initially as well.
I was thinking, well, okay, so if I had a conjunction, like I've got a top, and I decided I want to do that.
Okay, so I can do that all with graphics.
I can just say with a top and then I have to think, oh no, if with this verb it changes that, I realize what I really want to do, all I really want to do is isolate that as a verb, say this goes in, this goes out, and then have an explanation for what the conjunction does.
That's nice, but actually what you would really like to do is open up the conjunction and be able to see each operation that it performs with the verb or verbs associated with it.
So for example, let me share again.
Yeah, yeah, yeah.
What I'm doing here, so what I'm doing here, which I don't understand and can't make it work, is effectively by using the mouse wheel on the B, go from zero to one to two to three.
Yeah.
I am looking at what the cut conjunction is feeding to the box verb.
Right.
Now that's sort of a lie.
The engine, I suspect, the J engine, doesn't really know what the cut conjunction is feeding to the box verb.
I suspect that's internal to the C code for the cut conjunction.
I could be wrong about that, I don't know.
No, I think that's correct.
So there's sort of no good way to show it because it's a black box operation.
Yeah.
So maybe you're right is what I'm coming down to.
I'm sorry.
Oh, maybe you're right in the sense that I can't really show what's happening inside the cut.
No, I don't want to.
All I can do is show what goes into the cut and what comes out of the cut.
And yeah, maybe putting parentheses around the box and the minus two would help to communicate that that was what was happening.
That's certainly true.
And then the- It's a terrible shame.
I would really like to show it.
Right.
Okay.
Actually, if we, remember the thing that I emailed you that does the postmortem?
Yes.
It would give you each of these verbs that are here, it gives you a surrogate for each of the conjunctions.
It also gives you a surrogate for, and it gives you a surrogate for also for each of the derived verbs.
So in your postmortem, you would see this entry for the CB and minus two, that that whole thing would be one verb.
And that's going to be executed first, basically.
And also the box here would get executed four times as a result of the cut.
I see.
And that's in the postmortem?
That's in the postmortem.
Oh, so in fact, the engine does know what's happening inside the cut conjunction.
There's an exit out of the cut conjunction back to the engine that says, take this verb, whatever the left verb was, and apply it to this chunk of data that I grabbed out of the right operand.
Right.
Okay.
That's good.
And the postmortem, I also threw time on there so you can see, so you can tell what order they happen in.
It might be that I should throw more stuff into there, or I mean, a modified version of this would also include where on the screen that verb took place so that when you're playing, when you're throwing around the data, you can tie it to the right spot.
If you could do that, that would be wonderful.
I'll put together a draft.
You're very kind.
Raul, when you're doing your postmortem, and you say you took the box cut and minus two together, you've got the input being n, and then you'd have your output of the words being boxed and the man in the would all end up as separate boxes.
When you say you're able to do the steps, is that because you're breaking the steps down, or is Jay actually breaking the steps down?
Well, this is hypothetical in the future because I haven't built a stepper yet.
Right.
But what it's doing is basically every thing that you see visually on the screen here that's an operation is getting a companion, a wrapper.
And the wrapper is what's actually getting executed in this.
I'm constructing a copy of this sentence.
And in that copy of the sentence, it knows what the original thing is, but it also has additional stuff that's tracking x and y and u and v and stuffing it somewhere.
And maybe you should stuff more stuff to make it more convenient to display.
But are you actually creating the logic to say what cut does, or is the system actually providing that to you?
I'm just wrapping each of these operations in code that tracks what the arguments are and stuffs the arguments somewhere in a locale and also tracks what the result is and stuff set somewhere in the locale.
So the engine is still doing its work.
All I'm doing is doing a before and after for each step.
For each step.
And so you can actually track those steps that cut's doing because it has four items.
Right.
The engine is executing it.
Now, that could be combined with the trace facility with a little bit of work.
Trace would need to be informed to use the wrappers and to display the, you know, in a UI for me to display the thing that's being wrapped rather than the spent because the wrappers themselves are just garbage names.
Yeah.
But the process would still hold you just doing it in a step-by-step fashion rather than doing it all at once.
And then the challenge becomes how you marry that to an interface that a person's going to see.
Yeah.
The advantage of breaking it down with the trace facility is so you could show the stack, you could show that hidden intermediate thing.
If you didn't want to show the stack, you could do the whole thing as post-mortem and then go back and take the data and throw it onto the screen.
And I think time is important, is a good approach here.
Because the debug guy tech already does all this work for you, you know, of showing it all at once.
But it is all at once.
And that has limitations of, you know, where do you focus to, how do you manage all that complexity?
And that's, Dissect is a huge project because of that.
Yeah.
This is a, I'm thinking of a much simpler, more humble approach, I guess.
Less ambitious.
Yeah.
Agreed.
Agreed.
So what I was saying about parenthesizing, I think probably still applies.
You put the parentheses around your box verb and then the center would be the conjunction, the cut conjunction, then minus two is the noun on the other side.
But with, and so you'd have an input, which would be N and an output, which would be the four words boxed.
But then you'd also have an option if you highlighted on the conjunction, then to break it down into those steps to see how it got from one to the other.
Yeah.
I'm a little reluctant to change the user's code.
Oh, it doesn't have parentheses.
I don't want to add parentheses.
You don't have to change the user's code because what you're going to display is the user code.
But in order to understand it, the program to understand it, you could either use the parsing, which is going to essentially do what the parentheses would do.
But I'm using the parentheses as a way just to frame that you've got a verb in one case.
And it's not really the conjunction that you're looking at without the verb and the noun on each side of it.
Because the verb is that enclosed thing.
But within that verb now, once you've established that this is what the conjunction is working with, then you can look at the conjunction and say, oh, this is how this works given a box verb and a minus two.
This is how this one works.
And if you change the minus two to a minus one, it's going to work differently.
Yeah.
And what I'm going to do here, I'm not sharing my screen.
Am I currently?
No, you're not.
Would you like to?
Yeah, do that.
No, I don't want to share my screen on this because it's getting me in there.
Okay.
That's fair.
There is a I think it might be because my.
I don't know what's going on.
Oh, I know what's going on.
I know what's going on.
I am going to do one quick hack here and see if that works and then see if that's worth sharing.
I don't know.
Maybe I should take the live coding approach and show my mess as it happens.
But no, no, it's not working.
Okay.
Interesting.
I have a question.
This is a bug in the trace workspace that I probably need to fix.
Oh, well.
Roel, I have a question.
The variables that get created in the postmortem.
Yep.
They're dynamically created, dynamically named.
I, how do I, in the general case, query such an animal, navigate such an animal and map it back to a chunk of code?
What you're going to have to do is use the NL, which is.
There is some.
For one for exclamation colon one.
To get the names from the locale and.
And run through them.
I could probably, I might make sense to build a registry so that the things so build a list of things as it as it's doing them.
But there's going to be a certain amount of looking to see what's inside these things and building a I guess I guess question is what.
It depends on what information you want to extract how you do it.
But you can you can one thing you can do is you can you can get all the names and look through them and see what's there.
Right.
And another thing you can do is you can modify the stuff that's building it so that at the time that's building it it it builds an array or something that that indexes these things.
And.
You know, conceptually, they're each thing that has a time on it is is an action that you can use it.
There's this to somebody I tried to put together a naming structure so that that.
Things related to it, but I hadn't since I hadn't built the things that use it yet.
I didn't really have a good way of of of associating with anything.
If you if you took the the name and you loaded in the time it was created.
Then you'd have an order of the creation.
Right.
I have I have two time variables for every operation actually and and in some cases it's a list because the operation occurs more than once is a start time and as an end time time.
I think it's time zero and time one or something like that.
And everything that has whenever there's a time suffix on the or the time zero and time one there's a corresponding hist and the corresponding raw operation and you know those are the thing.
Those are the events that took place.
And and I could.
It doesn't have to be just that way since we we we have the the source code, we could we can build a list.
Up right up front to say here's the events that that happened and I could I could you know do a just a single thing that says go here for for this step and just a single time series list that that you know it all.
It's an imperative thing thing.
It all happens sequentially.
Yeah.
The time zeros would be the individual variables being created.
Right now the time one is it possible that that completes after another series of variables created.
Well, in a sense, yes.
Remember, you have like you have a conjunction here or maybe a fork you have.
Yeah.
Let's see the fork.
No, let's use it.
Use use an at.
Okay.
You have or let's use the cut in his in his example, you have a box cut minus two.
Yeah.
So the the the box cut minus two starts and then while it's running the you have boxes that run four times before the box cut minus two finishes.
Gotcha.
Right.
And so you'll end up creating four variables sequentially after the start of the box cut minus two.
And then after the last actually, it's a it's a list when when when box runs four times as just each each in the in the postmortem thing that I built each each operation has one name and it has has variables for the arguments and for the results for each of those things.
But when there's it puts those things in boxes.
And when there's multiple of them, it's it's lists, you know, because it ran multiple times.
So the order of the boxes just becomes the order of those steps.
Right.
I mean, each each event has maybe pick it by the starting point, or each event has a time it happened.
Yeah.
And it's it's not really a point in time because you know, it takes it is it has to finish before it gets a result.
Right.
But Um, um, So, juggling some querying and juggling names is weird to me.
Um, It's an introspection technique, but you It does.
Yeah, exactly.
But you don't have to.
I mean, if you want to, if you can think of if you can think of the information you want you can record it up front, you can add it to the postmortem mechanism.
So that's available for you.
You don't have to, you don't have to build it from bottom up, you can build a top down.
I was thinking of maybe putting all of the inputs, outputs start times and end times.
Can I associate any such Collection data.
With the wrappers?
Hypothetically, this could all be a single array, I suppose.
That's also a possibility.
Yeah, with a reference back to the wrapper.
Yeah, it's probably some, I think it's simpler to keep things to keep stuff in separate names, especially because you have to have names for for for the execution to occur, you have to have you have to have something there that that's executable and that's going to be a name.
But Right, but that's independent of your information gathering and querying and peering and poking It's semi it's interdependent.
Okay.
But you can, it's definitely possible to add more organization on this and add and some indexing.
All right, I'll look at it.
It's a marvelous piece of work.
I don't understand it.
So I look forward to spending more time with it.
Start with some start with something simple so that when you look at the postmortem you can you know what all the pieces are you like I got three or something.
Right, I will.
I will.
Two operations and you can see the whole Right, right.
Cool.
Well, Bob, that's all I've got.
I've got plenty to do.
Yeah, you do.
I do too.
Yeah, I well I said this is something I've been looking at for years without making much headway on it.
So I you know, I didn't have time to ask at the BA meeting it ran out and there was still stuff happening.
But I wanted to ask what the state of the I mean, there are different states, right, there's the state of the market.
There's the state of the art and there's the state of the thinking in the community.
On visualizing array languages in progress.
And I'm sure Adam would have things to say about that.
And maybe in two weeks, I'll be able to get a word in edgewise and ask Well, actually, in two weeks.
I think they're doing that of advent of code live stream.
Oh, is that what's happening.
That's what they're going to do.
Yeah, there's they're popping Well, with any luck, by the time I get a chance to ask you will either have cracked it or given up.
Yeah, I'd be interested to hear what Adam is going to how it would his output or his outlook would be on that because he does so much teaching.
But at the same time, he's very He's very driven to the fonts and the linearity of what's going on.
So mathematical type of precision.
So I can never read which way he's going to fall On whether he's going to say yes soft and squishy or is better.
It's easy to teach people whether he's going to say no, you got to stay with the rigor.
I don't know how he falls on that.
There's nothing.
There's no lack of rigor in the visualization or there need not be No, but I think, again, you start to get in the zone where a person who's done all the work to understand to basically internalize what you're going to be shown there may be resistance to showing it to somebody That's, that's true.
And I think that's kind of where he falls in the rigor is he wouldn't say that's bad.
He would say that's misleading.
You get you tell somebody that that's not really what's going on.
It's not what's happening.
They could understand it, but that's not what's happening.
That might be where he comes across.
I don't know.
That's interesting.
Well, we should try to avoid leaving ourselves open to that criticism.
Well, then we should understand what's going on, shouldn't we?
What a good idea.
Yeah.
Okay.
Anyway, that's about it.
Art, as you probably guessed, we were spending some time talking about slightly other project, but certainly, it may come up from time to time and and you're welcome to participate in that too, if you like.
To solve all our problems.
Okay, I'm going to finally share my screen here just to show you.
I finally figure out what the bug was, which was the bug.
My session was so messed up.
I had garbage and it was interfering with what I was trying to do.
It wasn't a bug.
It was a bug that was me.
If I do share screen.
Here's share screen.
I want to share this one, I think.
So got my little J session here, right?
Yeah.
Right.
And this is the parens that Bob was talking about.
Here's your sentence.
Right.
And here's the same sentence with all the implied parentheses in place.
Gotcha.
And in a GUI environment, what could be done here is these added parentheses could be a different color, a faded thing.
Yeah.
And it would allow you to choose what extent of the containing sentence you wanted to focus on.
I see.
And they don't even have to be added all at once.
If you want to, you can dynamically add them as you're progressing through the sentence, which means that if you're doing a trace type of approach, you could throw the sentence up on the screen and as you're progressing through the sentence, you could add it.
You could throw the sentence up on the screen and as you're doing your steps, you could also do the parens steps in parallel.
Right.
And have like.
.
.
Parens would appear and disappear.
Faded cyan things to show where in this original sentence, the action is happening.
Yeah.
And then if you're doing a postmortem type of an approach, you can just.
.
.
it's essentially part of the navigation, I guess, is what I'm thinking.
Right.
Right.
Okay.
And if you take that presentation, that's the parens and think of it in two dimensions, that's actually what your boxed representation is doing.
Yeah.
I'm a little dubious about boxed representations because they are so far away from people's experience of actually coding in the language.
Yeah.
Well, there is one form of the boxed representation, which is the.
.
.
there's a boxed representation that's based on the gerund form, the atomic form, I think it is.
Yeah.
And that's actually useful because that's the gerund.
I mean, when you're working with gerunds, that's what you have to deal with.
So that's like an advanced topic, I guess.
Maybe you should do a better thing about it.
Yeah, when I was looking at my boxed form, that was some of the information that I was going to bring in was that gerund form where you actually can break down a fork has got a different predecessor.
I think there's a number for a fork, I can't remember.
But basically, they can identify forks and hooks and all these things in the language without you having to go in and figure out yourself because the language knows about that stuff.
But it is a different presentation than what would be a boxed verb form.
It's almost done, like it's gone in and if you think about scanning in grammar, it's done a parts of a sentence scan as opposed to grammatical or grammar types.
So you've got two different things you're looking at the same time.
They're the same thing, but the views of them are quite different.
And the information in both of them is useful.
So it's like verb noun adverb as opposed to subject predicate, you know.
Object.
Object, yeah.
Okay, well, I'm going to dig into Roles code and make changes.
Big fun changes.
So we'll see how that goes.
It was intended to be changeable.
It has the merit of being very brief, so I'm not as intimidated with it as I might otherwise have been.
It's not dissect.
It's not, as you say.
I had thought I was going to have to dig into dissect.
That's an impressive piece of code.
Yes, it is.