Live CEOing Ep 673: Language Design in Wolfram Language [Storing Interfaces and Min on Around]

Stephen Wolfram leads a design review on how Wolfram Language stores large data and outputs. The team debates embedding data in notebooks versus referencing external files, proposes standardized storage options across local and cloud systems, and discusses UX for managing object quotas and layout margins.
Chapters
Sam.
Okay.
Hello, everyone. Welcome to another Wolfram language design review session, part of our Language Completeness and Consistency series. All right. We supposedly have three topics. I bet they won't be simple. First one is about the where to store things interface.
Okay, so there, there's. So there are four bullet. Four bullet points here which are all sort of dance around this issue, but, you know, they're distinct points. Yeah, the, the. So, right, so we have. Right. So audio has this, you know, choose where to store the thing. You know.
Okay, let's. Let's just set the basic point here. Basic point is we've got a bunch of output forms that. And they are all output forms, I think, initially that might or might not actually store the goods, so to speak, inside them.
Yep.
And, you know, there are a bunch where I could just copy it and paste it somewhere and use it as input because it has the goods inside it or that it has a reference to the goods. And other cases where it's like, sorry, it's just a picture. Is that correct?
Well, I think. Well, I think. Well, I don't think audio really falls into that category. Right. I mean, it's never just a picture, I don't think.
Oh.
By that, I mean. Okay, so look, audio is a very bad case because. Okay, the issue is, I mean, the.
First three fall into that category.
Right.
That that thing may or may not store the data, whereas audio always stores the data.
No, it doesn't. Sure. It specifically doesn't store the data. It has a pointer to a file that stores the data.
Well, but. Yeah, but it still knows the name of that file. Right.
But it never actually stores the data. I can never pick this up and copy it and paste it into a new session. Well, okay.
Yes, you absolutely can.
No, no, no, no, no. I know that, but this is the gotcha here. I can't send it to somebody else and have it ever work.
Well, but you can choose to store it in the notebook.
Well, no, I can't.
Yes.
Yes, there is the incor version for the audio object.
See the little store icon?
This one here.
Yeah. That we introduced only like three months ago. And you were very excited about.
Yes. Okay, fine. Does it have a mouse over. Yes, it does. Okay. I guess. I mean, so long as we can teach people that that icon means storage. Okay. So. Yes, I agree. This is really good. Store notebooks. Store in the cloud. Store in the private cloud.
Right.
That's really good.
Right, so. Right. So one item.
I'm sorry. I'm sorry.
I'm sorry.
I'm going to ask something else. Why does this not have store as a local object?
Because that is just a file, which is exactly what this already is.
No, no, no, I, I know that, but, but I might want it in my. Just think about the following thing. My local object store might be something accessible from multiple computers. It might be this, that and the other. This is.
If we decided that is useful, we can add it easily.
I think it's useful because I think it's something we should standardize. I think we should standardize on this. We should standardize on what we're doing for all of these. Because I think audio is rather special in just having a randomly scattered file be usable. Right. Most of these other things don't have that. Like for example, here. Right. You know, here.
Well, you need to write evaluated in this session. Right.
I understand that. Okay, well, let me, let me do that. Okay. Okay. So now this only offers me to store the expression in the notebook. It's not offering me other alternatives.
It.
Right. It's a. Well, yes. I mean, there's the iconize option next to it, but yes.
Can I argue why we might want these same options for this as well? Does that make sense? Store it in the cloud doesn't seem completely stupid to me. You know, why is there. Go ahead.
I would like Luto pine. I feel like there was some issue with the fact.
Oh.
But maybe not.
Our large outputs.
Specifically or uniquely things that you want to be able to store elsewhere. No. Is this something you want to do with? What I'm suggesting is that every large thing. Okay. Have this option that allows you to make it. Okay. If it's in the notebook, you can send the notebook and you know, it's all good. Right. If it's not in the notebook.
For.
Whatever reason, you might want some way that you could have global access to it. John Fultz, do you want to comment on this? Oh, right.
So. So I mean, why don't you go ahead and click on it?
Right.
Because this is, I feel like, is a little bit different from the other guys just in terms of the behavior. And maybe this is purely a historical accident.
Right.
I know this is what. Why we're talking about it here. Because I don't think it should be different. I think, I think we need to standardize how this works.
Let me finish my sentence, please, Stephen.
Yeah, please, go ahead.
Right. And so why did the. Right. So if you click on that one and embed in notebook.
So it says embed in line in notebook. Is that what it says here? No, it's got different wording. Come on, guys.
Yeah, the wording is different because the operation is different. Right. This is what we were saying before. The output firm is a failure in the case of Sparsray, but it's a perfectly valid one in the audio case. If you look at the input firm of the audio is just audio file. The data. There is the file.
No, it's not. It's not.
This is right. No, no, no, no. This is taking exactly percent and sticking percent in there, which is quite different from what the button in the audio where it's taking exactly something which is not percent and replacing that output there.
I see, I see.
What you're saying is dramatically changing the input form of the thing.
Well, right, but, but I don't think the wording is quite right because I think store a notebook. It should say embed data directly in notebook or something.
Yeah, that's perfect.
Okay.
Yeah, that's fine.
Okay. But I mean, this wording here, embed inline in notebook is awfully similar to, you know, this could say embed inline in notebook and be reasonable, couldn't it?
The problem is embed one. Right. It is unclear because the audio object is already correct in a valid input firm. As you said, embed data is a bit more explicit in what it would do.
Or maybe import and embed.
Yes, something along those lines. Even though it's a bit awkward.
You still hear me after this. Yeah. Okay. My zoom is confused. Okay, Well, okay, so there's, there's wording there, but I just want to clarify. There are many different places here where it seems to me maybe somebody can, can correct this, that all of the storage locations make sense.
Probably.
I mean, I think it's a, I think the case of the big, you know, the big output. It's. It's not crazy to do that. As a matter of fact, it's very much not crazy. I would have. You know, now that I think about it, storing it in the cloud would have been a big win. Would be a big win for lots of things I want to do. I hadn't had that idea that one could do that, but it would actually be useful to do that.
I guess the question is what would it look like once you've done that? Right.
It would have the same preview that it's stored in here, but it's backing would be the cloud.
Well, that's certainly not what we do in the, in, in the summary box case. Right. We indicate where it's stored.
Right.
So which case, if I do this store to the. Let's say I do this now and I say store. Oh, this says store in local object. Okay. What the hell? This, this doesn't allow me to do the public cloud versus private cloud. This is very confused, guys.
Well, it's older, right? I mean, we, we didn't have.
So let's, let's just pull this out here. Okay, that's.
You want to right click and show actual size.
Well, okay, fine. Okay, that's. Shoot. I managed to mouse over that. But. Okay, what other cases are there of this. Of this menu? Is this different or is this the same? That one does not have any options other than.
Right.
Okay, so we've got a big. This is a quintessential LCC problem because this store now does something different from this store now.
Well, not. No, no, no, no.
Yes, it does look gives a menu.
Okay, fine, but that, that's a trivial distinction. I mean, original originally and. And I'm actually suggesting we change the wording there. Right. Because it says data not in notebook store now, but two out of the three or three out of the four, if we add. If we split the cloud into two will not actually store it in the notebook. So we should probably say something like data not saved or data not stored.
Yeah, right. Okay.
Have a preference between those two.
Let's think about it. Let's try and look at all the cases. Okay, so first point is we're agreeing. I think we have a lot of sort of iconic forms that don't store the data. Right now we want to get to the point where every iconic form that doesn't actually have the data stored has an option to store the data. Do we agree?
I'm sorry, can you say that again? I got a loss in the sentence.
Okay. What I'm saying is we want it to be the case that every. Everything where it's sort of an iconic form that doesn't. That isn't. Okay, anything.
Which is basically saying we want to make every non interpretable iconic form interpretable.
Or have the option to have it be interpretable. Yes. Okay.
In other words, I don't think that's an absolute rule because, you know, of various data structures, etc.
But I kind of agree with you. Yeah, but as a general principle.
Yes.
Okay. And I think also when it isn't interpretable, I think it should behave in a uniform way.
Yep.
Okay, so. Okay, so now let's discuss. Basically what I would like to do is let's enumerate all the cases where we have these, you know, non. Locally, you Know, not locally stored things. Question one, question two, what are they? What are they presenting right now? And then idea, you know, then the concept would be we'll take the best practices of everything we see and make that the standard.
So I mean, unless you want to include video, which has no in notebook form, I believe this is the complete list.
Okay.
Of course there are 5,000 different things that use summary boxes, but they're all going through this centralized mechanism. So sparse array is a representative of.
What's another example?
What's that?
What's is interpolating function another example?
Yes.
Oh, nice.
And let me make the distinction once again that we've already touched on. These are two, There are two flavors of this. One is where the output is non valid and non reconstructable anymore. In the other one, the reserves might not be accessible. And these are, I think. And in the second flavor is the one that audio and video belong to.
I don't think they're as different as you think because imagine that I stored my interpolating function in the cloud.
Sure.
Okay. And then I can't access that cloud file. I'm in the same. Now the only difference with audio and video is that you think things will be strewn around the file system. Yep. Okay. Now it is not self evidently obvious that, you know, I don't think it makes sense for interpolation. You know, it's not self evidently obvious that sparse array, a file of, you know, some sparse array format shouldn't work. You see what I'm saying?
Yeah.
Then it would be the same in the same, you know, bucket as the audio case.
No, I feel like that is not. Because if you generate, if you generate your own sparse array as a result of computation, it'll be that.
I understand that, but I'm saying that with audio, if you generate your audio. Okay. Right now as an efficiency hack, even audio generated within the system is outsourced to a file to be stored, correct?
Not in all cases. It could be in the notebook because of these two different modalities in core and out of curve. In the, in core, all the data is in the input form.
But what I'm claiming is there's really no difference between the case of, you know, if I said I don't know what the sparse array formats are. There's a, let me call it, you know, sparse array of file of, you know, matrix, dot, you know, sparse matrix or whatever it is. I, I don't remember what the format names are. Maybe somebody here, I bet Rob knows. Rob here. Rob knows the Actual name I don't even remember.
There's a dot mat format.
There's a.
No, but that's not sparse array.
Yeah.
Oh, it is. Okay.
Yeah.
Well, it's from that matrix market thing, I think.
Oh, mmx, matrix. Whatever it is. I don't know. I don't know what it is.
Right.
Just, just make it up.
I can't remember the extension for that.
Okay, all right, fine. Okay, all right, fine. I don't feel so bad now that you didn't know that. But, but that's okay. But we will get the point. This could be an external large file, right? Does that make sense to people? I mean.
Yeah, but is that. And are you envisioning that working like audio in an out of curve fashion or importing the stuff and who knows?
Who knows?
I mean, this is why I'm saying audio has an immediate difference with stuff that exists already. This could work as in the same way. There's no reason why it shouldn't.
But I mean, Leonid's chunking, you know, out of core chunking mechanism. We could easily have functions that take things like this. Yeah. It doesn't happen that the implementation of sparse array is an out of core implementation right now.
Yeah, yeah, no, I understand. The only difference is that the only claim that I'm making is that the input firm for one will be valid, the other one won't.
And my claim is that there are dozens of summary boxes throughout the system and some of them, this file thing will just not make sense unless.
Fair enough, fair enough. I'm not pushing it particularly hard. Okay? But I'm going to push a different thing here, okay? The main thing that is weird and perhaps wrong, okay, about audio and video is that these other things perfectly happily have local object files. They don't.
I'm sorry, that is a possible option for video.
No, I understand that. I understand that, but what you're doing. If I just create. Okay, let me do something very straightforward here because I'm about to prove why this is horrifying. Okay? Hello, computer, are you hearing me? Okay, where is that file? Okay, that is just flamingly crazy.
So we have ways to control that, right?
I don't care.
I mean, I disagree with that assertion.
That it's flamingly crazy.
Yes.
I also don't think that is particularly crazy.
Okay?
It's in your documents directly, right? You created a file, it goes into your documents directory. That is a completely stack standard behavior of applications.
Although for us, local object, the local object store is the place we traditionally store and can manage Right. Because we can get a list of local objects, et cetera, et cetera, et cetera. You know, I may have accumulated all kinds of crud in this, and I know many applications do this to accumulate crud in the documents directory.
Well, another thing is actually, at least on Mac OS now, certain directories like downloads and I think documents, when an application accesses them for the first time, a dialog comes up saying, do you want to allow it to access your whatever, folder? And for one, I mean, that dialogue is kind of annoying. So maybe if it can be avoided.
That would be good.
But also, I don't know what happens to this functionality if they say no. Does audio just kind of break?
If they say no, that might be the case.
Okay, we should check that. Does anybody. Does John or Lou or anybody know?
Doesn't that revert to temporary directory? I thought we had code in place that if, if we can't access documents, we go to $temporary directory.
But I don't think that fallback is in place for audio.
That's probably wrong.
Right, but the other. Right. I mean, the flip side of that is if you want to actually make use of that MP3 or wave, whatever type of file it created there.
You know.
Right. You want to stick it into your, you know, into your imovie project. Well, Documents is findable in the finder, whereas Library is not. Library is a tin directory now.
Well, that's a good question. I mean, this is.
But I mean, at the same time, the same could be said of images or something. And you know, normally you expect you'll have to export them yourself.
Right. And in this case, why would you.
Care where this is?
For what.
That's what I'm saying is that maybe it's. I mean, that would, that would be the argument. Putting in some like, local object store or something is to say there's no reason the user should ever have to look at the RAW file. So just put it in some corner where, you know, they'll never see it.
I mean, that's fair. And then you're expecting the user, if they want to use the outside assistant to export of that audio object, is what you're saying.
Yes, which seems perfectly reasonable to me.
Maybe one other concern though would be.
That.
You know, suppose the user has like 20 gigabytes of videos and audio in these folders, you know, then that would be an argument for them having, you know, making them visible so that a user can clear them out as opposed to being in some obscure, bizarre place.
Well, maybe that forces us to Have a good management system for the local object store, which I wouldn't mind seeing. Maybe, maybe that, you know, when we have notifiers working, you know, we could easily have a notifier that says, you know, where it says your local object store now has 100 gigabytes in it. Do you want to do something about it? I mean, we're going to have to manage the stuff somehow because I have no idea like my local object Store. I have no idea how big it is. And it will be good if I knew.
I feel like managing the local object store is just as hopeless as managing $ documents directory when you know every file name is a UUID.
Well, okay, but my point is.
And again, with finder you can at least do things like. Right, go in and I suppose we could invent interfaces with. For local objects.
Right.
But of course, with.
Well, why don't we just have. Have you be able to open the.
Finder with a file. Right, With a. A file browser. I could go in and, you know, sort by date or whatever.
Yes, but why don't we do that for the local object store? It's just a file system, isn't it? Just files. It's nothing.
Not just files.
It isn't?
No.
Yes it is.
No, it's a directory. Every local object is a directory with at least two files.
Okay, well, isn't that nice? It probably means that it's annotatable, probably means it has some metadata. But in terms of the just the pure how big is it and what were the dates? The directory will do fine. It'll sort just fine. And we could open a browser on, you know, one of the things you could do is with, I don't know, we could, we could have some local object browse or something function where you open a browser on the local object store, which seems somewhat useful to me. I think we should build management for the local object store. I mean, unless we're going to kill the local object store and just spray files all over people use the file systems. I think we should have a management system for the local object store.
I've been wanting to have storage management for audio video files that we create under this user document directory because it's just growing large. But don't do it.
So that's what I'm saying. Don't do it. Don't invent another system. I noticed that f narp on our livestream is commenting. It seems a bit rude if the program silently writes files to folders the user regards as under their control, like the documents directory. Well, Yes. I mean, lots of programs do it, but yes, it is kind of rude. I strongly favor centralizing all this stuff in the Local Object Store. That was what we built it for. We can have management system for it. We should figure out how to do that. We should, you know, we should share the management of large objects that go there from, you know. You know, let me be clear about another thing. I mean, where does it go in the cloud by default? Does it go into a UUID in the cloud? I think it does, doesn't it? The default cloud storage here it just, just the uuid.
And that's another thing I noticed that might be. We might be able to improve just. It might be nice to have them all grouped in one folder or something.
Maybe. I mean, the alternative would be a management system for local objects and cloud objects that allows you to do that grouping dynamically. I mean, the alternative, okay, based on.
Type and date and things like that, you were thinking, for example.
But I mean the alternative would be that everything audio, video. Well, okay, I'm going to make an argument and I'm going to shoot it down. Okay, My argument would be perhaps we want something where sparse array, big output, et cetera, et cetera, et cetera, all have their own subdirectories in wherever the storage bin is. Okay, that's my argument. Now my anti argument is, okay, are we going to have a separate one for audio capture and for audio? How do we bin these things? I think it's hopeless. Right, so. So then what we could do is have something where in the metadata it knows what function created it, audio capture versus audio versus whatever else, and then have a, a management view where you can see what were all the creation functions for all the things that wound up in the, in the Local Object Store or the Cloud Object store.
I'm not sure I totally understand the distinction, but I think there would be value in having the actual directory structure of the local store have structure instead of just being a bunch of UUIDs. Because otherwise what I think is going to happen is that people are going to say or like this would happen to me is I would say, I'd scan my hard drive and say this folder is using 100 gigabytes and I just see a bunch of indistinguishable UUIDs and I delete them all when it might be better if I can see. Oh well, it's all the, all my videos are taking up all my space and I just delete that folder and then I don't lose those sparse Arrays.
Okay. And stuff. Well, different. Okay. So different programs obviously have different conventions about this. Some do things based on date, some do things based on uuid. I agree that having sort of. Okay, the real question is if every local object is a directory, that means it has metadata in it in addition to its content. It has metadata. But the question is, what Christopher is asserting is that file system level visibility of the types of things can be useful. And I don't disagree about that. Okay. However, the alternative is that we have a good enough management interface that people won't go in RAW and maybe won't even be able to find the directory. Won't just go in raw. I mean, if somebody sees. It's the Wolfram language. Local object store. Oh, I found it on my hard drive. It's big. Maybe we should have a readme right in that directory that says, hey, you can go manage this directory by using the local object store management function. That would not seem to me stupid to just say you're not really. This is not really a user. This is not an area. I mean, there's plenty of places, you know, you can go to. Dev kmem or what. What is dev kmem called these days? It's still called that.
Not sure what you're referring to.
Oh, the kernel memory that's in the file system. Is it not called that anymore? Used to be called slash dev slash kmem back in the day. And you can, you know, you can go and like start monkeying with that file, but that's your working memory for your operating system kernel. It's never going to end. Well, right?
Yeah, that sort of thing is sort of not really allowed anymore because, you know, security.
Yes. Well, okay, fair enough.
You know, I realize I'm on the losing side here, but I will make one, one last argument in favor of Documents, which is, you know, when you write, you know, when your OS says, you know, you're running low on disk, here are some places you might want to clean up. I think they probably look in Documents. They don't look in Library, because that's a hidden directory.
I'm sure they look.
Unless they specifically look in caches which are safe to delete.
Well, this is.
I'm not sure any os. I've never had a. I mean, maybe I haven't used Windows in a long time. Maybe Windows does that. At least on Mac and Linux, though I don't. I think usually they just give you a dialogue that just sort of says, just delete some things.
And.
And usually you're sort of left to using your own programs. And usually those programs scan everything.
I thought they had something that said, that said, you know, these files are using a lot of memory. I think I've seen that on, on Mac.
I know they have things like that for, for when you run out of ram. It starts, it brings up a dialogue to like, you know, it says like pick a program to quit.
Yeah, yeah, no, I've seen it for disk as well, but it's available from the Apple menu. Okay, but so is it, does it look in library or does it not look in library? I'm not sure it looks there. Well, we can determine the answer to that. That's something we should know. And you know, if it's. I agree that if it's deeply, deeply, deeply hidden, we might want to consider a different place for the local object store too. I don't think so. I really don't think so. Okay, that's a different issue. I mean, and we should have management of the local object store. You know, we should have some way that, you know, I don't know if you say, you know, about in the about box or something, we could have something that says this is the amount of space I know whether anybody ever looks there, but we could at least have something that says this is the amount of space being used by the local object store. Wouldn't seem stupid to me to do that.
Possibly useful as well for users to specify how much they would like us to use in their local store.
Exactly. Right.
Well, what happens when they, you know, put something into a local object that exceeds that? I mean, how are you going to enforce that in any.
Well, but then go manage.
Right? That's when we suggest go manage your local objects.
Right. It will bring up, look, we're hoping to have asynchronous notifiers be able to come up in notebooks and it would say, you know, with big flashing lights. It would say, you know, you're overrunning your local object store, go manage it. Okay, all right, let's, let's loop back here to. Okay, so it is my strong suggestion that we take all audio and video and put it in the local object store and never spray files.
Well, no, we can't do that. I mean, I mean if you're talking about auto generated files, fine, but. Right, I mean, users will download their own audio that they'll don't want to play.
Sure. They can put wherever they want. Right. Then, then, then they're referring to it. Okay, so, so let's consider all these cases. All right, Case number one, they recorded the audio with audio capture or something. Or they. How, where, where does audio come from? Typically, let's say somebody's going to. I mean, I think audio capture will be fairly common, but I would say.
Files are way more common because audio capture doesn't have a super advanced recording.
Okay, so how do you get that file? You don't do an import, right? Because import would bring it into.
Just type in file and then it'll complete the path for you as you type.
Okay. Wherever you put it.
But import as well. Import has the mode that just gives you the audio of a file name rather than importing the data in.
Okay, okay, fine, fine. Okay. So then import can take what that file name is and copy it or something. I don't know exactly what it should do to the local object store. Well, maybe that's wrong.
That's a bit extreme.
Yeah, that's silly. Okay, but look, listen, listen. The thing that I think is important is you're using an audio file that is somehow local. Okay. You know, that's in your documents directory or whatever else. Okay, you don't know that. It just looks like, oh, it's an X, you know, it's a file.
Okay.
Then you send the notebook to your friend and they can't get the audio and everybody's annoyed. So the thing I would suggest is that we indicate that it is not. Yeah, I mean it's not a globally accessible location somehow, you know, it's. It's neither if it's in the notebook. See what I'm saying? So there's two cases.
Something that it is not shareable.
Yeah, exactly.
Rather than non reconstructable on this specific machine. This is what I was saying that we have two flavors of things with the summary box and audio. One, the issues sharing and the other one is reconstructing in general, even on your own machine.
Okay, fine, right.
You quit the front end and then when you reopen your file the next day it's like, oh, the result of your five hour computation is gone because you didn't store it or whatever.
Right, okay, so let's. Okay, right, let's zoom out for a second what we're trying to do. So we're trying to get wording as uniform as possible. Okay. First of all, we've got these menus. Okay? So basically the items in the menus are embed in line in notebooks store in local object storing, cloud parent public, store in cloud parent private.
Yep.
Okay, Now this phrase, data not in notebook.
Right.
That, that needs to be changed. Right.
Yeah, that needs to be changed.
Data not saved, data not stored. Something like that.
Okay, so let's think about this. Okay.
And again, I think that the two flavors will reflect. Will be reflected in that sentence.
Okay, but how about data not permanently saved?
I mean it for audio. That is not true.
Right?
The data is permanently saved.
Yeah, I mean, I think we're only talking about the summary box case, right?
Okay.
Yes, for a second. I mean the. I mean, do you think it's enough to say data not saved, save now. I mean, in other words, the data is in the kernel, it's just not saved anywhere.
Correct.
Maybe the word is embed or something.
But problem is it isn't embedded. It might be in the cloud.
I guess maybe it's embedded in the cloud.
Right. Originally. Right. Originally this wording made sense because the only option was the first one. It wasn't in the notebook and you could stick it in the notebook. Now that we have three other options.
Okay, let me take another case. Okay, you've saved it, but you've saved it in a private cloud object. Then you send this notebook to your friend, they don't have access to the private cloud object, they're toast.
I mean, I don't. Yeah, so.
Well, how about we. I mean, one other point is, you know, data not persistent save now store now. See, I'm worried that people think that within this session, if we say data not saved, save now, that people will think even within this session it isn't.
I see.
I mean, we've got the whole notion of persistent objects, which is basically what we're using here. Is there any language we can get from that?
We. Well, we could. I mean, it's going to be a bit verbose, but we could do something. Something like. Data. My train of thought derailed. Sorry, I thought I had something, but something. Something along the lines of, you know, it's. It's session local data only in session saved permanently.
How about data not permanently saved, save now?
I'm fine with that.
Permanently saved sounds a bit like if you do permanently save it, it's going to be etched in stone.
Yeah, it does.
I mean, but what is. What's the problem with just saved? I mean, data not saved.
Yeah, right.
You have a Word document that says data.
Right?
Right. Especially since you're going to say there's a save now. So clearly it's still available. It's just not. I think people understand the difference between a saved file and an unsaved file.
I got one visual suggestion. How about we make this. Italic Just a small visual suggestion because it feels like it's a different kind of communication than this one up here.
Oh, that's why it's a different color and different font.
All right, okay. Just a suggestion. I might be wrong. You do have Jeremy and Billy here as well. Oh, wow. Okay. Well, they can have an opinion about this. They're probably not paying any attention.
I was, but you were off screen on my view because I was 100%. What were you pointing to?
I'm pointing to this piece here. Change that data. Not save. Save now and making that italic.
I think italic would be fine. Which one's not italic though? Which case?
None of them.
None of them. I'm saying the stuff up above. I'm saying different communication down here.
I think italic would be fine.
I'm not sure what it means for this. Maybe that should be italic as well. Which actually would. Would help me. I would like that because it's confused me that this is sort of like content and it isn't content. Okay.
How about when. Where. When this data is available, like data only accessible in this session. Kind of like we have persistence language rather than.
Yeah.
A couple of people on our live stream are suggesting this data will expire when session ends. Persist. Question mark. I would prefer a statement that session data unsaved. I think that's hard to understand. I mean, I think it's one of those things where once you understand it, you understand it, but you don't understand it when you first see it. Okay. Harry is making an interesting comment here about a notebook level dialogue that says is there anything in this notebook or some other indicator?
I mean, so there's a separate project about that and I don't want to get sidetracked by that right now.
Okay, but I'm just going to make.
As we've only gotten through the. One of the four bullet points.
Okay, okay, okay, fine, fine, fine. But I mean, I'm just going to make the point that that might suggest that we might want some kind of footer information here about there being unsaved things in the. I mean, just like we have the bit up here that shows that there's stuff that isn't saved, you know, that there's. That the actual notebook content isn't saved. There could be a thing. And that's a John question how that might work. You know, maybe we want something over here that's some kind of, you know, flash, you know, little thing that looks like one of those, you know, notebook is dirty type. Type Indicators.
So Parth has been working on a more general concept of a per notebook notification system. And I think this potentially fits with. I mean, when would it.
When would the notifier come up? I'm sorry, when would the notifier come up when you press save?
Well, I mean there would be some. That's part of what he's figuring out. But there would be, you know, some, you know, I mean, like operating system level notifications. You know, there would be some weak sort of notification that's like, you know, hey, a thing happened. Now I'm going to go hide myself, but I'll leave a little, you know.
I don't see the trigger. I don't see the trigger unless it's on save. See what I'm saying? I mean you could trigger on save. Every time you press save there could be a little notifier that comes up saying this has unsaved things.
Well, I mean, I mean the trigger can be the. Just the production of the thing in the notebook. I mean, it's not about whether or not it's saved. It's about whether or not the. The data's in the notebook.
Right, I'm aware, but it's already telling you it's not in the notebook when you produce it. So the.
Yes, but you have to be looking at that spot on the screen. You might could have been produced inside of a closed cell group. It could have been produced.
I agree.
Notebook that it's a mile high.
My suggestion is, number one, it could notify on save a number two, that we consider some little piece of iconography that indicates there are unsaved things in the notebook. My suggestion we can. Let's move on from there. Can you communicate that least as a suggestion?
Yeah, yeah. I mean my one reservation is. I just, I don't want to have, you know, you know, for us to grow 10 different types of notifications for 10 different types of events. I'd like.
I completely agree. I'm just, I just saying I think this is an untriggerable notification. There are plenty of notifications that are triggerable where I 100% agree. It's going to be a little notifier in the corner of the screen and that's all there is.
Okay. Okay.
The. Okay, so. Okay, so that's that part. So we've got. I think we should try data not saved save now as the.
Yep, that's fine.
Okay, then we've got a menu there.
Yep. We'll need to add one cloud item.
Yes. Embed inline and notebook is. Seems a fairly non Stupid thing to say as one of the save items. I like that. Okay, that looks good. Okay, let's look at audio now. Okay, so where's the data not saved in. Oh, God. We have no indication of that because it is saved. I know. So why don't we say.
And so that's where. Where. Before we dig into this, maybe you should look at the. Because they're working on an audio redesign. So maybe you should click on the links at the top that take you to.
Oh, for goodness sakes. Okay. Is that the one?
Yep.
Okay, so what am I looking at here?
Right, that's the top part is unification or making it more similar to the video gui. But the bottom part is an effort to unify the storage problem.
Right.
And so you see how it sort of very explicitly states what sort of data is backing.
I mean, I'm thinking about this iconography because it's kind of silly. Well, if it's in a cloud object already, it's like, oh, you're going to save it somewhere else as well.
Well, you might want it within the notebook if you're sharing it with someone with no Internet access or something like that.
Or you just feel like it's.
Well, what are you going to do in this case here where it's. Okay, so we've got to discuss this. In this case here where it is in the cloud, what does it say when this is in the cloud?
It says that it's stored in the cloud. So you can go ahead and click on it and see what happens.
And here if I say store in cloud.
Yep.
Sending all kinds of crud to the cloud.
And what, what are the permissions, default permissions for this public.
In that case. And there's a private cloud case. And that's the, that's the different case that we.
Were you sure that is by default in the public one? I am.
Well, okay. I don't, I don't know.
I don't think so. And this is why we have a public one in. In the audio one. Perhaps motivation for this parse array was again for the same user to make this available in different sessions. Instead the audio if for audio the motivator is be able to share with others both.
Both. So I think this should be changed to follow exactly the wording here. Data stored in cloud just cloud paren public data stored in cloud paren private. That's what I think. And if you want more information like where was it actually stored? There should be some clicker rate clickeroo here where you can get the Information on where it's actually stored.
I believe. I believe that is exactly what you do.
Okay, Well, I mean. Okay, so. But there's got to be a UX indication there that you can get that this is copy to clipboard. Fine. That's a reasonable way to get it out.
The public private could be easily confused with permissions. I'm worried about that.
It is permissions.
It's not private cloud versus no public cloud with private permissions.
No.
Okay. The dotted line looks like the private cloud logo.
Oh, I think that comes from a misunderstanding between Billy and me then.
Okay.
Because I was talking about. And evidently Billy had.
Okay, fine, misunderstanding. Let's fix it.
I, I agree. A lock icon would be great there.
Okay, fine.
Okay.
Okay.
Now, I mean, what about this case? What's that?
What about the local object case?
You mean what's the iconography?
You said, you said. No, no, you said that we shouldn't say cloud object. We should just say cloud. We can't do that in the local objects.
Well, you can say stored in local object rather than. I'm just saying don't use the actual, you know, symbol name thing. Well, we could do that. I don't know. It's, it's, it's okay. Except that I'm worried about the fact this public versus private. I'm also concerned.
Well, what about when we say private cloud object or, you know, just add the public and private either as a parenthetical or as a adjective in front of cloud object.
We shouldn't add it as an adjective in front of a camel case. Camels don't like adjectives. At least that's my theory.
But.
Let me see the. Was I going to say I am a little worried about private clouds and other permissions, you know, structures. And I'm wondering if there should be a. Look, I think there should be a thing down here.
Can you be connected to more than one cloud at a time and just go through whatever?
Yes, but here's what I think we should do. I think we should have some escape valve here where you can just say where you want it stored. You can type a file name, you can type a cloud name, all those kinds of things. You can just type a URL, a uri, basically where you want things stored. Just a select or something to decide where to store it. You know, probably not used very often, but from time to time it will be very useful because you don't want to have to. That. That way you can.
I mean, honestly, at that point, what is the advantage over export File name comma, percent.
Just cleanliness in the notebook, which I've certainly wanted many times. It's cleaner in the notebook. It's nice to be able to have something in the notebook just points off to where you want it to point. Try and get UX for that. Okay. And let's go look over here. And.
And by the way, we, we don't support in for front end operations. We don't support multiple simultaneous cloud connections yet.
Right.
Well it's. Yet is true, but it's also true that I mean there's so much work behind it and the motivation, the prioritization of that work is unclear.
Yeah, not necessary right now. Okay, so. I think this is very unclear having this here and. Well I, I wouldn't say integer 16, that's a micro.
Yeah, yeah, sure, that can be.
Just don't do it.
That we don't need.
So you're saying just have data and notebook, full stop.
Yeah.
Okay. I mean it was a way to try to get a little bit more distinguishability without having the whole picture there.
I'm still concerned about this. That it's completely unclear what that's about. I mean what this is is change location.
Right. And so the to. Right. Which. Right.
It has a. Oh, it says change storage location. Amazing. I mean it feels like this should just be uniform with this other stuff. Data stored in cloud paren public data stored in cloud here, data stored in local object. Now the one case that's special, you know, data stored in notebook. Okay, those are all exactly the same. The one case that's that's special is the random file. In which way? Because why not just say data in colon and then the name of the file or just file colon and then the name of the file. That's my suggestion. That makes sense.
How would that be different than just file dot or dot and file name?
I'm just saying to make it uniform in terms of the thing with saying data stored in notebook. Right. You just say. It's like saying just file colon and then the name of the file. I just think it's more human readable than the other case.
Okay, so, so what are we showing in the cloud object case now? You, now you've lost me. So in the cloud object case, what are you say.
Data.
Well whatever.
What do we say here? We say data. Data stored in cloud I think is what we should say. Something like that. Or possibly we can allide that to.
Say what are we going to ask.
If it's too short? We'll just say data and Cloud whoops. Or stored in cloud. What do you prefer?
I think the shorter the better. Just to make it fit in the smallest amount of possible space.
Well, do you like data in cloud or stored in cloud?
I think data in cloud is my vote, but fine.
Sounds fine to me.
So the counter argument to this and for the current design proposal was that this allows you to get to differentiate as it I was saying between all the objects if they are backed by different cloud objects, you get at least a snippet of the name of the cloud object. So you'll be able to tell. That is the advantage of good luck. Yeah, that's thus fair. I don't mind. There's a way to figure that out anyways.
Well, I mean, you could argue that for these other things as well. The reason we're not arguing that for these other things is because every one of these other things has some information about what it is.
Yeah.
Now, I mean, I can ask you. Let me follow your argument for a second. Okay. I've got two sparse arrays, each of size a million. Right. The fact is they're different and they are stored at different UUIDs. But I cannot see that without seeing the uuid. Do I care?
That's fair. And hovering over the whatever text will be will give you a preview of the waveform.
Yeah, okay, but I mean, maybe I do care. Maybe it is worth seeing a piece of the uuid. What do other people think? Anybody comments?
Right. I like the idea of seeing at least part of the uuid, you know, and. Right. With high probability I could, you know, I could at least tell if they're the same or not. Right. I might not.
Well, then maybe we should put the UUID here, piece of the uuid here. And then we could put in parens public. And if we need to allied we could just say data in cloud object. Yep, blah, blah, blah. Okay. And then paren public. And then here we'd say data in cloud object, blah blah, blah, paren public. I think we can just say file colon because I think it's obvious that that's a stored in and I think it's worthwhile to give a bigger part of the file name. Does that make sense? Does that make sense?
Yep.
Okay. Anything else we need to figure out here?
There are two things. One is.
Something'S about Camels titles.
Well, yes, there's one thing about. But let's do with the simpler one, which was the font. Right. So when you first evaluated big data equals blah bl. Right. The font was gray and you asked in some meaning which didn't involve any of the people who are relevant. Why is it gray? And. Well, the short answer is because you said so, but the slightly longer answer is because it's not interpretable. So when you evaluate those first two inputs, you'll see that the font of the output size limiter is gray and the font of the head of the sparse array is gray. And then once you store the data somewhere, those two fonts turn black.
But doesn't look gray to me. What's gray? Where's something gray?
Well, the font of the text. 1, 2, 3, 4, 5. Yes. Maybe you're not calling that gray, but I guess the. It was not black. And you asked.
Wow, Kulasaurus. I mean, I didn't. Yeah, I mean, we were being very clever. Yeah. Perhaps too clever.
Right. And the same thing would happen with sparse array. So you see, right now the head is. Is black. But when you first evaluated it, it.
Oh, that's really subtle.
Look, my suggestion, except since version 9, right, we've used the color of the head to indicate whether it's interpretable or not. Right. I mean, it's something we've done consistently.
No, no, no, it's fine. I'm not, I'm not making a big fuss about that. I'm just, I think I was just frustrated because I found it hard to read one of these, one of these big, you know, because we've gone to smaller font. Is it a gray font here as well as being gray background?
Yeah, it's non black. It's dark, you know, dark gray.
There's also a gray dotted outline that becomes solid. I would suggest just going a little bit lighter at the background, a little bit darker with the font, and then everybody's going to be happy. I just, I just want to make it not unreadable, you know, because I, I had a case where I just really couldn't really read it. Okay, okay, that was that. Now we've got some casing.
Right. And I think we're mostly okay. So all of these, you know, sort of store now simple interfaces.
I think it's just. Yeah.
Then, you know, menus and context menus. Use title case.
Yep.
The one problem case I found was the. Was the image editor toolbar. Which.
Which part of that.
Which I would recommend. Well, just look at it and fix it. But ITAI suggests that maybe we can come up with some rules.
For example, why is that more lowercase?
Well, the last tab.
I don't mind it being lowercase.
I like that one being lowercase. Yes.
That's an icon, not text.
I see.
Right. So buttons, they all used Title case, except for two that I found.
I think action buttons should use Title case. I think things that are more commentary oriented should use initial caps.
And then titles like, as you flip through those tabs, I think titles of those sections as well. Camel Cased or Title Case.
Title case. Yes. I think that's reasonable.
Right?
That's reasonable.
Yes. Yes. The one interesting inconsistency I found there is that the tooltip for the more is Initial case, more Tools and actions, and the actual title once you click on it is Capital Actions and Tools.
I don't think that's too horrifying. What's more horrifying is that there's an extra space before the ampersand. Yep, horrifying.
And. And yes. And then once you click on it, you'll see that there are some things with no cat.
Why am I seeing. Why is this being obstructed at the top? What's happening?
Oh, that seems like a bug.
Yeah, there's something wrong there.
Yeah.
This doesn't bother me much that the mouse over is a slightly different capitalism.
Right. And. And then I'm just pointing that all of these entries here are all lowercase, which maybe they should be. I'm just.
I think they look fine. I mean, I think they. Honestly, I think this looks fine.
Okay.
All right. Let's just try and hit one more thing, and then. Is this easy?
I think it's easy, but I am out of here in 10 minutes one way or the other.
Just in here. So.
Okay, so the issue is that we want to have a minor feature extension to item where item can take a margins option. And this would be entirely equivalent to embedding a pane with the. With the same margins inside the item and. And with alignments, you know, sounds sensible to me.
I think item is a good. Is a good holder for things like that.
Yeah. And this was a thing that Carlson had asked for to simplify the box structure for Data Set, for example. So I like it. Now, the question is what to name the option. We've often used frame margins for this sort of thing, but. But this isn't quite a frame. If we called it frame margins, you might think that, like in a. In a grid box, that it would stretches all the way to the edge of the frame.
But what do you call item margins?
And so item margins was.
That's the thing that. Right, okay.
And if you're happy with the name item margins, I mean, I'm. I'm Just that manipulate is just illustrating how spacings and this proposed thing are really.
I think it's useful.
Very different animals, you know, spacings or spacings around dividers. They're not margins on individual items. Which is why you'll note that when you change the spacings, it changes symmetrically. It's really a divider spacing. It's not like, you know, margins for, you know, a row or column or something like that.
This is the margins of the item. This is the spacing of the. Between the rows.
Okay. And you could do item spacings on the whole grid or can you.
So spacings is a grid level option. Nothing is changing there. I'm just.
Jeremy is asking, could you item margins at the top level and have it percolate down? And the answer should be yes.
So that's. I mean, it's a thing that we could do. But to be clear, if, you know, if we did, it would act in this way, which is to say it would add to spacings.
That's fine. There's no other way to puff out every. I like the idea of having this. I mean, we have size. Don't we have an item size option?
We do have an item size option, yes. Right.
So there's two different things. There's the puff out, which is the margins, and there's the item size, which is the locking the whole thing in terms of size.
Yeah, yeah.
What's the interaction?
Is the item size then tight around the five or the.
Well, right. In. In this example, the item size is automatic.
Right.
But if, if we were to set an item size what.
I believe it is. So your question is essentially, does item sizing, does it include spacings or exclude spacings? I think it excludes spacings, but honestly, I don't remember 100% for certain.
I mean, the item size will be the literal size of this box in the. In the grid. Right. If I say item size is whatever. Right. So then, then the only question is, if there are item margins there, and you specify great big item margins but the item size is too small, what happens then?
Then it gets squeezed in until it just doesn't. The item size has. Has primacy, I think.
Yeah. But the question is the, the item content here, does it still try to maintain the item margins, thereby crushing the inner content?
Yes, yes. If, if you specified a margin greater than the size or greater than half the size because it's coming in from multiple directions, then you'd end up with a thing that looks empty.
So it's kind of lower priority. The actual content in the middle is lower priority than the margins.
Yeah.
It's not obviously correct, but.
It is. How. I mean, what I'm describing is how pain works.
It seems reasonable to me. This item margins idea seems reasonable to me.
Should we have a default setting there? Is it default zero, or is there some other value?
The default would be zero.
Yes, because what we're seeing here is not very nice. The left and right, that crashes into the edge, which happens by default. That's. That's not nice at all.
Well, it's like plot margins. What's the default value of plot margins? It's not zero. Is it.
The plot margins? There. There is no plot margins.
What do you mean there isn't a plot margins plot?
Do you mean plot range padding?
Oh, yeah. Plot range padding. Yeah. Okay, that's. Which is a different concept. Okay, so this plot range padding, how does that relate to a possible. I mean.
Okay, because plot range padding is really talking about the range. Right. It looks at the numbers that are the range and they add some fraction to that or possibly a fixed number, but typically a fraction of that.
Okay, so if you want to see the current interaction, which maybe isn't entirely correct, of. In pain of frame margins and image size, I just put an example in chat, And this does not exactly obey what I said, and I'm sure that. I'm not sure that this is correct. So the ABC disappearing, I would defend. But then the thing getting larger, I'm not sure I would defend. I think image size should probably take precedence.
Yes, it should. It should never violate image size in my view.
But aside from the changing image size, this is the behavior that I would propose, and it would be consistent for all boxes that have these kinds of option settings.
You know, one thing we still need to work on is all the graphics grid, you know, all the padding and graphics grids and so on. Brett isn't here, is he? No, I am. Oh, you are? Okay. By the way, I, you know, the bug, some random bug with plot labels in graphics grids which is still not fixed.
Okay.
Been there for many years and needs to get fixed. Okay. But. But you know what I've wanted to do and maybe this. We can't do this right now, obviously. I think we need some kind of summit about padding in all things. Whether it's in graphics grid, in plot with axes, whether it's in each of these things. Because Jeremy is also commenting here, that grid with no Padding isn't very pretty. That Image margins arrow 0, if that's the default, isn't very pretty.
Oh, well, it spacings. It's the spacings that I overrode. Spacings is not zero by default, but.
Somehow this crushes into. I mean, this. Because it's the latest option on the block, this one seems to get precedence, which is not obviously correct.
Oh, no, no, no, no, no. Spacings. What I'm saying is spacings and item margins add together, which is why I'm trying to make that clear in the manipulate. By coloring the pane box with gray. Yeah.
Why is this thing crashing into the left?
Because I set spacings. Look at the spacings option in the input.
Yes, okay. Oh, I see.
Yeah. Because. Because I explicitly set it to zero. If you'd. If it was automatic, it wouldn't crash. I just set it to 0 for illustrative purposes.
Okay, I need to go. You need to go. I think we need to wrap up.
Here with one minute to spare, John.
Oh, yes, that makes me happy.
We'll have to deal with the round admin next time. Yep, sounds good.
Okay. Okay.
Thanks a lot, guys. Thanks to the stream. See you all soon.
More from Guy

Cheryl Strauss Einhorn | The Human Edge: Smarter Decisions in the Age of AI | Talks at Google

Rachel Glennerster | Innovation and the Center for Global Development | Talks at Google

Rebecca Winthrop | Rethinking the Purpose of Education in the Age of AI | Talks at Google

Dr. Robert Wachter | A Giant Leap: How AI Is Transforming Healthcare... | Talks at Google






