Wiki/Report of Meeting 2024-06-20
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.