Wiki/Report of Meeting 2023-04-06

From J Wiki
Jump to navigation Jump to search

Report of Meeting 2023-04-06

Present: Ed Gottsman, Dave Lambert, Raul Miller, and Bob Therriault

Full transcripts of this meeting are now available on the its wiki page. https://code.jsoftware.com/wiki/Wiki/Report_of_Meeting_2023-04-06

  1. We started off with Ed's fifth demo of the new J wiki browser. The challenge is to display a category tree of over 150 categories. Sub-categories are displayed with pages when possible, but when there are too many categories the display is broken into sub-pages. Also a timing constraint so that pages are only selected when they are hovered over for more than 1.5 seconds. Ed is beginning to think about what it would take to make a stand-alone version. https://www.youtube.com/watch?v=uhhGi8gLfvw
  2. We talked for a bit about SQLite as a database. Ed was thinking about dropping it but has found it is very useful for debugging and fits the purpose well. Raul asked whether Jd had been considered. Ed said he could look at it, but would need to be convinced that it would be the right move. Bob thought that Jd would work and that there might be advantage as a showcase and the ability to write in J, but we should not let that get in the way of something that is working in SQLite.
  3. Ed mentioned that he was picking up extra categories that are not part of the category tree in total over 750 categories and Ed wondered about including this many categories in the interface. Raul mentioned that it was really a tag cloud and Ed felt that might be a better way to display it, possibly with a threshold for display that might be user controlled. Ed suggested the tag cloud node could be another node in the category tree.
  4. Bob showed some categorizations that he had done that tested the limits of categories, by making the category tree into a directed graph that has loops and loops within loops. This would have some functionality to develop trees that were related to a specific topic and these trees or portions of them could be attached to the category tree. It was generally decided that this would not be a good way to do this because loops can create user fatigue as they can create large, disorganized cognitive loops that confuse the user. We should be disciplined with the way we structure the wiki, but we can be more liberal with the way that we attach pages to the trees.
  5. There was a discussion about a maintenance category in the wiki and whether that would be an issue with trying to tag pages with FixMe or Delete tags. Currently we are doing this to some extent by having a link on the main page to the wiki information. The link could also be put in the side bar so that it would be available on every page and this is probably a good direction to go with the Wiki W category on the main tree.
  6. Ed explained that his wiki browser traverses the category breadth first search and if it sees the category a second time it will display it, but not its children. This makes the content on the category page important because it could contain links to child categories for users in addition to the structure of the tree. It also might just be series of links to the different user created categories that would 'air gap' the loops that could be created if they had been directly attached to the main category tree. User created category trees have their own categories and then link back to the pages freely. A node on the main category tree could be added for user defined category trees so that they can be found.
  7. Bob mentioned a meeting that he had with Tom McGuire who has created many categories in the prototype wiki and he is working on the categorization of Essays and this is invaluable because it gives a second pair of eyes on the choices that had been made. It would also be a good idea to develop a list of categories so that we can guide people into more consistent categorization.
  8. A discussion of adding a saved documents node in the table of contents so that you could curate pages that you found particularly useful.
  9. A detailed discussion about tracking mouse movements. When the mouse moves off of the middle pane there is not a way to know the mouse has left an area and so the timer keeps running and the page will be displayed. Dave suggested that you might be able to track mouse position and Raul wondered if there is a focus loss event that could be tracked. Ed will do more investigation into this to see what events are being passed through the web view.

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 general forum and we will get you an invitation to the next J wiki meeting held on Thursdays at 23:00 (UTC) Next meeting is April 13th, 2023.

Transcript of Meeting

I don't know whether you guys noticed, but I was able to post a transcript of the whole meeting.

I saw, I didn't see the transcript, but I saw that the captions, the closed caption in the YouTube video was usually high quality. Was that you?

That was the transcription, yeah.

Oh, well done.

Yeah, it's an app on the Mac. It's called Whisper, I think. It isn't the Whisper that actually does it. It's a front end to the Whisper, but you pop it through and it takes about real time. So for an hour meeting it's going to do about an hour to transcribe it. But it just comes out in text. It knew that it was able to parse or to transcribe JChat, JForum, JWiki. I just assumed there was manual intervention there, but apparently not. Oh my god. I did change one thing. What was it? I can't even remember what it thought I had said, but I'd said something about, "I get enthused about the J playground," and I think it said "J Blake something." So I get enthused about J Blake and then something. What did I say? J playground, yeah.

Must have been J playground, right?

Anyway, it does make it better for the videos because I can drop that transcript in with the video so it's transcribed. And then also for these meetings I can drop that in so people, if they want more detail, can go in and look at it. Similarly, if you guys want to go back and review what was said, you can check. And so my synopsis is just that. It's coming through me, so take it for what it's worth. Do you want to start off, Ed, to share screens and see what you're going to show everybody?

Sure. I spent the last week working on refactoring. So I was, up until the last couple of days, leaning pretty heavily on the guarantee that all categories are unique. named, and if you're doing tree work you really shouldn't count on that, and when I started to confront loops in the tree and when I started to add searches to the table of contents, in other words put searches into the tree, that guarantee became too weak to support the application, so I actually had to go back and do real tree navigation and parent-child and make sure everything made sense, so that it was mostly a refactoring effort this week. I will, just so we've got something, go through a summary of how it works, just sort of to level set, and then I do have a couple of things that I wanted to discuss. So the table of contents is now Bob's Wiki category tree, which is about 190 categories. What the table of contents shows on the left is the top three levels of that category tree. So "home" is at the top, and then notice is "n", "newcomers" "n", "developers" D, reference R, community C, and so on. And then there's another set of levels below each of those. Basically the problem is to tame that almost 200 category, that 190 category hierarchy. If you look at it in web form, if you are sort of exposed to it, if you try to wrap your arms around it on the web, it presents you with one set of challenges. And what I wanted to do was try to overcome those challenges with a slightly different or very different interface. So we have a couple of ways of doing that. So for example, if you pick, say, interfaces. Interfaces is a level three in the hierarchy, and its children are small enough that it has a small enough number of subcategories and pages, you can actually just lay them out flat. So rather than navigating around on the web from category to category to subcategory and page to page, you can simply lay them all out flat on the display. If you get to something like frameworks, frameworks are sufficiently large that you can't do that. What we can do is show the entire subcategory tree underneath frameworks, and as you touch each category in turn, we show you the corresponding pages, and we also show you the category page over... sorry, corresponding page names to the right, and to the far right we show the category page out of the wiki, and hovering on the page loads that page on the right. Hovering on a page name loads that page on the right. The other thing that happens that I think is new, or new again, I took it out and put it back in, is that when you do hover for more than a second and a half, that page, whatever it is, is added to your history of pages. So this is sort of a, I guess you'd say it's a hack to get around the nature of hover-based interfaces where all of your visits are very ephemeral and it's easy to find something and then go somewhere else and maybe not quite remember where it was. I would hope you could find it again quickly because you can navigate so very, very fast with this interface, but just in case you can't it's probably in the top few items in your history menu and you can click on it and load it up. In addition to these categories, Bob's categories, we have synthetic categories at the top. NuVoc is one of them, so this hasn't changed from the beginning. This has been pretty stable. And then under search, I have two searches that I added to my table of contents, Random Fix, Seed, and Dyadic Transpose. Wiki and forums are both supported. And then there's the forums browser as well. That has not changed. That's the story at this point. That's everything that it does. In terms of things that I think it should do, I have decided - and this was based on some back and forth with Bob - that I need this scrolling mechanism needs to be supported in the forum browser because there are just a few, and I'm not sure where they are anymore, but I found one or two selections of subjects and selections of contributors that are so long that they just go right off the screen, so there needs to be some kind of scrolling mechanism at work there, so I intend to do that. I think I'm ready to start trying to produce a standalone version, probably for the Mac first, because Mac is what I happen to work on. So Bob, I would hope that within the next week or so I could get you something that wasn't just a script file, but was actually a working application. And I'm starting to think through all the things I might need to do in order to make that happen. I forget the gentleman's name, but somebody produced a really good, what seems to be a really good piece of documentation on how to build a standalone app using J9. So I've been reviewing that and trying to get my arms around it. So I hope to do that.

Is that Norman Drinkwater did that one?

Norman Drinkwater, yeah, exactly. so I'm going to use that as my guide. I use SQLite as my database, so I produce a SQLite database by spidering the category tree and spidering the forums. I had thought about getting away from that, because the binary for SQLite is about 1.3 megabytes, and I thought, while we can cut the size of the executable down significantly if we don't use SQLite. But it turns out to be really useful. I've added the menu history that shows up on the right, it's just another table in the database and it's persistent across sessions. All the logging that I was doing the activity logging and the crash logging, I'm just writing that to another table in the database. So if the thing gets out into the wild and people have problems with it, if they can send me, if they can compress and send me the SQLite file, I'll have a lot of the application state which is kept in the database, as well as the activity log and any crash information that it was able to write. So debugging problems might be a little easier. So I think I'm going to keep SQLite at this point unless somebody somebody talks me out of it.

Have you tried JD? Does it have obstacles?

You know actually I Raul I can't say that it does. I come from a sequel like tradition. So it's what I naturally gravitated to Would there be an advantage to going with JD to wrapping my arm around?

I don't know. I have I'm not a I'm not a SQLite user or a JD user I've seen people use JD, and I've seen people use SQLite. I'm just curious.

Yeah, I've had one experience with JD where I wanted to do something and I ran into trouble, and I was not able unfortunately to overcome it. So I went back to SQLite, and that's my only experience with JD. So I could definitely be talked into it, but I would need to be talked into it, I guess. You need somebody familiar with it to hold your hand a little bit, starting out. Well, or at least talk me through it and just say, look, here are the advantages, here's why you should make the effort, and then I would cheerfully make the effort.

Well, if we wanted to go that direction, I think I could probably talk to Eric, and since it's his application, he likes to see it used. I think he would probably give you a big hand. I can't promise that, but I think in this case, I think it would be a really good showcase for it if it worked well. And I think it would. I know there are certain things that JD doesn't do that some of the other big database, you know, like the time series stuff, it can't do all the, what is it, the as-of joins or whatever they are? There are things it can't do. But that doesn't, yeah.

I'm using SQLite as basically a bucket of tables. I don't even think... I don't have any indexes on it even. I'm using it in a very amateurish basic fashion, so it wouldn't surprise me if JD could do all the same things. I'm very happy about the single file. I think JD does not do that. I think JD is multiple. that you do as a file for, I mean, even a set of files per table. But you can zip them. Well sure, but I mean there is a convenience factor. I would be happy to have the conversation, I'm not foreclosing it by any means, and I take your point about it being a good showcase, potentially.

And I guess the only other thing that I know Eric always says about JD, the big advantage to it if you're an Excel user or something like that, you can, you know, Excel being a different application, but you can use J within the cells of JD. Like you can do that. You can write J inside it. So it gives you some options there if you're a J programmer that you've got full control of J from within J within JD.

Well the attack surface, if that's the term I want, the interface between the application, the two applications that I've written, the spider on the one hand and the client that I send you, Bob, on the other, and the database is a fairly small one. So if we had to swap out SQLite for JD, I suspect it wouldn't be a massive undertaking. But it would be an undertaking. I would need to understand why I was doing it. Yeah, yeah. And I, again, I'm not, I think it's more important to get something working than it is to try and fit it. So. And it's perfect.

Yeah, yeah. I just think it, I'll talk to Eric and see what he thinks, and see whether, if he thinks it's worth it to go after this that way, then maybe that'll be some motivation to at least look at it. And if it doesn't look like it works, then we blow off and go off the other way. But if he says, "No, I'm not," you know, then I think we'll just work with it.

JD is solving much more interesting, complicated, and difficult problems than I've got. But yeah, happy to talk about it. I have another question. The previous way I was spidering the categories, it doesn't matter what I was doing, but I was picking up some non-Bob categories. Like I was picking up Devin McCormick's poker category, for example, which is not part of Bob's hierarchy. My thought was, "Sure, let's get him in there. Why not? It's part of the wiki. Let's make it visible and available." It turns out Bob has 190 odd categories. there are a good 500 or 600 additional categories.

Actually, I think it's under 500 because I can fit them on 250 pages, but it's not much under 500.

Really? Yeah. I had to go up to, I had to go over 500, I thought, to get them all. Oh, okay. That's interesting. But I could have been doing it wrong, that's entirely possible.

Oh no, you're right, no, I had 500, 500, so Yeah, it's under a thousand. Yeah, no, you're right. You're right. The thing that is a little bothersome is that as far as I can tell from just scanning through the list, the vast majority of those categories have one, maybe two pages in them. I wonder about the utility of making them all available in the interface. And also then they're not a tree.

Bob's are organized specifically as a tree to navigate it, and the other ones are more of an ad-hoc thing that's more of a cloud than a tree. But I could definitely see throwing a threshold on there, maybe even a user-adjustable threshold that says I don't care about categories with less than so many members.

You said cloud.

I did.

Tag cloud. That's essentially what those are. That's a style of presentation that I could probably figure out. I don't know if there's any point to it, but if I thought of it in those terms, that might make it a tractable problem. And yes, wider or something that says, let me select the number, the threshold as you say, of number of members of a category for the category to appear. That might be interesting too. And those categories that aren't in the tree are definitely, they're tags. That's really how they're being used there. Categories can attach to categories, which is a tree, but if they're They're just categories and they have no home. They're a tag.

- They're a tag in a flat structure.

- Yep.

- Yeah, okay, I get that.

Maybe it would be interesting to do a tag cloud interface. I've never done that before. I'm just, I don't know, I just see.

- I love it when people are making things go, "That would be interesting," 'cause you wanna see what they come up with. (laughing)

- Oh yeah, okay. I think that, well I do think if you looked at it like a tag cloud and sort of organized it that way, that really could be very interesting. About, and it doesn't, again the way your browser doesn't have the friction getting around the wiki, a tag cloud is even less friction, right? You just sort of have it presented and hover around it and do what you want.

- Just need some kind of, you'd want some kind of organizing mechanism and you'd want to be able to do string searches of the categories on the fly, highlight the ones that match the string that you've partially typed in. I mean, there are definitely things you'd want to be able to do, but maybe, I mean, we'll just, basically it will be another node in your hierarchy, your category hierarchy, just as the forums are nodes in the category hierarchy, and they just have a different user interface in the detail area.

- And that node would just be a big flat plane of tags, right?

- I think so, unless I can come up with something clever. Yeah, yeah. All right, that's, yeah, I think that's doable. Um, okay.

- A couple of things, I'll show you my screen, because of playing with categories. So just show you what can be done with categories. It's not pretty, but you know. - This is a challenge, I can tell. - This is gonna be, it's gonna be something. Here we go, okay. So currently, hopefully you're seeing my full screen, my version of this. And a couple of things I've noticed, well, let's look at the categories first. So, and I'm just gonna drag this out of the way 'cause, oh no, I can do it this way, okay. It always puts the bars just in the wrong spot. There we go. Work over here. So right now I've got system request quaternions, and that's the page that I guess I just hovered over last, but I will go back to, 'cause I looked at the homepage And I changed one thing on the homepage, and this is just visual, it's nothing else. But instead of having it open two levels, I just had to open one level, just to think about what that would look like. It does clean up the announcements, as you can see it. I've changed the notices N, which was conflicting with newcomers N, and I've made announcements A. But if I open this, yeah?

- Not anymore, since I am now a mature tree traversal. It's no longer a program. Thank you for changing it. I should have told you it wasn't necessary, and I apologize.

Well, I prefer having a separate letter there for a category. Now, the one thing I'll notice right-- or note right now is you'll notice home doesn't have any letter after it. So if you were looking to try and trace back, home is going to be an issue. And I'd be happy to put an H after home if that's an issue, because it should be consistent with these other ones. Consistency is good, but don't do it on my account. For me, it doesn't matter. To me, it's nice to have something just called home and it doesn't distract away from your base. But if it was a problem, I can change it. Okay, so let's look at this. You see FixMe here. FixMe was one of the categories that you identified that was looping because it was part of a different category. So I've done some things here. I have attached FixMe to the home category. It's a child of home. And I come down here to contributing, which I haven't fixed this yet, 'cause I'll take the changes when we know it's stable. It's a typo, so this will end up being replaced with contributing as it should, and I'll just swap all the links over and it'll be fine. It'll be the same thing, but just spell properly and I have an extra category. I put FixMe under contributing.

- Ah, ah.

- Ah. (laughs) Now the other thing you'll notice is development is under contributing, and so it's here too.

- Yeah.

- And FixMe has development. (laughs) So I was playing around to see what this can do, and it can respond that way. Now, the big question is, is this useful? It won't break the wiki, but is it a useful thing? It's a directed graph instead of a tree, is what we're saying here. And the question is, how useful are directed graphs for locating information, I guess? Well, the other thing I think of is, I'm not sure a directed graph is preferable to locating information. But for presenting information, I think it is useful. Because I was thinking if you had something, well, we were talking about this at one point, where newcomers might have a category with attached to pages that were specifically curated for newcomers. But there also might be a really good explanation of something that was of interest that was a category tree, say based on tree searches. But it was a really good basic how to use J for a tree. Actually, I'll use an example. Tom McGuire did a whole tutorial on his user site with the Cadanes algorithm. And he did it as a tutorial. So he broke it down. It's really quite neat. He goes all the way down then realizes that Fold solves a lot of its problems. But the point is that he's got this whole thing that would actually be really useful for a newcomer. And you could develop that information not as a single page, you could develop it as a tree and pull in other pages as resources. Now, if you did that, and you attached that tree under newcomers, because it's a good resource there, and you also had it under reference, because it's a really good reference for thinking about trees, now you've got it in two places. Now there are two places at equal position. They're like, they would both be three levels down, but there wouldn't be anything keeping you from having that cadane tree attached to something else up higher, because say in reference or say over in community, somebody's got something, another user has it, They're a tree off a community group, although I think they'd be a page, but I'm just sort of giving an example. You could loop it back up to another level and I think that's where the directed graph becomes a way to present things because you're not limited by closing loops. But the question is, is that, and the way around that is you don't close loops, you make copies. Because if you make copies, you're just separated. You get the same information, although it only lives in one spot each time. So you might, if you had to keep them up to date, that would be an issue. But you would not have a closed loop because essentially you duplicate a node and split them.

- The big issue there, and for the example you got, it sounds great. The big issue there that I can see cropping up is fatigue. Because if you start going in loops you're missing out on other stuff, you want some kind of hint to know where to break out of it, I guess. But as long as we're disciplined about how we use it, it should be okay. I would think. Calling it a directed graph is accurate, but just referring to it is...

Not helpful? Sorry?

Accurate, but not helpful?

Maybe more helpful just to call it multiple indexing, and as soon as you call it that, you realize, well yes, of course we want to be able to have multiple indexing. Obviously there may be many paths that would lead you to a particular piece of information that's of interest to you. That's the nature of human knowledge, that's just clearly we want to support that. We probably, as you say, want to be disciplined about it, but we don't want to foreclose the possibility either.

And would multiple indexing, is there an indication that the wiki is using multiple indexing as it is now to be able to do what I just showed you?

I'm not sure I understand the question.

Well, it's got a category within a category referring to another category above. Would multiple indexing be able to handle that? I would characterize that as the kind of structure you wind up with when you tag a particular piece of content with essentially two different paths that lead to it. And that's what I think of as multiple indexing. You've got to note that it's 12.30 midnight, so it would be my time, so I'm not as coherent as I sometimes am. the time, so I'm gonna have to distrust me on that. Well, and I would refer to what I've created here as degenerate. But it could occur naturally if you were looping around.

Absolutely. Because of the fixed me aspect.

Because of the which, Raul?

The fixed me aspect. Because 'cause it's not a useful piece of knowledge that it's fixed me, fixed me as a bandaid that you're intending to fix.

- And when fixed me first showed up, I think my solution to it is not a fixed me category, but is a fixed me page, which you attach to any category, any page that needs to be fixed.

- How do you teach to a page? Oh yeah, it's such a good idea. It would need to be a category. So you tag it. How did I come up with that? I did. There were two ways to do it. I could put a link on the page that would take you to fix me. Oh no, no, I know what I ended up doing. There'd be a fix me page and on that fix me page, you would put a link to every page that needed to be fixed.

- I gotcha.

- Whether it was a category page or a content page.

- Yeah.

- So you'd only see Fix Me if you went to what links here.

- Yeah, yeah.

So you could have a Fix Me category, but it actually, again, it could be linked up to home if you wanted. It might not show up in the tree, 'cause if you didn't, well, if you put it in the category, well, no, you could put it as a page, going in six different directions at once, and it's not midnight my time. You could put it in as a page, Fix Me, attach it to home, and then whenever you wanted to, you could go to that "Fix me" page and you would just add the link of whatever you wanted to fix to it. So it doesn't have to be a category. If you do make it a category, it can sit in the category tree, but all it would contain would be links to pages that needed to be fixed. You can make it a hidden category if you don't want it to show up somewhere else. Absolutely, you can make it a hidden category if you didn't want it. I think there's an advantage to having that one not hidden. So that you could look at a page and it says "Fix me" at the bottom and you know there's something to be done with it.

Is it worth distinguishing between maintenance on the one hand and knowledge representation on the other? Sometimes, I don't know but here.

Okay so maintenance I understand, knowledge representation is that just the display of the information you mean? The structure of the information, the structure that includes multiple parents on a child, multiple parent categories on a child category that includes cycles that maintenance is going to... you could implement maintenance in such a way that it would create cycles, that it would create multiple parents, or you could implement it the way you just described, in which it doesn't need to do that. But if we encapsulate the maintenance problem, set it aside just for a moment, how much of a problem with multiple indexing, with cycles, with multiple parents on a category do we still have left? That's, I guess, my question.

As long as people don't get confused, I don't think we have a problem. And we're not going to find out about people getting confused unless they tell us, or unless they're us. So you think the issue would be more the user being able to follow the trail of of information.

- You're usually getting lost.

Yeah, I mean, if the user has, and that's a subtle thing, because it depends on their goals and where they started from and what they were told and a bunch of others.

- Yeah, I think we should be very careful about having introducing anything like a loop into the tree, but it's nice that it's not prohibited. I guess that's the way I would approach it.

Is there another mechanism that could be used? Because the other way to look at this... of course there is. I mean, you can have a table of contents which is a strict hierarchy, and that's great, but there's nothing to stop you in principle from having explicit pointer cross-references from node to node in that hierarchy that do not themselves participate in the hierarchy. They're another category, excuse me, they're another type of link, they're not a category link, they're a cross-reference link. So they wouldn't introduce cycles in the table of contents, but they would record these relationships that cross category boundaries. Even when I'm completely slept, I'm never really quite sure how much sense I'm making.

No, I understand your observation. I'm trying to think about, like, what occurs to me is how much is the current wiki category what I would refer to as maintenance right now? Oh almost none I would say it's all knowledge representation. For the wiki category? The wiki W. Yeah this category here. I thought you meant the categorization. No no no no no no sorry so the actual wiki category I I think that's what you make a really good point. I think the Wiki category right now is a maintenance category.

- I would go along with that.

- Yeah. - Yeah.

- So then the question is, how would you, how, where would you put the Wiki? You can separate it out. And I think that would be entirely valid. It would be part of a different category tree because I don't have to just go with the home. I could separate WikiW from home, just get rid of that link back up to home, and anything below WikiW remains a category tree.

I like the integrated category tree. I don't know that we should be creating multiple independent category organizations. If the pathological structures are limited to the wiki node, I don't think they'll do much damage to normal users. This is to the point Raul has alluded to a couple of times with people potentially getting lost. You're not going to explore... I mean, you might get lost in maintenance, but it's probably not going to do you any harm. You'll realize, "Wait a minute, this is not a pleasant neighborhood. I should go back to where there's actually..."

Okay, so I'm going to show you something right now that I think you've identified something that I think we actually looked at a while ago. We don't realize that we've put it together. And that is if I close up like on this this wiki W here, if I took it off the tree on this page, I could still get to it this way. And actually, no, it didn't take it because that particular link is hooked up to the old wiki hints. It's not the one that's currently wikiW, I don't think. Let me see view source. Yeah, this is wikiW, so I'd have to have it connecting to wikiW. No, it is wikiW, so that's the right one. Interesting. Because I was expecting-- oh, no, no, there they are. There's the three links, there's the categories, help index. So they're all there. And if I open this up, I'm in the same situation as before. I've got a FixMe, and the FixMe has development, and this has a, so it's all there, but it's all linked to a single button on a page. So it doesn't have to get messed up in the tree if it's accessible in a different way. And the other way it could be accessible is on the homepage, I love this dropdown by the way, on the homepage, 'cause it's gonna just--

- I didn't invent it.

I know, but it just gives me access to get back in a second. And that's what I was looking for when I wasn't in a browser. It's great that way. But there are two places actually I could do. I could put it here on a page, or I could actually put it in a sidebar, and it would show up on every page. So to me, that would be the most appropriate place to put anything that's maintenance is on a sidebar when it's on every page. it doesn't get in the way of this.

So let me repeat something that I think Raul missed. It's another data point that is related to this. The way currently, the way as of a few hours ago, the application handles loops, it'll do a breadth-first traversal of the category tree. Not depth-first, breadth-first. So it'll tend to find... well, okay, so period paragraph, it does that. If it runs into a category for the second time, so it keeps track of categories it's visited, it runs into a category for the second time. That's because there's a loop. It will process it. It'll say, "Okay, I'll put that in the tree that I'm slowly building up based on spidering the web pages." But it will not further traverse any of its children. So it will not follow the cycle. It will sort of note it. It will say, "Yeah, I realize this category occurs twice or three or four or five times, but it will not perpetuate the sin, yea, even under the tenth generation. That's not going to happen." But Bob, what you just showed is exactly how to deal with it. So if you come down via a route, if you come down to a category whose children have not been put into the Table of Contents tree on the left-hand side of the screen, you can just bring up the category page for that category, and you will have the tree, all the child links and all the associated pages. Well, you'll get the associated pages anyway. You'll have all the child links available in the right-hand browser, should you need them for some reason.

So we don't get into loops, but we do give you access to those links. We don't close that possibility. And when we were talking before about using category trees as almost like labs or conveyors of information curated, I think what you would do is you could have a link put up here for maintenance that would, all the stuff that was wiki and maintenance related and all that could go under that link. You go to that and it takes you to that category page that is a category tree with all that information. You can also put a page or a link here that would take you to just general user developed category trees. And there could be a full list of them in a whole bunch of different topics. And you could just see them spread out before you, you click on it. There's no conflict because it's separate from this table of contents. But this table of contents should be able, now this is where it would get tricky. Could this table of contents link back to those category trees? Or would that be a loop?

>> I got the first part and you locked me with the second part.

So I don't think people should be creating their own category trees. I don't think that's a good thing. and now I'm outside my area of expertise, but I think it would be much healthier for all concerned if people could be encouraged to enhance the existing category tree.

Okay. I'm not going to disagree with that. I think that's probably practical terms. What I'm thinking of is there, I look at that, the category tree as a way to curate information across the wiki, collect it in one spot and say, hey, here's a topic, look at this. But it doesn't, at this stage, I would be content if my category tree that I created, because I know how to create them, and see that's another level that not everybody will know how to do, but the fact that I know how to do it, I'd be comfortable not linking back to the the table of contents category tree, I will just go up and get pages. That's really all I want. Linking to a category tree. Well, okay, so I build a category tree, I've developed all my own categories. So they're independent of the table of contents. There's no linking between the two. But I've attached pages to those categories. So when you go through, you've got all the information I've attached to organize it this way, and I've got all the information I've pulled it across. But pages don't have a conflict because they're all leaves, right?

- Yeah, yes, they're leaf nodes. But how do I find your trees? How do I find all these trees that were-- - Well, that's what I was saying. If you did that, I would put a link on this side that basically said user-developed category trees or whatever. You click on that and that would be a category tree of all those category trees. Still independent of this.

And my suggestion would be add another node under home called user category trees and just hang all the category all the user category trees off it. And if I don't care about user category trees I can ignore that node. Yeah and as long as those as long as you don't hook back to one of the other categories you're okay. And that comes back around to us trying to keep it as a tree and not a looping graph. Well, they can still, even if you don't put them into your hierarchy, they can create loops, right? They can link to your categories. Well, sorry, they can link to your categories. More importantly, they can link to their own categories. They can create loops. There's nothing to stop them from doing that. Well they could, but I'm not like...

If I create a category tree, it's based on independent loops or independent categories from another category tree. Yes, you're not hurting anybody else. Nobody is affected, and I can hook into any page that's on the wiki and it won't affect anybody else. Yeah.

And so I can pull all that information in, put it in one place, it's a category tree, and I can put it as a link, and I can break the link by developing it not as a category necessary of the home category, but perhaps as a page linking to the home category that links to all these category trees that are independent. And the way I would do that is the same way as these things here, I've actually done graphics on the home page that will actually link to the different categories, But it could just as easily link to a page that had other categories. So I've got a break, I've got a, basically a little bit of an air gap between category to category, even though they showed up on the content. So I guess I think I see what's happening here to me and my perspective. I'm trying to get everything into that left-hand margin. So I took your categories, I had Devon's poker category and a few others, they were in there too. I took the forums, they're all in that left-hand margin, your searches are all in the left-hand margin.

My instinct would be to take all of those user-defined category trees and get them into the left-hand margin too, irrespective of how they were represented in the wiki. But that's, you know, my problem, my neurosis. Now when I go up and down this left margin, I don't see poker, do I?

Nope. When I switched over to, well, when I was spidering the zip file of the entire wiki, I used one approach that had me pick up a bunch of user-defined categories. I'm not doing that anymore because it was stale data, so I'm actually hitting the wiki directly, and I'm going in via the home page and traversing down the category tree. And as such, I miss all the user-defined categories. Gotcha. But you're saying in the future you could include them. Is that right? Yeah, I think I will include them as a tag cloud kind of a thing. I think that's appropriate. There is no structure to any of them at this point. But if they develop structure, I think it makes sense to put them into the left margin.

Absolutely agree. I think that's exactly right. And we may be able to see that formation starting to happen in the cloud, if you have a cloud view of it, you'll see which ones are becoming more popular. And so they'll get promoted and show up in the left side. That's entirely possible, yeah.

Or to Raul's point, you might do something where you say any category that's got more than ten pages associated with it gets folded into the table of contents, and the rest of them are sitting in a tag cloud. I don't know.

Yeah, yeah. Well, that certainly gives me sort of direction because I also had a meeting with Tom McGuire, who's done an awful lot of work categorizing. And he's going to work now on the essays to sort of build up categories around them. Because when I categorized essays, I'm almost embarrassed to show it. No, I said the essays in... The way I categorized them was, well, you can see I've got language concepts, math, puzzles and games, algorithms and arrays. And the only ones that I feel good about are @playwithj, 50 Shades of J, well, history is just history. Okay, so those ones I feel good about because they're groups of essays, essentially, that exist in one group. So it makes sense to have them together. But in the other areas, they're really pretty arbitrary. And he's gonna go through and see whether there's better names for that. So the categorization could be better. And when we drop down a level, it's actually still more appropriate. And basically it's the problem of naming things and he's willing to take that on. So I said, thank you so much. Let me know when you surface and this will be very useful. It'll be a second pair of eyes, least on the categories. So with essays is sort of where you sort of see this come out is you have to start categorizing. He's going to start working on that. He did say, and I think Devon mentioned it before, we should look at how we want to, as you say, with just under a thousand categories, we should be looking possibly at consolidating some of these categories and maybe having a place that you can go look and see what categories are there to start with. So that if you're wondering how you would categorize something, you can take a quick look and see whether your category exists or something like it. And if you can attach to something that's there, great. If you wanna develop a new one, you can do that. It's a tag cloud, but it would be an unhappy thing if you went to all the trouble of categorizing something and found out you were the only one categorizing it in that topic and you didn't have enough critical mass to be able to affect anybody and they never knew what you'd done. Yeah.

You know, whereas if you did the same categorization to a topic or a category that was being used, now you're building on somebody else and building together as a group. There's been a lot of work done on manual indexing and human behavior It turns out that if you give people an indexing schema, a table of contents, and 50 documents, and you're very clear about what the criteria are for each of the categories, for each of the tags, to assign to a document, you give that stack of documents and those criteria to 10 different professional librarians and you put them in 10 different rooms and say index these documents, they'll do it 10 completely different ways. It's a very hard problem. Yeah, but I think if we get appropriately named categories, headings essentially, for our table of contents, it's a start and I - I don't think we have that yet.

Yeah, I don't think we have that yet. But so that's where he's gonna focus on 'cause I think essays is a particular place where that is very apparent. In other places, it might not be so much but essays it is. A lot of information and arbitrary definitions. So that's what he's working on. The other thing that I noticed and this is more interface. Is there a way when I go to my dropdown, I say, I love this, I love this. Is there a way for me to get rid of this? Can I, is like, I can clear a search, do I have a clear dropdown button?

- No, would you like one? I can definitely do that. - I think I would, 'cause otherwise, they're persistent across sessions, right?

- Yeah, oh yeah.

- Yeah, which is useful if you want it, but I'm thinking five or six sessions in, I'll pick a dropdown am I gonna have here, right? Well, I think it truncates at 50. Okay, so there's a limit. The most recent 50. Okay.

You still want a clear button, 'cause I can do that. No, if it truncate, well, I maybe have it truncate a little. I'm just wondering how looking through, like what am I looking through now? Probably about 25 names, 25 levels. So if I double that, I guess that's still useful. I can do a quick scan and see what I'm looking for. The-- you know what would be really useful, I'm not sure it's possible, is if I could say, you know what, I'm not really interested in this. I just hovered on it and I thought it was good, but it's not. I'll get rid of it. That would be really useful. So I could essentially-- yeah, could I curate my dropdown? It's going to be pretty temporary anyways, because as more stuff comes in, it's going to push things down. You might want to instead have something that can pull stuff out. Unless the problem is people being embarrassed about viewing all the porn that's on code.jsoftware.com and they want to play that out so that their spouse doesn't get upset.

I haven't found that yet, and I've seen every page.

- It's a theoretical problem. We're planning for the future.

- Well, actually, and I'd like to make a point, actually, I have not looked at every file. So I have no idea what those files are sometimes, but I wouldn't expect it.

- It's 90s era animated GIFs that are pretty steep stuff, I suspect. One of the things I didn't do, but have thought about is a save feature. So basically in the same way that you, when you do a search it adds a few items to the table of contents for search results. You could have a node in the table of contents that would be your saved documents. So any document, whatever document, whatever URL was up in the browser on the right, there could be a button that said save and that page would just show up in the table of contents. So again, fold as much as possible into the table of contents. Oh, that's a neat way to do it. One other thing I noticed on the interface, you've got it so after I've hovered-- oh, I got to set up my-- I'll do essays. There we go.

I still love that dropdown. It's so good. So I go here, and I'm on reference to Nuvoc, the J language reference. I've been on it for a second and a half, so it's up on the screen. now as I go across here, was it a second and a half when it went to SQL?

No, so here's what's going on. And you brought it up so now you have to listen to the explanation. Okay. It turns out that I can't detect the mouse when it's outside of the left pane. That's important. If I knew for sure that the mouse was no longer in the left pane, that you'd moved over to the browser... I haven't moved it to the browser yet. Well, I know, but it's a problem because on a lot of these pages they're just chock-full of labels. There's no free space. I have no principled way to know that you're not really on a label anymore. In other words, if you move the mouse onto the browser, as far as my application is concerned, the last I heard of it, it was sitting on top of a label on the left side. So the browser eats the mouse move events. I don't seem to be able to get the mouse move events. mouse move events when you're not on a label? On the left side? Yeah, if you're... it would be okay in this particular case because Bob is still in the left side of the screen and he's not on a label. But the general case is the left side of the screen is completely covered in labels. And I'm not... I don't think you should get rid of the timeout. I'm just thinking that for the typical case you can have a little boundary region, a little, or you know, you can take advantage of it. If the mouse goes past it too fast, it will not require an event on the boundary region. You'll still need to use the timeout. You'll still need to use the timeout, but for a typical case you can probably do better than that.

No, the problem is the only mouse events I get are events on the left side of the screen. And when you say left side of the screen, is this particular pane? No, no, no, I'm sorry, the big detail area on the left. Yeah, that area. Okay.

I mean, I also get them on the left margin, obviously, but for purposes of discussion, basically I get them on the left. And that's great, I can follow that. but suppose you put your mouse, suppose you brought up a page that was full of labels, so the whole um okay uh completely covered in labels. There's a good one. You know like for example like yeah like that. Yeah. And go and hover on a label. Okay. Why is it? Oh okay. If you move to the right and slowly move to the right and eventually move on to the browser.

Move on to the browser pretty fast. It picked up that last one. I don't know that the mouse is no longer on the left side of the page. Oh, I see. So when it leaves the page, the timer is still on. Timer is still going.

Gotcha.

My last mouse was, "Hey, he's on the label." Yeah, that's what's doing it. You're right. Because I was wondering when I have a page like this, I would start from over here, say on frameworks, and I would zip across. I would zip across. Well, that time it picked up JDocs, but usually if I, depending on the speed, it'll always pick up one of these guys here.

And the reason is because as it's leaving the screen, if it leaves the screen fast enough, it thinks I've been hovering on that for a second and a half.

Exactly.

Yeah, gotcha.

There may be a way around it. If I could only get mouse events from the form rather than from the underlying isigraph.

Okay, I'm going to propose a way around it.

Pardon?

I'm going to propose a way around it. You put one extra column here that has nothing in it. You're asking me to give up real estate. It can be as narrow as you want as long as the mouse tracks when it goes across it. But it won't.

It will skip over it if you're moving the mouse fast. He's still going to have a time-out issue some of the time, is what he's saying.

Right, because across that boundary it won't even know it entered is the issue there, right? Yeah.

Now if you could... You could know if it entered the browser, and the browser eats mouse events, which it should. thing is if you put it in extra column, as Raul says, if you move across fast, the reason it won't stop the timer is because it doesn't even know it went into that column. Right, exactly.

If it had known it had gone in, then it could have stopped the previous one. Yeah, exactly. Yeah, yeah, yeah.

Now, if you can have a transparent ISI graph over the right-hand side that you can push behind it when it got a mouse event and then push forward when the mouse event was on the on the side, that would work. I don't know that we can have a transparent ISI graph.

- I think we probably could. I didn't know that the child control management was such that I could stack controls. Is that right?

- I don't know that it is either. That's...

- Yeah, well, you can in a sense, because you can pass through most events through a control.

- But he's talking about visually, the layout on the screen. you put an ISI graph over a web view. Yeah. The management of it, as far as I can tell, is pretty... it's trying to help and it helps very well, but it's trying... it's pretty clear that it doesn't want overlapping controls. So what do you get if you request a mouse position but the cursor isn't in a place that will record it.

Can I pull the mouse position? I've never seen that. That would be great. I think you can. I think it's part... In JQT, I think it's part of the WDQ, isn't it? It tells you your mouse position. But that's an event that's coming in because of a movement. That's not a query that you're initiating from the application. You could put it on a loop so it's initiating because I know in some of the demos they do that Does the web you get a focus event?

Hi, I believe it's got well web you should Have you should have a focus event it's a it's a Swallows it it's not going to report it to me. Is it if it's not an event Well, if it's got an event you should be able to access it Have you played with... one thing you can do is play with the default event handler and just have it dump every single event that you get. That's how I started. And I'm not getting... WDQ. I'm not getting browser events. I'm sorry. That's not true. I occasionally get what I think might be browser events, curl and load. Yeah, I was gonna say because

Back here. These are all curls and loads, right? Yeah, exactly that stuff. Yeah, but I don't get any mouse movements I occasionally get mouse wheel movement. I was gonna say I have seen mouse wheel movements before Yeah, there's there's the mouse wheel movement. There's some wheeling but that's but people don't necessarily move the wheel either. I Wonder how maybe I'm doing it with maybe is is there a focus lost on the ISI graph? Ah

- Ah, that would do it too, yeah.

Let me look into that, that's a good idea. I'll write it down 'cause I'm not gonna remember. (laughing)

- Okay, so for me, control click is, I guess, the mouse wheel event. But I've got a touch pad, so I do it with two fingers. But I just generated all these mouse wheels because I was moving two fingers around on the screen.

- And you were moving around on the browser.

- I was moving them around on the browser.

Yeah, so it is reporting some things. I don't know why it doesn't report more things. Okay, so now I'm just moving the mouse. Let's see what happens now. Those were all mouse wheels, it says. Even one finger. That's interesting. So I'll go over here, move around. Not two fingers, just one finger. and go back to my session. Yeah, it's all mouse wheels. Something's going on there. Okay, that's worth investigating. Yeah.

Yes, that will be a much better interaction. You're putting poor old JQT under the most exquisite torture. you're just wringing its little neck to right to the limits of what it can do i'm asking for almost nothing i know just when i do stuff like this i think of myself as just you know i'm gonna really make you you're gonna view and it always gets back at me because it won't do it it won't do it it's the ultimate you know sure think you're in power you're not And the only other thing I'd noticed, and I hadn't mentioned it before, but I probably should have, and I think it's a pretty easy fix, when I go to NuVOC, I think it would be great. So when I go over say, oops, say I go over this, it goes to self-classify, which is great. I go here, it would be great if just changing between those two would be the same as doing this. Because really all I'm doing, this is extra information below. But for a lot of the times I'm just wanting to go... I want to find out, oh I know there's something, oh I remember, it's... It's Nub, where's Nub? Okay... Now I'm looking for Nub, but it's probably hiding under this window I've got here.

I'm lost, Bob.

Okay, so this is negate. I'm just looking for, well, say I want to look at cut. I know what cut looks like. I go here. I'm on what I know cut is. Oh, it puts it up. Interesting. So I go here. Okay so I've moved to something so adverse. I'm on adverse and so I know that's what I'm looking for but the web view hasn't changed. It will change when I go down here. Right. Is it possible to make a change when I go there? Sure so what you'd like is when you select the glyph, when you hover over a glyph you'd Yeah.

You'd love to select the first valence link.

Exactly.

Yeah, that's doable.

I figured it was, because all I'm doing is saying, in addition to your description being something useful, you know, to a link, the actual symbol gets me to the same spot. And as you say, you can do that. So I think that would be useful for a different way of getting into the information. Because I think a lot of people, if they've done some stuff with J, will know the double colon, and they'll know what it does, but then the next thing is, it's called a sign-adverse. Not everybody uses the terminology. It's useful to have it there for sure. I'd leave that there, because it'll help standardize the use of information.

Oh, yeah, I wouldn't change that. No. But I think quite often, if you were just to write all those names down, people would know what they're looking for.

- Yeah, I'm sure you're right. -

Yeah, yeah.

- All right, that's eminently doable. I will do that.

- That's about all I've got. Yeah, again, you've done a great job. All the issues coming up are really good issues to come up. - Yeah. - Yeah. And I do like the two ideas that I think are really good, well, a lot of really good ideas to come up with this. The ones that I think are especially gonna be maybe able to act on is the cloud for the tags. That's a really good idea. And the other one is kind of an air break to a page which has category trees on it. And those category trees will have their own categories, and they could link to pages wherever they want. But we don't need to worry about looping back in within the table of contents. Or if we do, we know we're doing it, we have a purpose to do it.

Right. Alright, well my to-dos for this week are going to be the Tag Cloud and the scrollers for the forum posts so as to deal with long, long lists. I'm going to hold off on trying to create a standalone application. Sorry about that. No, no, no, no, no, no, just be reasonable with what you're doing. Do you want to have something that won't be standalone but people might be able to download and play with next week? Is that possible? Let's see how it goes.

The way to accomplish that would probably be to throw a manifesto at GIS and have it as a GitHub beta.

Well, I think that may be more structure than I can support at this point. Right now what it consists of is a script and a SQLite file. So you control-L the script and you type "go" and you're off you go. So it's pretty simple. If it could be made simpler, as I said, I haven't looked into the standalone or add-ons or anything like that yet. And actually when you're talking about standalone, that's how I would start this, is I would do it as an add-on. Oh. Because that's your script, and you load the add-on, and then you run the add-on, and it runs. You know, what an add-on is basically just a GitHub repository where you threw in a manifest at IJS that has a few names defined in it, and there's a page somewhere that defines how to do that. We can throw out you, or we can build for you even if we knew what we were building.

If you had it on GitHub, we could do a pull request or something to show you how to make it an add-on. I do in fact have it on GitHub for whatever that's worth. So the repository name is what we would need to know.

I'm sorry, say again?

The URL of the repository on GitHub.

I can certainly do that. Let me understand this a little better though. though, so if it's an add-on, is it an independent application or is it a standalone application? Add-on is, there's basically two commands that come into play if you have a GitHub add-on. One is install, where you instruct, tell J the URL, basically the location of the add-on. You say "github" colon and a few other things, you know, the thing that's your name and the repo name. And that makes a copy of it locally. That downloads the whole thing from GitHub and sticks it in the add-ons directory. And then "load" will load whatever the main script is. And then from from that point it's whatever that strip does.

- All right, so I guess I'm hesitating and I think I now understand why I'm hesitating. I do not want to make this publicly available at this point. I'm not interested in that number of users at this point.

- So-- - I'm very happy to email something around to individuals. - Well, what you could do is just send them the link that they would install, the GitHub link that they would install.

- It does not show up in package manager. If you have those never show up in package manager, only people know about it. - They're independent.

- For example, Brian's shot has a turtle graphics thing and you've probably never seen it because there's no hint in J that it exists out there.

- And if you did an update, all you would need to do is, If you do an update and you've got a manifest, all you need to do is increase the version number, and then instead of install you do update, it'll go look at it and if it's a newer version number it'll bring it through. Don't you identify it?

I wasn't aware that private add-ons would get updated. I thought you had to reinstall, you just run install again.

OK, maybe you're right. I assumed that because you can do it with the package manager, you could do it with, you know, just update your using. You're right, it probably still needs package manager, yeah, so it would be Pac-Man. Yeah, so just reinstall over top of it.

It never shows up in Pac-Man currently. That's something I've been wanting to fix, but currently it's a feature, I guess.

Yes.

Yeah, it's not hard to get into Pac-Man if you're willing to do that, but you're right, you don't want to overwhelm it.

Okay, I'm open to this. Let's defer the discussion until next week and see what I come up with in the interim. There's no point in throwing more fingers at it until you're ready for more fingers. Yeah, that's the source of my hesitation. Okay, gentlemen, as always, thank you very much. I really appreciate all of the discussion and all the input.

I appreciate your effort immensely, and get some sleep.

Take care everybody.