Wiki/Report of Meeting 2023-05-04

From J Wiki
Jump to navigation Jump to search

Report of Meeting 2023-05-04

Present: Ed Gottsman, Devon McCormick, Dave Lambert, and Bob Therriault

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

  1. Since Ed has got to a point of polishing up the beta, he decided to do a recap of the J Wiki Visualization Tool functionality. Video of this demo is available at https://www.youtube.com/watch?v=xjNDi05Wy20 and it provides a good introduction to the application if you have not already watched it.
  2. Devon wondered if the entire database needed to be sent for debugging information. Ed replied that the log includes some environmental information and does not require users to split out the information of the database.
  3. Bob revisited the Developers category and now feels that Ed and Devon's suggestion of renaming to Advanced and including information such as Add-ons, Socket programming and others as they are developed. Ed wondered if there could be a slush pile category that would be information that had not been curated. Bob thought that the Archived category would fit this and of course search would traverse this information and make it available to users.
  4. In the Newcomers area, Bob felt that if the Primer were updated to the current version of J and that the book and lab reference was organized for easier access. It is more important that Newcomers not be exposed to the evolving wiki, since they are expecting structure. When the Newcomers is cleaned up a bit then we should be ready to move ahead with the final part of the transition with the understanding that it will be a work in progress.
  5. Devon wondered if the J Wiki Visualization Tool could be used as an example of programming. Ed felt that he might not be used as a example since he was not a professional J programmer. Devon pointed out that there were not many of those and then referred to the Monument documentation which he said did not look like it had been developed by professional J programmers. Devon then talked about Jose Mario Quintana's style which was highly tacitified and would be intimidating to most J programmers.
  6. Ed wondered how testing should be approached for a GUI application. Devon wondered if the log could be played back as he had used that technique to capture GUI interaction. Ed pointed out that although there is html output that could be tested, that most of the output is graphics. Bob talked about using assert and 5!:5 to get a linear representation that matches to the programs output. Devon mentioned that Hummingbird https://github.com/hummingbird-project/hummingbird might be used for playing back logs. Bob wondered if the timing of feedback might indicate user experience is degrading. Ed is looking for a way to be able flag user experience before exposing the users to the interface. Devon felt that this is a difficult problem. Ed said that it was something that was pretty much solved for the web, but testing graphical output is harder. Recently Ed noticed that the text is less crisp and this would be something that he hoped would be caught by these tests.
  7. Ed proposed that it might be time to expand the test user group. Devon mentioned that Ed is presenting at the May 9th NYCJUG https://code.jsoftware.com/wiki/NYCJUG/2023-05-09 and that there may be candidates there.
  8. Devon wondered if it was possible to webify the J Wiki Visualization Tool and Ed said that he had wondered about that as well. His specific question is whether there is an API to allow the J interface to work with the DOM and the canvas. Bob mentioned the J Playground, based on a WASM or JHS which is the IDE that is web based. Ed expressed the feeling that there is a lot of potential for J beyond mathematical programming. Bob mentioned the work that Michal Wallace has done with his scripted videos. https://github.com/tangentstorm/


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 May 11th, 2023.

Transcript

We are recording, you may share your screen.

Thank you.

All right, this is the JWiki interactive visualization tool that Bob, Devon McCormick, and Raul Miller and I have been working on the last few weeks.

The idea here is to provide a very fast, fluid navigation and search mechanism, not just for the JWiki but also for the JForums.

The approach that we take is a two-part user interface.

On the left we have navigation of the structure of the wiki and the forums, and I'll go into that in some detail.

On the right we have a web browser, a web view, that allows us to load individual pages.

The left side, the navigation is pretty much instantaneous.

The right side, the navigation has to wait for pages to load from a remote server, and we'll see a lot of that.

So I'll begin with NuVOC.

This is a compressed representation of NuVOC.

The idea is to fit it all into one small part of the display.

hovering on a glyph shows you the valence links for that glyph.

Hovering on a valence link will load the corresponding page.

Immediately below NuVOC are the ancillary pages that show up in the conventional representation of NuVOC, which is shown on the right.

This is just the standard NuVOC web page, which of course you have to scroll to see all of.

Hovering on one of the blue labels will load the corresponding page in the right, and this is a typical interaction for this user interface.

Almost all of the categories in the table of contents on the left wind up showing at least some blue links which represent web pages that you can load just by hovering.

One of the more interesting sections is interfaces.

interfaces.

R12.

Yeah, interfaces, right, I knew it was down there somewhere.

Thank you.

Interfaces is a little more complicated than ancillary pages.

It's got subcategories, and because all the pages and the subcategories will fit onto a single display, they're actually flattened out.

So if you load Qt IDE, for example, that shows you the category page from the wiki.

JAndroid is the JAndroid category page from the wiki.

And then underneath each of those subcategories there are pages which can be loaded.

Frameworks is more complicated still, so it's got so many pages that we can't show a flat representation.

So instead we show the subcategories, so add-ons for example, which in turn has sub-subcategories for API, ARC, Convert, and so on.

There's a databases category which has JD, SQL, SQLite, and so on, Labs, OpenGL, and so on.

And again, the idea is that you'll get a set of blue links for each of these categories, and the blue links can be hovered on to load up the corresponding pages.

In addition to Bob's category hierarchy, which is mostly what we're navigating here, we've got several hundred free-floating tags.

These are categories that don't participate in a tree.

They're exactly the same as the other categories, they just don't have a hierarchical relationship with one another, so we think of them as tags.

They're arbitrarily divided into groups of 15, so each of these category names or group names with an ellipsis after it has a corresponding set of categories underneath it.

Most of these categories have one or two pages in them, so there's not an awful lot going on.

An exception is under DHM, which is Devon McCormick.

There's a category in development of the JWiki that has a lot of pages, more than can fit in a straight ahead flat representation, so in this case we have compressed columns.

And as you move to the right, the corresponding column decompresses and you can load the pages.

There's also a bookmarks mechanism, so I've got a few bookmarks here that I've saved, Hovering will load them.

This is a set of the most recent pages that I've visited.

If I bookmark a page it shows up, and I can load it up, it shows up in the Bookmarks section.

Having bookmarked a page I can un-bookmark it and it will disappear for the Bookmarks section.

The other major part of the table of contents does not reflect the wiki, but rather reflects the forums, and the interface here is a little bit different.

So here's the JProgrammingForum, JGeneral, JBeta, and so on, all the way down to JDatabase.

The idea here is to navigate by time, so this is a year navigator for JProgramming, and for each year I can pick a month, and for each month I've got a set of threads that show up in the forum archive, Selecting a thread gives me a list of all the people who have contributed to that thread, and hovering on a person's name shows me that corresponding post.

The other thing I want to show is search.

So searches are persistent across sessions.

I've got one here where I was looking into testing add-ons.

These are results from the wiki, again you hover to load the page.

There's also results from the JGeneral.

Quite a lot of results from JProgramming, so much that it gets a little pathological.

Probably not helpful.

The upper limit on search results is 5,000.

I won't request any more than that.

5,000 may be a little bit too high.

But I can do additional searches, like say for example that I'm interested in in the Attic Transpose, that search will appear, be executed, and again I get a bunch of results in the wiki, even more in J programming, a few in J General, and even a few in JForum, a forum that was retired some time ago, but its contents are folded into the archive.

All of this structure is actually kept in a SQLite database in temp, and the idea is it's got half a dozen tables in it reflecting structure.

It does not have any HTML in it.

All the HTML, as I said, is loaded dynamically from a server as you navigate.

One of the tables in the database is a log table that we use for debugging.

I'll just mention this briefly.

One of the problems with bugs in the field is that they can be very hard for the programmer to reproduce.

The approach that we took here is there's a log table in the database that's normally unused, but you can turn on its use by clicking the debug log checkbox, and at that point very granular logging starts to take place, so much so that on a lower powered machine it actually significantly slows down.

the user experience.

So if you are having a problem and you can reproduce it, and this actually just happened, Bob very kindly sent me a bug report in which he turned on logging, reproduced the bug, and then simply attached the database file to an email and sent it to me, and I was reviewing that just before this session.

And that is the story.

Are there any questions or comments.

For the log, he attached the entire database.

He couldn't just send a separate log.

No, he attached the entire database.

The database has a lot of application state in it, in addition to the log, that can be helpful.

So your search results, all of your bookmarks, all of your browsing history, that's all in the database as well.

So I want that information and of course it's easier for him.

He doesn't have to try to separate out a table and send it to me.

He can just attach the file and ship it.

Okay, thanks very much Bob.

That's all I got.

Okay, that's good.

That little bit with the reference with interfaces, I can clean that up in Final Cut and we can have that as sort of a a general demo for anybody who wants to know about the interface.

That's good.

Any cleanup you can do would be greatly appreciated.

Can you make me more articulate.

Can chat.

gpt help with that.

Uh.

.

.

[laughs] Well, I'm just thinking about that.

I can take some of the "ums" out, but I don't think you have that many.

No, but seriously, it's amazing.

Sometimes an "um" is just like its flow of consciousness, right.

just floats in.

Other times people say "um" because they don't know, you can tell right away, they don't know what they're talking about.

And if you take that "um" out and they say something intelligent right after, you think "wow this guy's brilliant" because he came up with that answer.

I have that experience with podcasts when I turn on, when I accelerate the output, you know, make it 1.

1 or 1.

2.

Normally it just makes people sound, you know, reasonably smart, but occasionally you'll hear somebody who really is very articulate, and you turn him up to 1.

2 and he becomes outright frightening.

Yeah, I experience that regularly.

But a number of times with the podcast I take out some umms and pauses just because you want more flow.

It's a conversation, and if you hear it with the um's and pauses, you kind of think, "Oh, what's going on here.

" And if you just take it, you know, I don't take all of them out because it's important to speech rhythms and stuff, but I just take the odd one out and it just, suddenly everything tightens up and you think, "Oh, these guys, you know, fly on.

" I really appreciate that effort on your part, because I often find podcasts a little bit loose in terms of the editing and I really don't want to hear about the time you went backstage at the Fish concert in 1998.

That just doesn't do it for me.

Accidental Tech Podcast.

No name.

Oh, okay.

Okay, no that was great and as I said, Ali, I can use that, at least for the time being, We can use that as a demo.

And I guess as well, Devin, if when Ed does his, he'll probably do pretty close to the same run through, I'm guessing for the NYU class has changed in the next few days, which it might.

- He lost her, yeah.

(laughing) So that was great.

Stuff I've got, and we sort of touched on it last time and started to touch on it, is the areas, well, for one thing, we kind of figured we would need to rename developers.

And advanced is actually the best suggestion I've heard, and both of you guys came up with it when I was reviewing it.

And I think actually that's a pretty good way to look at it, is newcomers advanced reference.

And then within advanced, I think then it becomes a question about what we wanna put in there.

And we may not put everything in at once.

I was talking originally about just taking developers out completely, but I'm thinking now rename it to advanced and just put in things specifically as they're ready to go in.

So that you go in there and there's information there, but there might not be all the information that we're building initially.

So in other words, add-ons I think is something I put in pretty early, 'cause that just makes sense with developers.

But the other things like there's socket programming, there's all sorts of different things that a developer might go, you know, I can really make use of this.

There'd be stuff working with GPUs, but we're not ready to put that stuff in yet.

But as soon as we are, we just attach to that tree and bang, it's there in a category and it flows from that.

- You know, Bob, book publishers have or used to have, I don't really know how the industry works anymore, something that was sort of pejoratively called the slush pile.

And the slush pile was unsolicited manuscripts.

And if you were an intern, sometimes it was your job go through the slush pile and try to find that hidden gem that would be the next Harry Potter or whatever.

What's my point.

Oh, my point is I don't know that you should necessarily eliminate or make unavailable any of the content, but I wonder if you need a category that's sort of like slush pile.

Uncategorized, unreviewed, possibly really important, we're not sure yet, we'll get to it content that's just explicitly labeled as such.

So you can go in there if you want to, but it hasn't been curated and of course searches would search it.

Yeah, that's the thing I'm thinking is searches will cover that for sure.

The other thing is there's a whole area that I've called archived and a lot of what you're referring to needs to get updated and it's got valuable stuff in it, but it's old, it's J6O whatever, and it's not even running on the current interfaces.

But that's an easy thing if we just do a redirect into archived, all that stuff sitting in a big block.

Okay.

And we could put that under developers just for interest, you know, if you're interested in stuff, this is the grab bag, see what you can find in here, you know.

And then over time we can develop that and move it into the appropriate areas in the tree.

Yeah, I think that's a good idea.

The ones I'm really thinking though that I would focus on predominantly is probably try and get a couple, I'm thinking I'll talk to Eric about this, get the primer up to speed so it's current with how Jay works now.

So a little bit of editing on it.

And then we'll have a reference for newcomers to come look at as well as maybe a couple of the newcomers labs.

And then after that, probably start to put together information, some kind of an introduction to NewVOC in the newcomers area.

And then just kind of grow it out from there.

But before we launch newcomers, I'd like that kind of base to be there.

So a person who comes in, a newcomer wants to have some structure and they want to have things working.

And I'd like to have some really basic stuff for them to go, you could do this, you could do this.

An example was the way it used to be with the installs.

Newcomers would have an install button, you click install and it walked you through the whole installation process.

That kind of stuff will be in there.

And so, and then I'm not so concerned, other than the fact that reference is definitely a work in progress.

It is what it is and there's There's lots of work to be done on it.

Communities -- I'm looking at that and I think it's good, but it's -- again, a lot of it is somewhat out of date.

I'm not sure how many people go looking for communities, but what I might do is attach the communities that we know are current, put them in there so that if you're looking for communities, there will be active information.

But again, maybe a slush pile is a good idea.

put the information that's already in there off to a slash file, say if you're looking for other stuff, you might find that.

And then I think pretty much we're ready to go.

So the work I can see that really needs to be polished up a bit is the newcomers and maybe the wiki as well.

But wiki probably not as important as the newcomers before we launch.

But that's kind of where I see we are right now, which is kind of exciting.

And the Wiki viewer fits beautifully into that because if you can get people getting in to use the Wiki viewer, suddenly you've got something that gets you access to this stuff so much faster.

You know, that you can really go spelunking through a lot of this stuff.

It's such a different experience.

>> Yeah, and I think that the Wiki viewer is also nice as a demo piece of code.

if we have the source available for that, both for doing GUI stuff and doing stuff with databases.

- That's true, Devon.

The only hesitation I would have is that I am not a professional J programmer, so I'm not sure the code is exemplary in a sense.

- There aren't very many professional J programmers.

(laughing) - My point stands.

I just admit that my point stands.

(laughing) Even as I agree with you.

- I wouldn't worry about that.

Did you ever look at the monument stuff.

- No, what is that.

- Oh, it's this guy, he has a, they've been doing a lot of work with financial modeling in J in terms of producing a commercial package.

- Oh.

- And so he has lots of sophisticated models.

And I looked at some of the code and it was clear that these weren't J programmers writing the code.

The stuff like spurious, unnecessary parentheses and things like that.

- Right.

- I don't think that, you know, if it works, it works.

And I don't think anyone, you know, there's no style competition here.

- Yeah.

- And if there were, there'd be people like Pepe who would either be top of the heap or bottom of the heap, depending on what you're looking at.

(laughing) - You know about Pepe, do you, Ed.

- I do not, no.

- Oh, Jose Marie Cotana.

- Yeah, I actually used to work for him.

And we had a system that he, basically I worked with him at, let me see if I get this right, at Banker's Trust and he had an APL system.

And then a whole bunch of people left Banker's Trust when Deutsche Bank took us over.

And also some clients left, like the New York City Pension Fund and want it to be run by Germans, go figure.

And so they got some of that business.

And, but when what he did is he took his system in APL and he rewrote it in J.

No one could just choose him of stealing code.

I mean, there's probably five people in the world who would know enough APL in J and we weren't gonna rat them out.

So, you know, but he, he was, he relied on Jay so much, this was before it was open source, he made an arrangement with them where he had a copy of the source code in escrow in case they went out of business, they wouldn't put him out of business too.

And he liked some of the features of the older Jay and so once he had the source code, he started messing around with it.

And so he has his own little separate version of Jay which is structurally different.

I mean it looks like Jay at first glance but then he can do things that you can't do in Jay.

And some of them were features having to do with how you form adverbs and such that kind of used to be part of the system and aren't but he liked it so he still has that.

And so he's off and then the company he went for he left to go to with all the former bankers trust people that group closed down and he was able with their permission to take one of their large clients with him and went and started his own company.

And he used to host our New York City J-User Group meetings once a quarter.

And so we would make the trek out to Hoboken, where his offices were.

But eventually, he decided he didn't want to pay income tax anymore.

And he moved the operation down to Florida.

And so basically, it was really a one-man show.

Him and he had this guy, Thomas, who was his right-hand man who also knew the system.

But, and his, part of his security was security through obscurity.

So his entire system was one really long line.

And in fact, they had tools and it was all tacit.

So they had tools for turning the task back into explicit so they could fix it.

Yeah, so he's, you know, I wouldn't even say in left field, I don't think he's even playing the same game.

[laughter] The tacit as a security feature is an important insight, I think, into.

.

.

Yeah, but it's security through obscurity which is known to be one of the worst forms, even though it's.

.

.

Oh, sure, absolutely, but that tacit.

.

.

One of the main features of tacit that makes it so useful to certain programmers is precisely its obscurity.

obscurity, that frightens me to some extent.

Stephen Taylor, I remember, said, I've always felt very insecure about not being a tacit programmer.

And Stephen Taylor, whom I know very little about, just from listening to a Raycast, said at one point, "When it comes to tacit, I stay very much in the shallow end of the pool.

" I thought, good.

There's somebody who doesn't do tacit.

I still use 13 colon a lot.

And there is some, well one particularly rabid tacit programmer who hasn't only participated in a long time, he wanted that removed because, you know, I was just cheating.

Hey, I have a question.

I don't have any tests for this thing, and I don't know whether that's a fundamental problem or something that needs to be addressed.

You mean like unit tests.

It's an interactive application.

It's not like a library where I make calls to it or where the use cases would be calls to it.

How should I approach this or should I just ignore it.

Well, I think for the time being you can ignore it, but it's probably a good idea to at least think about it.

Can the log be played back in any way.

No, it's something that a human being examines.

It's not machine readable in any sense.

Because this is always a problem with testing GUI apps.

I can't tell you how many times I've gotten someplace I've had to get a keystroke recorder for me so I could try and test stuff, and they never seem to quite work reliably.

In fact, the only use I ever found for it is I once accidentally got the sysadmin passwords 'cause I'd like to go in on my desk and this guy at work when I was out at lunch, he needed to do something.

So he, and he was extremely paranoid and cautious.

He was really good security guy.

And so he starts a new session and he makes sure to kill it, but he didn't know I had the keystroke recorder running.

(laughing) - That's great.

- Yeah, but yeah, so that's, as far as I know an ongoing problem, There are packages out there to play back GUI stuff, but I'm thinking if you've got a log you're already halfway there.

You could figure out a way to record something and then play it back.

And then that would allow you to do regression testing because you could have a bunch of CAM things that you do and make sure that they still end up with the same page and everything.

The other problem that we've got that we would have if we tried to do this in any serious way is that it's almost all.

.

.

I mean, the right side of the interface is web and there are tools to let you examine the HTML that comes back and say "yeah, that's the right HTML and that's fine", but the meat of the application is on the left and that's just paint pixels on the screen.

there are no fields for a test harness to examine.

All it can do is look at imagery, which is miserable.

So I'm really not quite sure what to do.

And it's painting out.

.

.

is there any way to capture the canvas that it's painting.

Sure, you can take screenshots.

Best of luck with those.

No, but I mean when you'd actually like, I'll tell you what I do with JIG, which is SVG, is the raw SVG before I fired into WebView, I know what it's got to look like.

I know exactly how it has to be structured right down to tool tips.

And so what I've done is I've done an assert, a whole bunch, I just basically created a file of asserts.

This is what I've put in, and this is the linear version.

You can get the linear version from, is it the foreign conjunction 5, 6, I think, is linear.

And so what that will do is if you send, if you assign something to a variable and then immediately display that variable in that format, it gives you the linear form of what it would take to create that variable.

So you end up with a single long line that's exactly what my display should look like.

And then what I do is I just assert that it fits what I think it should be.

So I've basically got, on the left side I guess, I've got the thing I'm trying to evaluate.

On the right side of the match, I've got how it should look if it's perfect.

And then I put an assert in front of it, and if it blows up it tells me right away, oh that failed.

And where I find that really useful is when I'm working across, like right now for going to 9.

5, I run it through my tests and I see where it's breaking down.

This time actually it was pretty stable, but sometime during 9.

5 they'll do something that breaks it.

And then what I've got to do is decide whether it's enough that I can fudge it so it fits now both 9.

4 and 9.

5, or whether I'm going to have a new version for 9.

5 to fit.

And I've got probably about 300 or 400 tests I run it through.

It doesn't take very long.

If it's running properly it takes maybe 5 seconds.

And if it's green it's green, it's good.

And if I find something new that isn't working, occasionally something pops in and you go "Wow, I never even knew that was an error.

" I just add that to the testbed.

Now I've got it.

Yeah.

So what that makes me think of is the database, the local database.

So that is something on which you could in principle run tests just to make sure that the structure was reasonable, that there wasn't anything weird going on.

At least I think you could do that.

And that gets you some of the way there, but you're not really testing the user experience at that point.

You're testing data structures, which is fine.

Those are sort of unit tests.

But as Devin said, the problem of recording and playing back a session and checking expected experience results is much trickier.

All right, yeah, I don't know.

I thought I'd float it just in case there was a canonical answer out there for J developers, but it sounds like the answer is nope.

Yeah, well if you wanted to look into these recording and playback tools, there's one I could think of that's called Hummingbird, and I think they're still around.

Okay, but I do have this fundamental problem, which is that it's essentially graphical output, even though it looks like text, and I'm not quite sure.

All right, I'll look into Hummingbird.

Yeah, well that's a hard problem, it's any consolation, from what I've seen.

And for your database, is there anything in the database that indicates timing.

So in other words, you could tell what the delay is to get the answer back, like how long is it taken for the screen to load.

Yeah, you don't get that feedback that's true in general with, oh actually, I can tell how long it takes to generate a frame.

Yeah, that's something I can do.

And that's probably a pretty good guess as to what that part of the user experience is going to be.

it's lagging.

Yeah, and if you turn.

.

.

yeah, and actually if you turn logging on and you're on a fast machine, one of the things it records is frame rate from frame to frame.

Yeah, frame rate from frame to frame.

Obviously if you're on Raul's machine and you turn on logging, the frame rate goes down to, you know, four or something horrific like that.

Yeah, but that's kind of what you're - That's just performance, which is nice.

It's nice to know you're performant or not, but not functionality.

- No, no, you're right.

Honestly, I think there you're looking at feedback from the users telling you what's not working for them.

- Sure, but it would be nice to do something that would surface errors or regressions before it got into the hands of users.

- That's where I get back to this idea of being able to play back the log.

- Yeah.

- That would seem like an obvious way to set it up.

Right.

That's not so hard.

I'm recording.

If you turn on logging, it actually records individual mouse events.

It's pretty granular, so I could do that.

The issue is testing the expected results, sorry, testing the actual results, examining the actual results, because again, it is just ink on canvas, as it were.

So I don't know what to do about that.

Sorry, I'll look into Hummingbird, and I'll think about this some more.

I just thought there might be an answer I could just pull off the shelf.

But okay, I get that.

As far as I know, it was a difficult problem 25 years ago when I was trying to deal with it.

It's actually pretty much solved on the web these days.

The tooling is quite good.

HTML is really easy to examine.

The actual results are really easy to pick up.

There are services now that'll do multi-platform, multi-browser testing for you, and it's not too bad.

It's the usual problem with graphics - how do you decide that you put the right thing on the screen.

And are you thinking that they'll be missing pixels.

Is that what you're looking for.

Just wrong.

If you're testing web pages, it's really easy to say, "Yeah, these fields came up and they have this content and that's correct.

But if it's a screenshot, if all you've got is an image, it's not even an SVG, an SVG has some structure that you can examine.

This is just ink on canvas.

How do you decide that you've put the right ink up.

One of the problems that I wanted to ask about, this application has become blurry or I'm getting even older, I'm not sure which - and I don't know what caused it, it just happened a couple of weeks ago, I suddenly noticed it and I don't know what the problem is or even whether I'm actually imagining it.

[inaudible] Yeah, the text seems not as crisp as it was a few weeks ago, and I can't imagine what change I might have made that would force that to happen.

GL2 doesn't even have scaling, so it's not a scaling problem.

I don't know what it is, but it's on my list of things to ask about this evening.

Did you change fonts.

If anyone else had noticed it.

Did you change fonts.

I don't think so.

It's all Arial.

Initially it wasn't all Arial, was it.

There was Consolis or something else you were doing, whatever it was called.

Consolus for the new book, Glitz.

Yeah.

Yeah, maybe I fussed with the fonts.

That's possible.

That's possible.

The other thing I've noticed is you're making use of bold, and I like that, but that wasn't always the case.

Well, that was even.

Yeah, yeah, no, I know, but I'm just saying that is a change, and that could make a difference to how fuzzy something looks.

Yeah, that's certainly true.

I'm terrified that I'm going to have to go back in the repo and find when it happened.

And I'm terrified only because I've changed the database representation so much that I don't actually have, I didn't save the databases to the repo.

So I don't actually have that.

So it's not going to be a trivial exercise.

Rats, I could have been doing that.

I did not save databases.

I overwrote them.

Actually, come to think of it, I guess I could go into my email queue, my sent queue, and find old database.

You should have them there.

Sure, but you could drag them out that way.

It could be done.

Yeah, yeah, yeah.

You should probably just do that to make sure there is a problem.

Yeah, for sure.

It might just be your perception.

Yeah, absolutely.

Hey, I have another question.

I feel like, well actually Bob was kind enough to send me a log just before the call because he ran into an error, which is great.

I'm glad we're still running into errors, but I'm concerned because we're not running into very many anymore, neither technical errors nor user experience problems.

Is it time, do you think, and if so, who would be the candidates to expand the test user group.

Well, you know, if you present at The J meeting next week, you might have a list of candidates right there.

Oh, that's a thought.

That would be good.

Because I'm sure people will be interested in it.

Okay.

And willing to experiment.

And it's become very easy.

It's just a matter of installing a personal add-on.

Yeah.

The installation is smooth.

I mean, I haven't really tested it that much.

I have been busy with other stuff, but yeah, I think the more people, the better, up to a small number.

You interested, Dave.

Yes.

Yeah, I thought you might be.

And in terms of testing visual interfaces and stuff, you got anything you do with stuff in your art projects.

- No, I do very little graphics programming and that was my first code even with JQT and all.

- Well, that's even more impressive.

- I mean, I use finite element software, so I see a lot of graphics, but it's not stuff I've encoded.

- Yeah, that's right.

Is there any way.

.

.

I assume there's no way to to Wabify the interface, like JHS it or something.

Well, I have wondered about that because that would be a solution to many problems.

Yeah, that's actually something I wanted to bring up this evening as well.

I'm sorry, I keep saying this evening because it's dark where I am.

Well, it's morning where you are.

So J on the web, I haven't looked at it except briefly, but to me it says that somebody ran the J interpreter and even more than that through that whatever it is that produces HTML.

Not HTML, the web assembler.

Web assembly.

Yeah, web assembly.

So my question is, has anybody hooked that code up to the DOM API so that I can invoke graphic commands against the HTML canvas element.

That's a good question.

That sounds like a question to pose on a forum.

And there's two things going on.

One is the playground, which is the W-A-S-M, right.

Right, WASM, yeah.

The other is JHS, which is HTML, and a modified form of JavaScript.

Sure, but the question is, can the J running on the interpreter, which is built in WASM, delivered in WASM, - Oh, I see.

Could it run.

Yeah.

- You can run J, but is there an API to the canvas element or to the DOM.

That is the point.

And you're right, Devin.

It's a forum question, but I thought I'd start here.

- Yeah.

Well, and you know, you would have to essentially redo all the graphic stuff.

I'm sure there's no conversion there.

- No, you wouldn't, you, oh, I'm sorry.

You mean just to get my thing working.

- Yeah.

- Wouldn't it be as bad as you're imagining.

I think when you get down to the level that GL2 is operating at, all graphics libraries are pretty much the same.

So it would be a transcription rather than a port, but it wouldn't be like a complete rewrite.

It would just be mechanical.

Okay, well that sounds like a promising avenue to explore.

I'm pretty sure JHS is compatible with GL2.

Well, I don't need GL2.

I need the Canvas API.

I need the Canvas Graphics API.

So the Canvas is the HTML element.

It's like a button.

Yeah, yeah, yeah.

I know.

And then you paint it and change it.

Yeah, yeah, yeah, yeah, yeah.

And I've done that work.

I mean, I've used the Canvas API before, but only with TypeScript and Angular.

And the question is, can you use it with, can Jay drive that API.

Can Jay call that API.

I'm pretty sure it can.

Yeah, I'm pretty sure it can.

Well that would be remarkable, and had I known that eight weeks ago, I would probably have taken a different tack.

Well, the person to ask would probably be Eric, because he wrote JHS.

Well who did the port to the web.

That was Joe Bognar.

And he did that and everybody at J Software didn't think it was possible.

That's why they'd never done it.

No.

And so performance would be an issue.

Henry just said there's no way you can do that.

That's crazy C.

There's no way that's going to, oh look it's working.

Interesting.

The Wasm transpiler from C to Wasm was able to handle all the weird stuff that Henry's had to do.

Yeah, Joe was able to make it work.

I'm pretty sure he's in 32-bit though.

But that just means that he's running with.

.

.

Yeah, no, I know, but I think that just means he's working with the Android version.

So that as Bill creates the Android version that matches what's going on with the 64-bit, which is what everything now is, I think Joe, as he updates, he pulls in the Android version, which I think Bill still has a 32-bit version for that.

If not that, then it's the Raspberry Pi version.

It's funny, I'm struck that J, the culture that's grown up around J, It's really mostly around mathematical programming, as far as I can tell.

That's just crazy.

It's always claimed to be a general purpose programming language.

I'm not using it for mathematical programming in what I'm doing here at all, and it's just been spectacularly productive.

If I were doing mathematical programming I might care about 32-bit versus 64-bit, but really it's a non-issue for me at this point.

Yeah, I think the speed up was more in terms of the systems and they were finding it was harder to, they wanted to move on to 64-bit to support it and they did support it both for a while, but then I think they realized that everybody's looking for 64-bit, we don't want to support 32 and they just moved on.

There's no point anymore.

Practically no point, unless you're going to try to run on a Z80, Well, except in the case of this WASM, because Joe didn't have a 64-bit WASM that would work.

So he could do it with the 32.

Yeah, good.

Yeah.

Yeah.

Yeah.

So anyway, that's the background to the playground, which is the WASM version.

And I'm sure, if you look in the, I haven't gone through the JHS demos, but I wouldn't be surprised if there's a canvas demo in there, I would think there is.

All right, that's maybe how to, that's what I should start with is becoming more familiar with JHS on the web.

And what he's done is he's actually created a simplified version of JavaScript and HTML.

Like he didn't want to just feed it off to an Angular platform or something like that.

So he wrote something that sits in about, I don't know, maybe a couple thousand K or no, sorry, a couple thousand bytes.

>> Mm-hm.

>> And he does all his JHS and like it's basically just a little HTML.

You do this and this scootch a label.

This does a button.

This does that.

It just does it all.

It's just really simple bare bones.

So you can get it and do things with it.

And he's using hidden buttons to feed whenever you want something to happen with J, there's a hidden button that it gets a signal and then it triggers a J event and that's how he does it.

So it's running back to the J engine.

And then the front section of it is all based on a hidden button called, I think it's J-do.

And that hidden button, when you hit return on your page, it triggers that button.

>> Right.

There's a lot more going on than I imagined.

That's interesting.

All right.

That's next, just to look into that.

>> Yeah.

And he's also got an immediate execution form.

So you can kick things in without having to go back through the interpreter, you just make it happen.

So then Michael Wallace has done a bit of work with that on his interface.

He's got a.

.

.

and his handle is Tangent Storm.

And Michael is spelled M-I-C-H-A-L.

Wallace, I guess the way you'd expect, W-A-L-L-A-C-E.

Tangent Storm, he does videos.

- Yes, and he's been building this presentation thing because he wants to be able to type in and have the video produced that way.

So basically he doesn't need to script anything.

He just puts in his examples and hits buttons and it all flows.

And he's getting pretty close to doing that now, but he's done a lot of stuff within that interface.

And he works a lot in JHS, yeah.

- All right, thank you.

- Wow, no problems.

(laughing) 'Cause you're right, it would make things a little bit simpler, and I'm thinking back a couple meetings ago when Raul was saying, you don't want to get rid of the structure in the wiki because you can't count on people getting the access to it that way.

But if you did have a page on the wiki that was essentially a link back to the server with HTML, and now that's your viewer, You're looking at the viewer through a browser.

This browser looks this way and away you go.

- Yeah, no, I think that's right.

- Yeah.

- You're taking a performance hit, but I understand it's only about 50%, so not too bad.

- Yeah, and well, you have to see how it works.

As I said, Eric slimmed down that whole interface a lot, so it might not be too slow.

He hasn't padded it out.

That might be the challenge to it.

There may be things that you need to write to put into it make it do what you want to do.

Right.

Well, it's basically, is the DOM API exposed to J code running on the WASM interpreter.

That's the question.

Well, and it's kind of the DOM API, which is what he created.

Well, that's what it sounds like, is he did a simplified DOM API just so you get the user interface implemented.

Exactly.

And the question is, somewhere in there, is there direct access to the native DOM and that's what I'll try to figure out.

Yeah, that's a good question.

I think I would think there would have to be, but I don't know.

Yeah.

Yeah.

It'd be interesting to see what you find out on that one.

Yeah.

I can't wait.

Yeah.

Other than that, the great question is really productive and everything.

I don't have too much else other than what I sort of lined out what I wanted to do with newcomers and advanced, now I'll change that name and sort of work with that and then sort of pick and choose the things that we want to put into advanced.

Maybe as people express interest or ability to explain things.

Because that's the other thing is you sort of need people in the areas of advanced to be able to explain what's really going on, you know, at a level that a developer would be interested in it.

I don't think I could go in and do most of that because I'm not that advanced.

- Oh, so how did I end up with so many DHM tags.

I didn't put those in, did I.

- You know what I think it was.

I bet it was when you, remember initially we were going through and just logging that we'd taken a look at a page.

- Right, right.

- And I think that's what they all are.

- Ah, that's probably it.

- Yeah, yeah.

And so if you, I mean, you can go on and take them out manually, but probably the best bet is to, you know, at some point with Raul, he can write some kind of web crawler that'll go and just kill them all, 'cause it just means that the page was looked at, and if it was really bad or really defective, it-- - That's right, yeah, I didn't really remember tagging stuff, but I think you're right.

- Yeah.

I took a lot of mine out, but there may still be some mine.

Mine are RGTs, and they're probably floating around someplace.

Anyway, did you have anything else you wanted to add, David.

I was wondering where to find the JQT source.

Well, the JQT IDE thing, right.

Yeah, I think that's most of what, that's your access to it is if you go into the add-ons under IDE and then you get the choice between JHS and JQT and in fact Ed that's the way to get all the basic stuff for JHS is go in that way because you'll have all the files.

There's about seven or eight main files that have most of the stuff doing the work.

Well I hope I don't have to do that.

Yeah.

I'm just trying.

Well, yeah, if you go into JHS, there is kind of documentation kind of explaining it on a high level about what's going on.

But in order to get under the covers, you do have to just go into those files and take a look at.

They're not that complicated.

They're just that this is how he structured it.

Once you know that's what he's doing, it's like, okay, yeah.

- Right, so I'm just trying to figure out how complete what Jay offers versus what QT offers.

For instance, QT has in the cursor module, you can get the position of the cursor and it doesn't seem that Jay has that facility, but it might, so that's why I'm asking for the source.

- Yeah, that's an interface issue, so yeah.

- DLL or whatnot.

- You might, if you notice it happening, I mean, the way I think the best way to do it, it seems to be the most effective is in the beta forums that are going on now with 9.

5.

If it's still happening with 9.

5, maybe mention that because that's how we got the WebView interface up and working is, Bill saw that it was a problem, fixed it, and then ported it back to 9.

4 as well.

So I'm not saying he would go all the way back into the 800s to fix those too.

'Cause at a certain point you get back far enough in the interfaces and they're really, they're too entwined to be able to just swap them out.

But probably the current and the beta, they'll probably put in changes.

So I would say if you notice it's not there and you would like it, you can ask if that can be, 'cause my understanding from what Raul said was that, Bill essentially writes that interface back to QT and if it's missing, he would be the one that would put it in there.

- Right, okay.

So no one knows where the source is.

- Well, effectively if you look-- - I looked on GitHub and I didn't find it, right.

- No, I think you find it in the add-ons under, - Yeah, under the IDE and JQT.

- All right, I just didn't believe it, you said it.

- Yeah, but there's this awful lot of information in there about the different, and I guess the only other ones that I'm just trying to think of whether they fit, I'm sure they fit in the same add-on package, is even your config files, which aren't IJS files.

Those are sitting in there too.

- Yeah, I've seen those, yeah.

- Yeah.

- All right, thanks.

I guess I ought to subscribe to the source forum next.

- Or beta forum.

Or source as well.

Yeah, absolutely.

If you're comfortable going in and looking at the source code.

But I don't think JQT shows up in there.

I think it's what Bill does.

It might be in there.

I mean, it's just not exposed to everybody.

'Cause I think that's where Bill works with it, an interface into what you see in the add-on.

- Okay, thanks.

- Yeah.

Anyway, that's coming up to our hour, so thanks so much.

I'll package that demo together, Ed, and pop it up there.

- Bob, thank you very much.

Thank you for everything.

- Oh, I love it, it's fun.

It's moving a lot of things together along.

- Yeah, me too.

- And I think our next push will be, as I said, I'll talk to Eric about redoing or looking at the primer and maybe work with him on that.

And then once we've got that done and then maybe a little bit of newcomer documentation, we can start just putting things up and having people work with it.

And if at some point the viewer is ready to go at the same time, I mean, that's not essential, But as soon as it is, we can start bringing that into for people too.

And it'll be really interesting to see the response that the New York user group.

- Yeah, I'm very much looking forward to that myself.

I agree with that.

- Yeah, I put you on first.

So, - Who's on first.

- You don't have to wait, take through the beginner's regard or something.

(laughing) - I think I'm in show and tell if I remember right.

- Yeah.

- Yeah.

- Usually show and tell would be the second, but I moved it to the first.

- Oh, thanks.

- I'm interested to see what the questions are that come out of it.

- Yeah, yeah.

The discussion for these things is always interesting.

- Yeah.

- All right, take care everybody.

See you next week.

- Okay.

- Okay.

Yeah.

- Good one.

- Bye bye.

- Bye.

Thank you.

.