Wiki/Report of Meeting 2024-06-20

From J Wiki
Jump to navigation Jump to search

Report of Meeting 2024-06-20

Present: Ed Gottsman, Raul Miller and Bob Therriault

Full transcripts of this meeting are now available below on this wiki page.

1) Bob has more work to do on the content of the category pages and confirmed with Raul that it should be handled with php and it bit of experimentation. Raul said he has notes to fire up a server to test this process and wants to see if he can work things out without needing Chris to set one up.

2) Bob confirmed that Chris has removed the non-functioning links for printing pdf's in the sidebar and has retained the link that is still working. The non-working links may catch up to the new version of MediaWiki in the future and would be able to be reinstated.

3) Bob has trimmed the orphans category page down a bit and will continue until only the true orphans are left in this category. These would be pages that are only linked to Eric's original web crawl.

4) Raul showed Ed an application that he has been working to reveal J's sentence execution. It is based on the trace application. Challenges are trying get the text format converted to an animation display that may show the execution in a more intuitive manner. Raul is wondering how he should include this application into Ed's GitHub repo and whether it should be a separate branch. Ed said that Raul can handle it however he likes as that branch is under his control. Current issue this week is the number of temporary variables that are created in order to have a place holder for assignment statements.

5) Raul brought up an email exchange that he had with Marcin Żołek on June 18 which asked about adding examples to the Modifier trains page https://code.jsoftware.com/wiki/Vocabulary/ModifierTrains and this created a long discussion about how the J Viewer might be used to search through code and pull out existing examples in J code of examples that are out in the 'wild'. Ed felt that it could be done with a search through SQL with the appropriate representation of J primitives. Initially, Raul would just be looking for verbs in the scripts. The main use would be quickly finding examples of code in J. Ed thought that the DB Browser for SQLite https://sqlitebrowser.org/ would work as a way to search the J viewer database.

6) Raul instigated a discussion about NuVoc and whether it had evolved from a dictionary to more of an encyclopedia with a tendency towards very long pages. This started a long discussion which culminated with several points: 1) That this would be a major undertaking 2) That there are actually not that many pages that are overly bloated. 3) The presentation of different levels may be accomplished by icons or boxes so that beginners would not need to read all of the entry to get the gist of what they require and retain the expanded information that a more advanced reader may need. In the end looking at a NuVoc page the breakdown of information is pretty clear and there does not seem to be any need to revisit NuVoc for most pages. There may be a few pages such as the modifier trains that require more explanation, but these would be areas that are more about exploration than in practical use. We wrapped up with a discussion about the modifier trains and their practicality.

For access to previous meeting reports https://code.jsoftware.com/wiki/Wiki_Development If you would like to participate in the development of the J wiki please contact us on the J forum and we will get you an invitation to the next J wiki meeting held on Thursdays at 23:00 (UTC).

Transcript

Well, we might get on to talking about that later as well

if we get through some of the,

I mean, I don't have a lot of this to do.

- Yeah.

- I talked about the templates.

I haven't done much with the,

I have to go in and change the content of the category pages

and I haven't done very much with that since then,

but it's just a work in progress.

And those need to be done before we insert the footers

with the template map or category map

or whatever you wanna call it at the bottom.

And I'm not sure whether you had a chance

to think about it more, Raul,

but you thought that was possible using PHP?

- Yep.

Because it's, I mean,

just a little bit of experimentation

and a little bit of deciding what we wanna do,

but most of it's just experimentation

and that once the test server.

And I, back like two years ago,

I was trying to set up a test server myself

from some notes that Chris gave me.

I should probably dig those out again,

see if I could attempt it again.

For some reason, I didn't succeed then,

but I don't remember why I was failing

and it's just been a while,

so I should just pull it away

and see if I can get another one set up.

- Well, your choice, or I can ask Chris

if he can set one up for a month or two,

something like that.

- Yeah, I mean, if he can do this, great.

I just disappointed in my own persistence here.

- Well, I'll let you take a run at it if you like,

but 'cause we're not close to needing that yet,

but I would say hopefully within the next month or two,

we will and then just a matter of having one ready to go

at that point.

And having said that, once I get my act together,

then, I mean, it's been long enough

that there shouldn't be anything,

nobody's running around with their hair on fire

at this point, so.

But anyway, that's about all I've got for templates.

And in terms of the other thing that we were talking about

was the PDFs and the,

Chris went in and took those links

that weren't working off the page

and he feels it's just a matter of media,

of the app catching up to MediaWiki.

And he thinks that's what it is.

- Yeah, he actually took off the link,

so I think we moved, nope,

he did leave the one that worked there.

- Yeah, he left the one that worked.

Well, I checked that right away

'cause I thought, oh, he's taken that off,

there's no way to do it, but--

- But there is a way to do it.

- It's still there, yeah.

- You can still do it from the,

use inspect and do that JavaScript command from the console.

It'd be a little inconvenient, but you can do it.

- Yeah, well, you know.

(both laughing)

We've probably put in enough.

The idea behind the Wiki is to take down those hurdles,

not to figure out higher ones.

- Right.

- And, oh, the other thing I was,

you brought up the orphans.

We were talking briefly about the orphans.

What I found when I went in is there were a number of pages

that were inherited orphans

because their guide template at the top was made an orphan,

and any page attached to that

that contains that template became an orphan.

And, oh, you wanna get out, do you?

Okay, well, there you go.

Yeah, I wanna believe, of course, that's what cats do.

Anyway, so if it had that template in the page,

even though that page wasn't an orphan,

it became an orphan 'cause the template was an orphan.

So what I've done is I've gone into some of those

and taken out the templates,

and that got rid of a bunch of pages.

But I've also found that there were pages

which I think I added to categories

after they were made orphans,

in which case they may not be useful

'cause it might be attached to an archive category,

but they're not an orphan anymore either.

So I'm in the process of going in and taking those out.

And in the end, the only things,

my suggestion is the only thing

that should be left in orphans

are things that are truly orphans,

and those things are the ones

that are only linked to Eric's crawl back in 2021.

- Right.

And the thing that I was talking about

was how I like to do things in batches.

And if you look at the What Links Here page,

you can see that it is a relatively trivial

search and replace you can do on a URL

to convert it from the wiki URL

to the What Links Here URL.

And so you could do,

you could go to the orphans page,

pulled all the URLs from the view source.

That's probably straightforward.

And then get like a list of the 300 or whatever,

and then like 100 at a time,

just have a browser open 100 tabs

on the What Links Here page,

and then you're set to go.

Close the ones that are orphans.

The ones that are not orphans,

you can go in and edit them.

- Right.

If I do it from the What Links page though,

I need to be able to go back to the original page.

- The What Links Here page has no page,

it has a link back to the--

- The page that started it?

- The page that you came from.

- Okay.

Okay.

So in that case, it's just a back link

and then clean up the category and then I'm off.

- Yeah, at least in the tests that I've done,

I actually see two links on this example

that I'm looking at, one from the no pages link to it,

message at the bottom,

and one from the bed crumb thing at the top of the page.

- Okay.

Okay.

I'll look at that.

Anyway, that--

- Even if it didn't,

you could reverse the edit on the URL manually

if it was really that desperate.

- Yeah, that's true.

I could do that.

- But that's not necessary, it looks like.

- No, it's...

And we're talking about,

I think the magnitude is in the low hundreds.

I think there's 300 something pages left.

Yeah.

To look at.

- So like, that'd be three batches of 100, for example.

- Yeah.

- And the browser can handle 100 tabs.

- Yeah.

And that's it for the things that I had on my agenda.

So you thought you might have two things,

one of which you remembered, Raul.

It's actually three things now.

- Okay.

- That you, because of what you mentioned.

But I only remember two of them.

One might have to wait until next week.

So one of them was the trace thing

that I was gonna show Ed

and get his thoughts on where it should go in his Git repo

and the state of things.

I guess I should share my screen.

Share, just do the whole thing.

And I do...

- We're seeing your JTerminal.

We're also seeing,

well, we're seeing the whole thing.

We're seeing behind it.

- Yeah.

Yeah, I did the whole thing just because.

So this is the trace.

What, so I did, Ed,

was I made it so that when a compound operation

is being evaluated,

it shows all of the intermediate steps.

So here I have prime twice in this example expression

applied to iota2 as a result.

And so what that does is it does prime,

get prime zero and prime one for the first time,

prime two and times three for the same time.

One of the quirks here is because I'm wrapping

these functions, rank zero functions like magnetic p colon

only see individual integers in this case.

It doesn't actually look like an array anymore

because at this stage of execution, it's--

- Of course, yeah.

- And that interfered with some of my plans

for animating things because it kind of requires a person

to think about it, to piece together

that this is the first pass of P

and this is the second pass of P.

That's not information that any of the individual verbs

really have access to unless I do a special wrapper

for the conjunction itself.

In this case, the colon conjunction that knows about

rank and knows about the verbs that it's passing off to.

And that's a much more ambitious task

than I'm currently compared to other things

that I have had great.

But it works, I've got a script.

The problem though is this structure isn't anything

like the structure that I currently have

from several months ago that I posted to your Git repo.

And so I, and since it's on your site,

I just wanted to touch bases with you

before I push stuff out there about how you thought

I should be approaching this.

Is this main branch, is this a separate branch?

Should I, is it even worth pushing to the repo?

That kind of stuff.

- Yeah.

You know, I have, owing to the fact that I'm in my dotage,

forgotten what I did for you regarding.

- You just set up a repo and gave me access to it.

- Yeah, I'm just trying to find that now, hang on.

- I think it was watchJ or something like that

was the name of the repo.

So I imagine.

- It shouldn't be a hard problem.

- Jxray I think is what it was.

- Okay, if I set it up and give you access to it,

that's great, you're free to do whatever you like with it.

I have no skin in that game.

- Okay.

- I could also create another one for you

if you think this is so different or you could.

- I haven't decided that myself.

I'm kind of lean towards doing it in branches,

but I'm kind of not, and I'm kind of waffling.

One of the annoying things about this current implementation

is it creates a lot of garbage in the locale.

It's all names that start with Z.

And if I do another trace,

(mumbles)

then it replaces them.

What this does is actually deletes everything

that starts with a Z in the locale.

And the reason for that is

assignment statements.

Assignment statements are conceptually handleable

in a locale.

It's just more, an extra layer of abstraction

I need to do to specifically wrap assignment statements,

and I haven't, didn't build that.

And if I did that, then I could,

well, the other thing is cleanup,

but that's less important.

If I, I could do a wrapper

and change how I was managing my names

so that all this stuff would be in a temporary locale

that will be deleted at the end of the trace.

But then I have to have special wrappers for these guys

so that they wind up assigning back

into the original locale.

And I also have wrappers for all name references

to make sure they come from the original locale

because I'm gonna be,

conceptually, if I'm making,

if I'm doing the work of separating out these guys

into their own locale,

then if there's a name that begins with Z

in the original locale,

I don't wanna overwrite it accidentally

and make things confusing.

So it's just some heightened work that I haven't done yet.

- I think it goes a little deeper than that.

It is kind of strange to be augmenting the user's name

augmenting the user's locale with a bunch of names

that he doesn't expect.

Is there any, might there be another approach,

something like you keep a table of box values

and you assign into the cells of that table?

- Well, that would be, that's another thing that,

that's more of an efficiency thing

that I was thinking of doing.

Right now, if I do,

(mouse clicking)

like this,

I've got Z,

I've got this guy,

I've got this guy,

I've got this guy.

And they're all the same.

They're all identical.

There's no reason for me to have created three of them

other than the fact that I didn't bother to keep track

of what was already in existence.

- Right, you mentioned that at the last meeting.

- Yeah, that would be a,

I could easily have a,

when I'm joining one of these numbers,

I could track what goes in there

and then if it's already in there,

I just pull that back out again.

That would be a minor efficiency hack that--

- Sure.

That's not what I'm, I'm not arguing for efficiency here,

Raoul, I'm arguing for hygiene.

- Well, I think hygiene is gonna require

that these names exist off in their own space

because there's no other place,

there's no other place where they belong.

Yeah.

- Do they need to be names, is my question.

- They do need to be names

because they have, some of them are verbs,

some of them are adverbs, some of them are conjunctions,

some of them are nouns.

And the only way to distinct to,

well, I suppose technically they could be

representations of those values that I compose on the fly.

- You mean like you do atomic representations

and then convert them back again?

- Or linear representations or whatever, yeah.

Technically I could do that and then have,

but what that would mean is I'd be building

these big, long expressions on the fly

just so I wouldn't have names.

And I don't know that that's,

there's any value to that approach.

- Right, right.

- It's more overhead.

- Putting them into their own locale

then strikes me as a good idea.

Not too much complexity involved in doing that.

- Yeah, the biggest complexity is

if I do an expression like

that, then I need to be able to detect

that this is something that needs to become,

if I have Z1,

and then I have Z1.

In this context here where I'm using it,

I guess I did, I have, maybe I already have that in place.

How about if I have nouns?

Let's see.

I may be just not thinking clearly here.

Sorry if I'm dragging the meeting down for that.

- No, that's okay.

(laughing)

I don't think it's dragging the meeting down at all.

- Okay, so now if I have names.

Oh, so that's a solved problem.

Okay, I'm fine.

I was worried that verb names are,

one thing is verb names are handled

different from noun names.

And verb names have a delayed resolution,

whereas noun names and adverb names

and conjunction names are resolved as soon as you see them.

So when I'm wrapping,

I guess that's the other thing I should test is.

- I get why noun names are resolved right away immediately,

but conjunctions would be resolved immediately?

- Yep.

Because they're not verbs.

They need to be resolved early in the parsing process.

Oops, so I've got a bug here already.

Oh no, that's not a bug, that's me typoing.

Yeah, that's fine.

So names.

So Z.

- Okay.

I guess the other question I've got is whether-

- That's not test what I wanted to test.

- When you do your assignments,

I'm assuming you're doing them as global assignments

or public assignments, right?

- All of these things here are global assignments

because they exist in the locale.

- Do they need to be?

- They need to exist in some locale

because different verbs need to access them.

And there's no way to have locals

pass without being a parameter.

- Right.

- Okay, so I do have a bug.

I'll worry about that later.

Okay, so I've already got a bug.

I need to fix it anyways.

I'll make sure that I get that resolved.

So that's one topic.

I think I've covered enough ground on this thing.

I have some thoughts about what things I should be doing.

The other thing I had was a suggestion for Ed.

There was a post recently in the forums

about building a Google Doc page,

giving examples of the various different grammar mechanisms

that Jay has,

things like adverb conjunction, conjunction as a train,

stuff like that.

- I missed that, I'm afraid.

Which surprised me.

- Yeah, I missed it too.

Did you see it someplace else?

- It was in the forums.

This guy.

(murmurs)

Okay.

Oh, it was from him.

Let me just see.

(murmurs)

There we go.

This post, it was two days ago,

1.14 p.m. Eastern time, so it'd be three hours earlier.

And he links to this spreadsheet,

which I've done a few things in.

This is going back to this Wiki page.

And he wanted to add,

he wanted to expand on this table with examples.

Now, I don't, I've responded,

I don't think this table is the right point.

I think examples need a little more context

to be interesting.

But--

- If you go down to the bottom of this page,

I think there's another link.

Oh, maybe not.

- Anyways.

- Yeah, okay.

- The interesting thing is,

with some of these things, it's hard to think of,

what I was thinking is,

the JViewer could be,

this is dumping stuff on ad,

but could be enhanced to be useful in this context.

And the way that, what I was thinking of

is each of these letters here stands for a,

conceptually, a unbounded list of names.

But it doesn't have to be,

for coming up with examples,

you don't need to focus on the unbounded aspect.

You could limit it to just the primitives with that,

that fit those names.

And the thing is, currently in JViewer,

I bring it up here.

I could search for like,

what I want to be able to do is something,

search for minus plus times,

and so on.

And then not have it be,

I wanna have a group of things,

which is not a fixed list,

but represented as any of those things,

a sequence of any of those things.

And since,

you know, it may be in some ideal case,

it'd be nice to be able to build my own lists.

But for something like this,

where there's a specialized J knowledge

already there for the primitives,

it would be nice to say,

you know, have,

well, maybe not N,

V be any J verb primitive,

any of those symbols,

and A be any of the primitives for an adverb,

and C be any of the primitives for a conjunction,

and N be anything that's either recognizable

as a numeric vector,

or if you're not doing vectors, just a number,

and anything that's a quoted string.

I don't know if you're doing quoted strings as names,

if not, just anything with apostrophe in it.

That would be close enough, I think, to be useful.

'Cause it would come up with examples.

- You'd be doing a search on the language types, right?

- Yeah, yeah.

- Part of speech?

- Yeah.

- Parts of speech, yeah.

- Yeah, maybe, you know,

it would take over capital N, capital,

and maybe not capital N, but capital C, capital,

oh, come on, C, E, N, A.

Those three capital letters,

maybe A needs special treatment or something,

maybe it needs a checkbox to say,

do a grammatical search or something,

but, or maybe it needs a special input box,

but some way of being able to search for examples

rather than literals.

It seems like it would be very useful for a variety of,

for J programmers that want to look for examples.

- Okay.

- The parser currently does C, B, A, N, doesn't it?

- Parser supports, I mean,

- But I think it keeps it as one word, there you go, yeah.

Should have something.

- Maybe it's a different order though.

- I was gonna say, if you go into any order, try that.

The next.

- But we also have these guys.

- Yeah.

- That's what I was looking for.

But yeah, you're right, I could do that here.

But that comes up with a lot of junk,

but that's not examples,

that's talking about how the parser works.

- Yeah, yeah, yeah, yeah.

- Anyways, that was something I wanted to propose to Ed

as being a potentially useful avenue of thought,

at least even if it turns out to be

more difficult to implement than it's worth bothering with.

I thought at least it was something to think about.

- So if you were, say, we were looking for verbs,

you would be just, at this stage,

you'd just be looking for primitives.

You wouldn't look at the compound, right?

- Right, because I think at least for initial implementation

determining that this parenthesized expression is a verb

or determining that this name represents a verb,

which is defined somewhere else on the page,

that gets into, I mean, those are tackleable projects,

but that's not where you wanna be to start.

That would be like version two or version three

of this kind of a mechanism,

even if they weren't tackling it all.

'Cause the first thing you wanna do

is you wanna get it out to people

and make sure that the UI works.

And are you hearing me?

I'm getting a pop-up here saying.

- Yep, I can hear you.

- I can hear you.

- Okay.

So I think the first thing to do

is just being able to search on a collection.

It's kinda like stemming, but different.

Being manually create a stem.

And I think that the underlying query language

is capable of representing,

it's just the UI that currently struggles

with presenting that kind of a query.

- So I'm struggling a little bit with the use cases,

the utility of this.

What you say that it would be useful for J programmers,

but what would they do with it?

- It'd be very useful for Wiki people,

creating examples for the Wiki.

What the idea is, is we're searching the existing base

of available code in J,

the existing example, which is huge,

for productions of the sort that a person,

if I remember that like a CCC,

what's an example of three conjunctions in the train?

So you could look for a parentheses CCC,

right parentheses, for example.

And see if there's any examples out there.

- But it depends at what level.

'Cause I don't think anybody's like,

you're right, it's those modifiers.

It's those invisible modifiers

that are the ones that you'd be looking at.

I don't think enough people are using those.

Like the one that would seem to me is you'd see

at colon at as a CCC.

And the central colon would be the one

that separates the monadic from the dyadic.

And that's the sort of time that you would see CCC.

Otherwise you really rarely see it.

I haven't seen anybody actually use that.

Not saying it hasn't been done.

- I've seen it with like

cap dot, backtick, cap dot or cap colon,

that kind of thing.

You know, with Jose tends to do stuff like that

where he's getting verb arguments

and putting it in the right place in another expression.

Now, trains which involve adverbs

tend to be much more frequently

than trains which only use conjunctions.

But right now I don't even have a way

of looking for the examples that I suspect are out there.

And this is not a complete solution to that problem.

And this is probably maybe more,

I mean, it does aim at documentation writers

maybe more than pure programmers.

But people who are posing that kind of question themselves

do pose that kind of question to themselves

at various points in their--

- Right, but it sounds like the only concrete case

we have of a person posing that question to him or herself

is that we need some examples for a single wiki page.

- This isn't the first time I've seen people

asking about these kinds of examples.

We've had people asking about examples of forks,

usefulness of forks, as an ongoing topic

for probably 20 years now.

It comes up every year or two.

It's like, why are you even doing this?

When a person reads that page or reads about the parser,

that's one of the things that you wonder about

is what would I have to use this for?

Learning needs examples.

- We have the canonical example, right?

Plus insert divided by tally.

That's the canonical example of a verb train.

But when we, trains now support adverbs,

conjunctions, and sometimes even nouns.

And that's where it becomes more difficult to think about it

because without examples, you just say,

what am I even looking at here?

People need something concrete to think about.

Now, you're right, it doesn't have to be

a very accessible feature of the UI.

Maybe it's something that comes off of a menu

or some kind of pop-up or something like that,

or maybe even something you do from the command line

where you drive the UI from something,

it doesn't have to take over the real estate.

- Sure, it could be done within the context

of the user interface.

I'm not pushing back for difficulty exactly,

although I haven't thought through how I would do it.

What I am pushing back is utility.

So it's now possible to have nouns and conjunctions

and adverbs in verb trains, in what used to be verb trains.

The person who did that,

who made that implementation decision,

did he not produce any documentation?

- No, that exists.

We have documentation on how these things work.

What we don't have are examples

of how these things are useful.

- And you think it's out there somewhere

that people have actually used this stuff?

- I didn't, you know what? - Yes.

- You know what the funniest part about this is?

- What's that? - Is that the reason

those were put back in was 'cause Henry didn't want

to do the documentation of having to take--

- I remember that and was quite struck

by the strategic nature of that decision,

that product feature decision.

- Um, yeah.

- So if you look at that original thread,

I actually responded with an example

of a verb conjunction conjunction train

that was embedded in a conjunction verb train,

which I think becomes a conjunction adverb train.

One of those was a sequence, not a train.

But there are examples of these strange things out there.

It's just that they're difficult to search for.

Now, if it's difficult,

if you don't think it's high utility,

then all I really need is a way of accessing the raw,

be able to build raw SQLite queries from the command line

and have the viewer do the rest of the work.

- Uh-huh.

- Because I could go in and I could build a list

of verbs myself.

I can go build the list of adverb primitives myself

and I can figure out the SQLite syntax to say,

here's a collection of these things.

I won't look for any of them.

Here's a collection of these things.

I want to do a sequence of these three collections.

Maybe that's the level of abstraction that's useful here.

I haven't thought about that very far.

Are you familiar with the, what the hell is it called?

The DB Browser for SQLite?

- No, but I can study it.

- It's for Windows and for Mac.

And it's just a workstation for SQLite databases.

- So I just search for DB Viewer SQLite?

- DB Browser SQLite.

It's free.

And among other things, it will let you browse data.

It will let you submit queries.

It will let you edit the schema and so on.

- So you're recommending I just use that to--

- Yeah, I think that's the user interface that you need.

- Okay, I'll give it a shot.

SQLite Browser Shark.

- It's an old friend of mine.

- And that first page that you showed, Raul,

that Marcin had referenced,

that's exactly the page that the example should be on.

The page prior to it is the one I thought

had the link at the bottom.

So that we put this page in specifically

'cause it's a huge area.

We didn't want to expose everybody to that in Nuvoc.

But if the link at the bottom is you're really interested,

it takes you into the rabbit hole.

- Oh, that's the other topic I wanted to think about.

I wanted to talk to you guys about.

It occurs to me that, well, first off,

take a step back to give my mental framework

I'm thinking in.

When I was learning, I think it was Pascal way back when,

there was a user manual.

It was kind of a tutorial thing,

and then there was a reference work.

So that's one of my models

for how computer documentation works.

And at another point in time,

I was working on another system,

and there was a hardware manual,

and there was a programs manual,

and there was a user manual or something.

There's different kinds of documentation

that people will look at.

And J has, it's got the dictionary originally,

and it's got Nuvoc, and it has the various books.

What it occurs to me is Nuvoc was originally patterned

after the dictionary, but because of various pressures,

and a desire to leave the original dictionary alone,

is no one really, a dictionary is not the right model

to think about what Nuvoc is and how it's organized.

I think it's more like an encyclopedia,

or maybe a Wikipedia, but the Wiki itself is more,

can take the Wikipedia role.

I think encyclopedia is probably the right model

for how to think about Nuvoc entries

and probably how they should be organized.

And now this might eventually mean

bringing back the dictionary,

'cause a dictionary is a very different kind

of reference work from an encyclopedia.

But we're tending towards really long pages in Nuvoc,

and I think that thinking of it as,

how do people organize encyclopedias

might give us some insight into when those pages

should be broken up and how they should be broken up,

at least some of the time.

So it's not like, not to say that encyclopedia writers

have a trivial life, they face some serious decisions.

But I think that feels like the right ballpark.

- So if you were to look at like one of the,

I'm just going by the sections in the verb,

they're usually divided monadic at the top,

dyadic at the bottom, a number of subsections

like examples or special,

I'm trying to think of what they,

special combinations I think is what they call them.

And I think from what you're saying,

it would make sense to at least divide the monadic

from the dyadic on that page, do you think?

- Maybe, maybe, maybe it's going overboard.

Maybe the right thing to do is to give pages, sub pages,

so to represent what might be a gloss entry

in an encyclopedia page that,

here's an interesting topic that is related

to this primitive, but it's not really beginners,

it's more of an advanced thing that you want to have

available for people, but not be a distraction for beginners.

- Yeah.

- Maybe they take more, take advantage a bit more

of the hierarchical structure of the wiki.

- I'm wondering in that sense,

whether NUVOC is appropriately thought of

more towards a dictionary.

It's accurate, but it's succinct relatively,

and maybe what some pages have to be shortened.

And then you have another version

that's more of a technical manual

that goes into the weeds with it.

- That might be the right way to think about it.

But it might be that, a C also down at the bottom

or in linking from the text.

- You could have links from NUVOC to the technical stuff.

- Yeah.

- But I'm just thinking when you were talking

about the different levels of documentation

for a computer system, I remember times

I would go to a technical manual and it's absolutely,

like it takes a while to read it,

but when you've read it and you understand it,

you see the whole, all the levels of documentation

that exist above it that are accurate,

but they're not detailed enough for what you might want.

- So that turns into a huge project,

but it's at least tantalizing.

- Yeah.

Yeah, that, I mean, it is tantalizing.

That is a big project.

You're essentially, to get back to your representation,

you're getting back to an encyclopedia really,

is that it's got a full entry and it's encyclopedic.

It's not just encyclopedia, you know, world book,

it's encyclopedia Britannica.

- Right.

- But you go into it and you've got different viewpoints

and everything is structured and you go, wow,

okay, now I know about this topic.

The thing is a wiki is ideal for that,

but you need the people to put the content into it.

- And to organize it and to reorganize it.

- And to, and yeah, continually update it.

- It's kind of like refactoring, you know,

and when you're done with technical depth.

- May I ask, is the impression you have

that NUVOC currently has material suitable for beginners

and other material that beginners

should probably not be distracted with,

or is the material that people shouldn't be distracted with

to be created?

- It's both.

And I'm not sure the beginner is the right characterization

of people because in, whenever you're doing the documentation

beginner might be thought of as the first pass

over that documentation, whereas intermediate would be

like the third and fourth pass

and advanced would be the 10th and 15th pass.

You know, we're all beginners at some point,

but people new to J probably want the simple examples

and the meaty, you know, the 80% stuff.

Whereas once they're curious about a topic,

they can, they should be allowed to dive in deeper.

- I did a series of videos for some of the primitives

and like, you know, simple ones like behead

and tail and those kinds of things.

And what I found was you think, okay, well, behead,

just take the first thing off.

And I did that, except that even for a beginner,

that's not enough.

You've got to get into, if you take that first thing off,

you're always left with a list.

And that's a difference.

That's a different operation.

It actually is different that way.

And so you have to go through examples.

I found myself diving into examples where I was now working

with empty lists because that's really the only way

you can show what's going on.

- And some of that's collapsible sections

and some of it's linked sections.

And there's definitely judgment calls there.

- And that's what I found was the trick

is having the judgment to say, do I leave this part out?

Do I have to include this?

Because even at a beginner's level,

it's good to know that what you're going to always end up

with behead is a list.

'Cause otherwise it's going to bite you at some point.

- Well, so I wonder if this can be finessed

in the following way.

As soon as you talk about breaking content out

to other pages and collapsible sections,

that is a lot of work.

That's reorg.

Certainly not collapsible sections,

but certainly migrating content to separate pages

where it can be cordoned off.

So it won't disturb people who are only on their first test

in the documentation.

But maybe a better model would be

that one page has everything.

And that's what for dummies books tend to do,

necessarily 'cause they're physical books typically.

But what you do is you tag certain paragraphs,

possibly in certain sentences,

but definitely paragraphs as being advanced,

whatever advanced turns out to mean.

So it's very easy to run your eye down the page

and on your first reading, just skip over the stuff

that isn't beginner stuff.

But your eye might be caught by something

in a paragraph that's tagged advanced

that might actually be helpful to you.

It would be horrible if that advanced content

were pushed off to another page

that you had to link away to.

In other words, is there a graphical way

to resolve this problem to give documentation?

- Conceptually, every paragraph has a topic sentence.

And conceptually, we could do a show/hide

on the rest of the paragraph.

I don't know whether you can do show/hide on a span.

You might make it, but you probably can.

- Wouldn't you do that?

I would just color code them.

- What would be a color that's not a...

The problem with color code is it gets to be obnoxious.

Either it's too much emphasis or it's too hard to read.

- Maybe light gray.

Light gray, but not for a whole subject.

- That becomes annoying to read, is my problem there.

- Doesn't need to be dark gray.

It could be very light gray.

- Yeah.

But if it's either...

It either stands out from the rest,

which makes it stand out,

or it fades into the background,

which makes it hard to read,

is my experience with such things.

- Okay, then what some of these books do

is they use icons to tag paragraphs.

- Right.

And that might be something we should do.

Have a collection of icons,

make sure they're on the server,

have a page documenting them

and what's put in the page itself

to make them appear there.

That could be a good thing.

- Just gonna show what I did

with one of the contributing to the J wiki pages.

It's kind of along the same ideas.

I put the table of contents at the top

so you can jump to something.

But then what I did was...

Well, that's probably...

I actually kicked to where I hadn't done them.

But in the areas that I've done them,

essentially I've done the answer

just in a light purple or mauve

to just sort of break that up a little bit

and break it away from the visual stuff.

But there's no reason you couldn't easily

put a box around something.

I mean, and that's just done with CSS

'cause I just have to provide the...

I've already put the CSS at the top.

If I tag that div as...

I forget what I called it.

I could take a look.

Then it'll show up that way.

Oh, I called it answer.

So if it's in the answer class,

it's gonna show up with that purple around it.

So if you're willing to go in

and decide what areas are which and make that choice,

actually breaking it up that way isn't that hard

because you just set your different levels

and that paragraph would be just separated

from the main part.

I don't know.

Is that what you guys were thinking of sort of?

Or I don't know.

- This is more...

- Yeah.

- The specific example, let me first the chat link.

Just do this.

Here's a...

There's like four icons they have.

One's a memorize this.

One's a...

Here's a deep dive and one's a...

You have to scroll down about halfway

for icons used in this book.

- Yeah, got it.

- Yeah.

- And maybe we shouldn't use those exactly

'cause that might be like infringing their trademark

or something, but something along that line.

- Yeah, you could use any Unicode you wanted.

- Yes, especially...

Oh yeah, if they're Unicode emojis

and some of these are,

you do corresponding Unicode emojis.

Yeah, you're right.

Just use, just recommend those or those.

- Yeah.

Yeah, I mean, to me that's...

Well, I think the other question that it raises

is how much work needs to be done on NuVoc

to if there's a page that's expanding

with too many examples,

I don't know always that it needs all the examples

or sometimes, and there have been the cases

in some of the cut conjunction things

where they are split into separate pages

based on whether they're nouns or the value of the noun.

So semi dot three or negative three

are separate from semi doc minus one or one.

- Yeah, well, they were so different

and it was so lengthy that it was fairly natural

to split them up.

That's a rare case though.

- But I'm just saying that's an example of,

that one is obvious, but there may be places

that pages are getting too big

that there also might be choices to be made in that.

- Yeah, I guess I would sort of view that as a second pass

going through, well, actually I suspect

that going through and applying icons to paragraphs

would actually be quite hard

'cause paragraphs are gonna have,

a given paragraph might have a warning and a tip

or an idea, an advanced topic or...

- Yeah, it might be, we're setting up CSS

so that it's done, you just do a class on the paragraph

and it takes it to you.

But wiki paragraphs, wiki creates paragraphs for you

on its own and so maybe that would be a template.

There's details to work through, definitely.

- Well, I'm not worried about the mechanics of it,

I'm worried about the judgment.

- So putting the wrong one,

putting the wrong one there kind of judgment

or how it looks judgment.

- Deciding whether a particular icon

or which of the set of particular icons

applied to a paragraph.

And there might be several

which starts to diminish the value of having the icons.

It might be an interesting exercise

just to take a moderately long new Vox page

and just sort of imagine what icons you would apply

to each of the paragraphs.

And maybe it's simple, maybe it falls out very easily.

I suspect not.

- I wonder whether you could do a post-fix thing

where you just, you don't even worry about it

at a paragraph level, you put it at a sentence level

or maybe even at a word level

and you just put a insert a Unicode character there,

this is deeper.

- Oh, I see, so you do it within the prose,

not in the margins.

- Yeah. - That's an intriguing idea.

That's a very intriguing idea.

- It's almost like a citation, except that it's just a...

- It's a prefix.

- Yeah.

- And it doesn't actually go anywhere.

How interesting.

I've never seen anybody trying to do that.

I suspect it's a little bit of a nightmare.

- Well, the thing I wonder about is whether it wouldn't,

the user wouldn't want the icon to be a link.

I think that would be the natural.

Well, it would be like a citation, you click on it,

it takes you down to the bottom of the page

and shows you what you've got.

- But I thought it was tagging the sentence.

- No, it is tagging a sentence, but that's what I'm saying,

that's where the confusion would be.

It's now you've got these little icons

sitting in the sentence and they're not trying

to do anything but identify the level of the sentence.

- You think they look like footnotes?

- That's what I'm thinking, they look like footnotes

and people would confuse them.

- We have nothing to take them to.

I mean, that would be a whole decomposition effort.

I think every second or third time they click on one

and nothing happens, they'll figure it out.

- Yeah, it's emojis already and we're using,

you're correct that in some contexts

we were putting links on emojis,

but that's not universal on the web.

So I think people will live.

- Well, and I guess if you were consistent

at the paragraph level, so for instance,

you might be able to do it with size.

So at a paragraph level, you might have the very first,

the emoji might be larger and that would indicate

that it's a full paragraph, but within that paragraph,

there might be smaller ones that would be like tips or hints.

- But then you would have to structure the page a bit

to fit that kind of an idea.

- Nothing is completely trivial.

Nothing worth doing is trivial.

Because it was trivial, why would we be doing it?

- Right, to me, it's the sort of user interface

that you wanna be almost instinctive

that user will just look at it and go,

I know what they're getting at here.

And if you don't get it right,

there's so much explanation to,

or maybe it is one of those things is education.

- Let me share my screen here.

Let's just look at a Nuvoc page.

Oh, raise.

- Yeah.

- Common uses.

This is beginner level stuff.

This is exactly what you want if you're starting out.

What is this semicolon good for?

- Yeah.

- Example, related primitives, details,

and then more examples.

This is actually pretty good, I would argue.

I don't think there's any reason to add emojis to it.

And here are the special combinations.

- Yeah.

- I think this is pretty well organized

and pretty well tagged and pretty well formatted.

I don't think adding icons,

maybe this is atypically good.

I don't really have an intuition about that.

But I don't think adding icons to it is gonna help.

- No, I agree with you.

I mean, you may have hit one that,

like an entry that fits,

and that might be a good one to use it as an example.

- Common uses, example, details, use these combinations.

There seems to be a standard format.

Well, don't generalize until you have three or something.

Any dot, all right.

Well, okay, so a lot of sort of upfront definitional stuff,

and then it gets into common uses,

detail, use these combinations.

Or cases.

- And this is an example of one that is complicated.

Like it has to be because there's a lot.

- It has to be.

And you don't simplify it by moving content to other pages.

In fact, you complexify it, you complicate it

when you do that.

It does all need to be here.

I don't see what's with,

you can argue that it lacks the succinctness

of the dictionary, but that's the point.

- Well, and when you look at this one, for instance,

the next entry I think will be,

and you can get to that with the double arrows

that are just above beside down to dyad.

So the next one I think will be,

okay, so that's reversed.

That's if it's zeros, that takes you to the cubes.

So this one they have split up,

but they didn't split up minus one twos

and like the one and two versions

because they're close enough that you can explain that.

- They're pretty close, yeah.

- The max cubes is quite different as is the reverse.

- Yeah.

So just a thought.

- Yeah.

But that's an example where I think they did split them up

appropriately to separate pages.

Although you could say that maybe that page

with the one and twos,

but I think those are pretty close uses.

- They're very close.

- Yeah, I mean, it's just whether or not

you're taking the first character or the last character

and you're excluding them.

It's a pretty simple concept.

- So I guess what I'm saying is I'm not sure

there's a problem to solve here,

or if there is, I don't yet understand what it is.

- Well, I'm wondering whether it's,

if we go back to what Marcin originally

had been wondering about,

is whether it's just a matter of that particular,

the modifiers that have been brought back in

haven't been documented well enough,

or in a way, because to me,

there's a real meta level going on with those.

And the same way most people never define a conjunction,

most people will never touch the invisible modifiers.

- They will never do that.

No, I don't regard this as,

I don't regard this as a critical problem

for even a significant fraction of J programmers.

- It's more, if you thought of the outside world,

it's more the research scientist level.

- Yeah.

- If you wanna get in and try and really figure out

this is where it bends and where it breaks,

you're gonna have a different mindset.

And even developers may not be as interested in that.

- I would tend to concur in that, yes.

- But I think it probably is worth,

if people wanted to take that on,

I think that invisible modifiers area

is an area that is ripe for that.

It's an exploration.

Henry did a really good job with Fold

when he brought that in.

Those pages are really good.

But even then, I don't think people are using it that much.

- Yeah, I don't think it's implemented to be fast,

if I remember right.

- Not yet.

Henry said it wouldn't be hard to make it quick.

If people were using it, it would be worth his effort

to do it.

- Right, there may be a chicken and egg problem

at work here.

- Yeah, maybe.

- It's also a little bit involved to understand

and we don't have a lot of tutorials on it.

We have just the one page.

We don't have people going out saying,

you know, there's nobody thinks it's cool.

It's more, there was demand for it from people

who are coming in from like a Haskell background.

- Yeah, it's much more algorithmic.

So that there are certain things, for instance,

in Dialog APL, it just does not do properly.

And Fold gives you the option to choose

how you wanna do your reductions and your scans.

But not every person is that concerned

about how the reduction or scan is done.

It's when you wanna get into performance

and, you know, linear as opposed to quadratic,

depending on how you're breaking it up,

then you're interested in how that scan is performed.

But that's just another example

of something that's been added.

There is a good page, but even with that,

I'm not sure the community is.

It is a bit chicken and egg,

but I think the challenge is,

is you bring somebody new in and say,

look what this can do.

They go, oh, great, great power.

How do I understand this?

Because the documentation isn't quite up to the level

that they expect from other languages maybe.

But if you don't do that,

then the people who've always been viewing it the old way

will continue to do it the old way.

- You know, forgive me, Bob,

but I think the documentation is just fine.

I like UVOC quite a lot.

The problem is J is extraordinarily rich

and complicated language.

That's the off-putting part.

It takes a lot longer to learn J

than coming from, say, a Python environment.

Then it takes to learn C#

coming from a Python environment.

- Or even coming from a language like K to J is a big jump.

- Yeah, I would characterize it

as a qualitatively different jump

in the sense that your main problem is

you've got a whole lot more primitives to contend with.

You're not trying to change the way you think.

You already think right.

It's just that your toolbox has gotten much, much larger.

- A little bit of both, but I know what you're saying.

Yeah, I don't disagree with you.

The part that's a little bit of both

is the fact that K actually doesn't do

like rectangular arrays the way J does.

So there is a different way of thinking about your stuff.

You're using dictionaries and stuff like that.

- Array thinking pervades K as it pervades J.

- Foundationally it's similar, yeah.

Yeah, you're not paradigm jumping.

- Right, precisely.

- Yeah, and in fact, I agree with you about NUVOC

because I think most of NUVOC is fine.

It's just these new areas that haven't been expanded out.

They're still a bit terra incognita, right?

'Cause they haven't been developed.

- Oh, you're thinking of the--

- The modifiers and the--

- Modifier trains.

- Some sense, yeah, yeah.

- Fold's got excellent documentation.

I've read the full documentation.

It's great.

- Yeah.

- It's just not, it's so distant from the J paradigm

that it's not something I've ever felt the need

to experiment with.

What else is terra incognita in your mind

besides modifier trains?

- No, the modifier trains for sure.

No doubt about it.

Is there anything else that I think

hasn't been really tested out?

To some extent, the direct definitions

feel a little bit the same way.

There's more to them than most people use,

but I don't know.

Again, you're sort of in a zone

where people can define other ways,

but really I think that should be expanded

and that should become the preferred way

of defining things as opposed to the old three colon,

four colon.

- Yeah, right.

- I think that's an area that could be pushed forward.

It's more of the new things that have been introduced,

maybe threads is another one.

Anything that's new may not have been developed enough

to motivate people to get into it.

That's kind of what I'm thinking.

I don't think that documentation motivates people

to get into something.

Motivation comes from other places.

Documentation enables people to get into something.

And if it's not any good, it can stop them.

I think the threads documentation is fine.

I fuss with the threads and I found it very clear.

I'm struggling to understand what problem

we're trying to solve here.

- Well, the problem may be solved by more labs

or something approaching labs.

- Conceptually, the problem we're trying to solve

is making this problem understandable.

It's kind of a--

- It might have been a threads problem.

- Yeah, it's related to the chicken and egg problem,

but it's a chicken and egg problem for us

where we're not quite seeing what we're talking about.

It's hard to talk about its usefulness

because that's what we're trying to discover.

- Well, let me ask you this.

Why were they dropped in the first place?

- Because, now this was a long time ago,

but it was because it was obscure to talk.

The examples seemed obscure and not particularly useful.

The obscurity was what didn't seem to be leading anywhere.

I think that was why.

- Right.

- What Henry said on the Raycast

was that there weren't enough people using them

and they were more likely to be minefields

for people who went in not knowing

what they were gonna be doing.

So they were gonna create problems.

Well, you'd end up having,

you would end up thinking you were doing one thing

and essentially when you're working with the modifiers,

you're kind of working back to front

because instead of working right to left,

as you would with verbs and nouns,

now you're introducing something that goes left to right

at the same time.

And I think the feeling was

there weren't enough people using it

and the people who were using it were getting messed up

by having to think forward and back like that.

So essentially there wasn't enough understanding

of the issue to really make the decision.

- And they were too hard to use.

- They were too hard to use.

And then when they were brought back,

it was because Henry was trying to figure out how to,

there was so much documentation,

it was gonna be more work to take them out.

So he said, "Okay, people want them,

"there you go, fill your boots, they're back."

- You smile at that story and I do not smile.

In terms of product development roadmaps,

that is a very, very strange way

to make product feature decisions.

- Well, and the reason I smile at it

is because it came directly out of the podcast.

Because we said, the first time Henry was on,

he actually said, "That was something we took out

"and they're not coming back."

And then the next time he was on,

he was explaining that he'd brought them back.

And that's why I always smile at it.

- I remember the second one.

Yeah, but I mean,

(audio glitches)

given that history,

why would any of the three of us expend any effort

trying to save these things?

- Well, because as I think as Rob points out,

there are some languages such as Haskell

that are starting to use more combinators

and combinators are becoming more used by some languages

as ways to explain, ways to manipulate

and bring verbs together to,

essentially you can create something that's a tool,

it's precise and it's--

- Well-defined.

- You can assign it and then you can take verbs

and drop them in and it will work the same way.

So when you think of that sort of a thing,

you know how we do a hook in J?

You can do a reverse hook with this.

And once you can do the reverse hook,

there's a lot of times it's useful.

- Sure, but is it clean?

Is it understandable?

I mean, if you're starting from scratch,

is that the way you would do it?

- Well, actually, according to Roger,

the way they would do it is they wouldn't have defined

the hooks the way they did.

They would have actually had a,

it wouldn't be invisible,

there'd be something in between that we--

- Right, but we are where we are.

So my question is, what's the,

I'm all in favor of combinators.

I've fallen to the spell of Connor in that regard.

He's a very articulate and forceful personality.

Do you regard the way that J implements

the general purpose combinator implementation

as being something that's as easy to use as it could be?

Is there unnecessary awkwardness?

In other words, the reason that people aren't using it

doesn't have less to do with documentation

than with the user experience, the programmer experience.

- I think to some extent, I think it's cultural,

'cause I think when you actually dig deep

into the SKI combinators, they're not simple either.

And so essentially what Small Yen did

is he made them bird names and everybody went,

well, that's pretty cool.

And then if I go, I can have a bluebird.

Oh, that does that, right?

Well, you can do the same thing with J,

but when you drop down to the SKI level,

yeah, you'd have to figure it out.

And then once you've done that, now you've got this thing

that wasn't in the language before for you as an entity.

And that's what they're useful for,

but I'm not sure there's a culture there.

- I don't think this, there's two things here.

There's three things going on here.

One is the combinators, and combinators require a syntax

that is not J syntax.

It's an implicit requirement, not a stated requirement,

but for some of the more advanced ones to do the things

that the advanced ones have been used for,

you need a different syntax,

one that is, one that does not able to distinguish

between code and data, and which does things one at a time.

It's a state machine underneath

that has to be underneath the covers.

And J's state machine can emulate that,

but that's not the native state machine

that you get with common, you don't get one at a time.

It would have to be all be,

you have to transform your code into a form

where everything's a noun, basically.

And then some of those nouns represent other things,

and those other things are combinators.

It's a messy thing to talk about, even.

- How would Connor react to this?

I'm sorry, give me the other two problems.

- So the other issue is,

these are part of the history of J,

and they're related to Iverson's trying to think,

reason about areas of computer technology

which had not yet been developed.

And he was reaching into the combinator space

for something useful to see if it can,

to bring it into J.

Because in compiler design,

people do think in terms of state machines of that nature.

That's one of the, that's part of the background.

So even though they're not combinators,

they are, they rhyme, combinators, I guess.

And they're in a unexplored,

they're trying to explore an unexplored territory.

So, you know, they're a frontier thing.

So that's another aspect.

And then the final thing is we do have people

that have been in our community

who have put thought into these things

and may have interesting examples of uses of these things

that are currently inaccessible.

And that's what I wanted to do was,

you know, because these things are difficult to reason about

and because examples help us reason,

I was gonna reach for some examples

that might already be there.

- Would you reach out to the people in question

and ask them for examples?

- Well, some of these people are no longer here.

Dan Braun, I don't know how to contact him.

Oleg, I don't know how to contact him.

- I've actually got a Twitter for Dan Braun.

- Oh yeah, I've got a Twitter,

but he hasn't answered recently when I've...

- I've seen a tweet, but yeah, I tried to talk to him.

- You put a post out on the forum.

- And even if I reached out,

I mean, I might've done something like this

and forgotten about it.

It's hard to remember the grammar

that you used 10 years ago, you know?

Did I use these three words in this grammar 10 years ago

when I was composing a sentence?

That's not sort of, that's not how my memory works.

I don't know if other people have that kind of memory,

but that's not how my memory works.

- Another thing that occurs to me is everything

that you can do with the invisible modifiers,

which are tacit, right?

That's the whole thing about them, they're tacit.

You can do with direct definitions

and it's actually a lot easier.

- You can do with direct definitions.

It may or may not be easier depending on what you're doing.

- The only difference Henry came up with,

and we're gonna do another episode with him about tacit,

but the only example he gave

that the reason you would go tacit

instead of direct definition

is tacit is evaluated at that point.

- Right, you have access to all the locals.

- Exactly, and so you don't have to keep reevaluating it

every time, whereas direct definition,

you're bringing it in and building it each time.

- Oh, that's actually a different thing.

Yeah.

- That was the difference, he said.

There is an evaluation difference

in how tacit is a little bit more like compiled code

and explicit is a little bit more like interpreted code.

- Exactly.

- The other side of it is there's a semantic difference

in that if you have a,

because tacit forces you to either include the names,

well, tacit generally forces you

to pass everything as parameters,

so locals aren't an issue,

but you can actually include,

even though tacit is formally,

it doesn't refer to names,

you can take the evaluate verb

and then at and a name,

and that forms a verb that evaluates that name

at evaluation time,

and that name can be a local variable

and that's not something you do with an explicit

because in an explicit,

a local variable is in a different name table

than and worse than a tacit,

it's in the name table at the time that it's being used.

It does tacit doesn't have its own name table.

So a tacit can actually reach into and use local names

and that's not something you do with an explicit.

- There's one other thing that I know

that's different between the two,

and I don't think it's really documented,

but if you do a direct definition

and you do these invisible modifier combinations,

it allows you to expand the number of arguments

you can put onto it.

- So they say we're saying,

I didn't parse your sentence or something,

I'm not seeing what you're saying.

- Okay, so if you have,

you've got an invisible modifier

that's gonna take two verbs

and then two arguments outside of that.

- Okay.

- And then you take that as a direct definition,

use that same invisible modifier in the center,

but then you include a U and a V,

you can put two more verbs either outside or inside,

depending on how that sentence evaluates.

And it will, you can actually use four verbs

within that definition.

- I mean, you can build definitions on the fly

that include an arbitrary number of parameters

and that's something I'm playing with,

but I'm not sure I've seen an example

that matches what you're thinking of.

- Yeah, I haven't seen examples,

'cause I said, I don't see, I haven't seen it documented.

I ended up doing a online thing with a guy in Japan one time

and he said, "Have you seen this?"

And I hadn't seen it before.

And so I played around with it

and what it comes down to, and it gets very complicated,

because what it comes down to

is when it looks at the U or the V,

it's evaluating those not as conjunctions, but as verbs.

Whereas if you do your lex and your,

I forget what the two references out to your verbs,

those are conjunctions.

And so as a result, you're dropping something in

that's a verb that now pulls an outside verb.

- I have seen an example of this

to see what you're talking about.

- Yeah, that's weird, but I mean,

it's where the tacit and direct definition start to break,

or they actually sort of implode on each other.

I'm not sure it's useful,

but it is kind of messy and kind of weird.

But if it was something you wanted to break in that way,

you could maybe make use of having the ability

to have a combinator that uses four verbs

that could be run independently within the combinator.

- I need to see an example.

- Yeah, okay.

Anyway, we're over our hour.

It's been fascinating.

(laughing)

But yeah, I guess my sense in wrapping it up,

I don't see it as a place where I wanna put a lot of,

it's intriguing.

It's not a place that I can see hugely beneficial

for most people, but it's really interesting to get into

if you approach it like a research work,

that you get in there and you're gonna discover things.

I think there's a great opportunity there.

- It's one of those odd icons for dummies books

that says this is a deep dive.

- Yeah, and you might be interested in this,

and you may be finding things

that other people haven't found before,

but it will be complicated and it's not documented.

But if I was trying to support the general community,

it's not something I would say,

I'll dive in there and that'll be really useful.

It's like a research scientist or abstract math.

In 200 years, this would be incredibly powerful,

but the guy that's working on it right now,

there may not even be a use for it.

Somebody should work on it, but whether or not,

if we're looking to support a Wiki community,

would that be supportive of a larger community?

I don't see it at this point.

I'm not saying it's not a good idea to pursue it,

but not as trying to support the community necessarily.

Or if a person was really interested in that,

they should dive in and start filling that space out.

That would be really useful.

That's kind of the way I look at it.

That's just me.

(laughing)

Believe me, if somebody started diving in that area,

I'd be watching it.

I'd be looking at it.

I think it would be very cool,

but I have enough trouble motivating myself

to go in and clean up different areas

that actually do need cleaning up.

Anyway, unless there's anything else,

I think we'll wrap it up there.

- All right, okay.

- Hey, thanks a lot.

And thanks a lot for all the work.

It's great being part of this whole process.

- Yeah.

- Always interesting.

- Take care, Rob.

>> Bye, Ed.

Bye, Ro.

>> Bye.

All right.