back to indexA Tour of the Solveit Platform

00:00:00.320 |
Hi Jono, are you ready to show everybody what on earth the Solveit platform is? 00:00:08.480 |
All right, I'll drive and just jump in any time you've... many times I'm sure I will fail to say 00:00:21.600 |
something important or you have any thoughts about it, but this is what happens once you log in to 00:00:26.720 |
Solveit and go to the dashboard and the key thing here is my instances. Maybe Jono, 00:00:34.880 |
do you want to summarize what on earth is an instance? Sure, so for some of you who did the 00:00:41.840 |
course before, we have the Solveit platform as a way to write code and learn things and as you'll 00:00:46.960 |
see many more options as well. So an instance is like your personal machine on which that program, 00:00:53.840 |
that application runs. But you can see we can now create multiple of those. So each one is its own 00:00:59.520 |
separate, almost like a separate virtual private server, a separate machine with software that's 00:01:04.160 |
installed, with a file system where you can upload and store files, ways for you to store secrets and 00:01:08.960 |
host applications and all these other features that we'll show you. And so you can create multiple if 00:01:15.200 |
you want to keep different environments isolated or you can just use one. Most of us will have one main 00:01:20.080 |
personal instance. We're basically we're creating whole virtual but the whole computers for people that 00:01:25.760 |
you can host applications in Trolley, you can treat as a complete Unix box and you can make multiple of 00:01:37.200 |
them. That's that's yeah pretty big deal. And each one has a URL that you can go to which if I click on it 00:01:57.280 |
it actually opens up a unique URL with Solveit in and just we'll come back to it later but we will show 00:02:08.480 |
you this other link, the public one. But most of the time you'll be going to this and this this the this UI 00:02:14.320 |
will probably change soon but either way you'll see some kind of linked and start to get to your instance. 00:02:21.920 |
The reason there's a lock by it and the reason we call it the private link is that this is also 00:02:25.200 |
something that you can share if you want to give somebody else access to this computer that you 00:02:28.960 |
have. But that's not something that you'd want to make public if for example you've got like secrets 00:02:33.680 |
and files and all these other pieces that you've uploaded. So this is the one you keep special and 00:02:37.280 |
secret. This is your computer. If you ever share it we do have a way to refresh it and get a new one so 00:02:43.440 |
that you're not permanently opening up your computer to strangers on the internet. Okay cool. So here's my 00:02:55.760 |
list of dialogues and folders and in fact there's a lot more in here than that if I click show all files. 00:03:05.120 |
So this is basically showing my the directory on my little computer my instance. But by default we just 00:03:12.480 |
show dialogues. So here's my daughter's dialogue for example where she was trying to do 00:03:21.440 |
a puzzle from something called advent of code and you can go back to the list of dialogues. 00:03:34.000 |
So a dialogue as you'll see is basically a saved place where you have made some notes, talked to 00:03:46.400 |
the computer by writing code and maybe talked to the AI by writing prompts. And so those are always saved 00:03:55.040 |
until you click the delete button and you can organize them. So I've started a new folder here into folders. So I've 00:04:02.400 |
started a new folder called teach where I'm going to put all the stuff we're teaching. And so today I've 00:04:09.600 |
with a list of things that Jono and I thought we should mention. Anything else to say about dialogues, Jono? 00:04:19.200 |
We'll see what's packed in. But yeah, the way of thinking of it as a conversation between you and 00:04:24.800 |
yourself, like the notes to yourself for later, you and the computer and then you and the AI, 00:04:28.480 |
that's a kind of a helpful framing of like, okay, this is a file or a piece. Yeah, yeah, exactly. 00:04:34.320 |
Okay. Well, maybe to start with, I'm going to try to clean up these notes a bit. So to edit, 00:04:44.480 |
everything in a dialogue is called a message. There's three main kinds, code, note and prompt, 00:04:50.480 |
and a slightly obscure one called raw. And you can always edit an existing one just by clicking on its header. 00:04:57.520 |
Or you can just hit enter on your keyboard when it's got the blue around it. And when you do that, 00:05:04.720 |
it'll pop open this editor. And if you want a bit more room, you can maximize the editor. 00:05:11.520 |
Everything you see on the screen has keyboard shortcuts. And if you click on list of keyboard 00:05:16.880 |
shortcuts, you can learn them. And I've learned pretty much all of them and found basically all of them 00:05:22.880 |
really useful. So for example, command up will take me to the top. Anybody who's used VS Code before, 00:05:32.480 |
this is actually VS Code's editor that we're using. So it's a really powerful editor. 00:05:40.800 |
And what I'm going to do first is, I think, split these into separate messages. And so the split 00:05:49.760 |
into message keyboard shortcut is control shift hyphen. So if I do that, you can see it's now 00:05:55.920 |
splitting it into separate messages. So let's go ahead and do that. While I do that, Jono, anything to add? 00:06:03.520 |
Yes. Well, one possibility is Jeremy could also share this URL with me. And then if he was making edits, 00:06:12.240 |
I would see those changes to the messages appearing on my screen and vice versa. So this is collaborative 00:06:17.360 |
by default. Cool. Okay. So maybe in this case, I can start splitting them and you can talk briefly. 00:06:24.080 |
I'm going to stop sharing so that I can pop it in the chat for you. And then I'll start sharing again. 00:06:28.400 |
And hopefully we'll see things pop into my screen. So. Okay. So I just shared with Jono 00:06:36.080 |
the URL of my dialogue, which I would only do with somebody I trusted or with an instance 00:06:42.160 |
that didn't have anything sensitive in it. Cool. So if you go to the top, I'm going to hit 00:06:46.960 |
A to add a message above the current one. Okay. I'm going to run some code. Great. 00:06:51.040 |
Jono, can you finish my work for me then? Why don't you click on 00:06:55.520 |
the bottom note and maybe hit a control shift hyphen? Yeah, I'll carry on splitting that. Thank you. 00:07:10.640 |
Slightly more organized little notebook. Okay, great. And then, oh, and I see you deleted the top 00:07:17.040 |
one for me. Thank you very much. And so now I'm going to 00:07:24.560 |
make this a bit easier for me to organize by turning the top of each of these into a heading. 00:07:29.920 |
So I can hit any number one through six to turn it into a heading one through heading six. So I'll just hit two. 00:07:35.680 |
Okay. And so this is just a markdown behind the scenes. And then I'm going to go back up to the top 00:07:45.680 |
to do that. I press the home key on my keyboard. I'm actually using a laptop here. And on most laptops, 00:07:51.040 |
you press function left is the same as the home key. And this little button over here, which has the 00:07:58.960 |
shortcut control shift V, pops open my little list. Jono, do you want to add 00:08:15.360 |
So I actually just hit the slash key to put a message at the end and define a variable. 00:08:23.440 |
Okay. See here, it's got a list, the list X equals one. And so it's quite nice. If I click on that, 00:08:27.840 |
it'll take me to where Jono defined it. Great. I can click back up here. I can close it. 00:08:39.520 |
Okay. So I added this little one here. Why does it look weird? It doesn't quite look like chat GPT. 00:08:48.640 |
It doesn't quite look like a Jupyter notebook. It doesn't quite look like a bash shell. It's 00:08:52.720 |
like a bit of a weird combination of everything. Yeah, I think, I don't know, Jono, I feel like you 00:08:58.400 |
explained this better than me. So do you want to talk a bit about what we're trying to push people towards? 00:09:04.000 |
Okay. So maybe a good way to do that is to talk about those different analogies you used, right? 00:09:09.680 |
So for example, in chat GPT, you might want to ask a question or, you know, okay, how might I plot a sine wave 00:09:16.880 |
in matplotlib? And usually the interaction with the AI would be in one window. 00:09:23.920 |
You might be using cursor or something like that, but often it'll be, 00:09:28.400 |
you're in one environment for chatting to the AI and it's only for that. And so you can imagine like 00:09:32.720 |
we could create a dialogue that was just prompt messages. It's only this exchange between me and 00:09:36.720 |
the AI. But here, because we're in this live environment, you can also say, okay, cool. It's 00:09:42.560 |
given me some code. Well, I can also execute that code. It's not separate places to do your exploratory 00:09:49.040 |
programming and to do your prompting and to do your notes. It's all just mixed together in that same 00:09:53.680 |
place. So I think what were the three you listed? You said it's not quite a code editor, but we have 00:09:58.480 |
like this ability to write some code and edit it. It's not quite ChatGPT, but we have an AI that you can 00:10:03.920 |
discuss with. It's in the second message of the dialogue, if we're. Yeah. Yeah. There we go. 00:10:09.600 |
Yeah. So these different types of message are just different ways of interacting. And because they're 00:10:16.640 |
all mixed and mashed together, it makes it quite a fun playground because maybe the other like piece of 00:10:23.600 |
this is that the AI is not just in isolation. When I said, how might I plot a sine wave and not plot lib, 00:10:28.400 |
it's not like only answering that question. It can see that we were in a dialogue. It can see that we 00:10:33.040 |
have this other content here. And so, yeah, you're kind of sharing this context with, in this case, 00:10:40.080 |
Jeremy and I are sharing it. And then also the AI can see what we can see and riffle for that as well. 00:10:45.200 |
Also, we're trying to support the solver method, which is one of small short iterations with quick feedback. 00:10:53.520 |
So we're trying to encourage people not to, or the AI, not to create huge blocks of text. So, 00:11:00.320 |
you know, the thing at the bottom is just one line long. I can certainly add more lines. 00:11:06.880 |
And, you know, we can even maximize it. Command shift X. 00:11:14.480 |
To toggle that. But it's very unusual to write, say, more than 10 lines of code at a time here. 00:11:22.640 |
Whereas if you're, you know, familiar with something like code code or codex, you might be saying, oh, 00:11:26.800 |
the unit of operation is 10,000 lines of code, get in a half an hour execution loop. This is very much 00:11:32.320 |
about like one or two lines at a time, immediately visualizing the output, moving in a very small step 00:11:38.160 |
at a time. Yeah. Human in the loop. And everything about Solveit is designed to nudge in that direction. 00:11:42.640 |
And it's also hopefully encouraging your brain to think about more of a chat bot where you write small, 00:11:51.040 |
you know, prompts rather than giant files most of the time. And that's why it's at the bottom of the screen. 00:11:59.120 |
So yeah, there's just things, there's things we've done that's different. And that there is, 00:12:05.280 |
there's reasoning behind it. And we've actually found it works pretty well. So in fact, to give a sense of that, 00:12:12.880 |
I've got a little list of some examples of how I've used Solveit over the time. Basically, most of us at AnswerAid AI do 00:12:26.400 |
most of our work in Solveit now. So for example, in this case, I wanted to create a 00:12:31.360 |
a message telling people about how Solveit improved over a period of time. So I 00:12:40.080 |
grabbed the release notes, the short release notes from our GitHub repo, pasted them in 00:12:50.640 |
and asked Solveit to help me turn this into a more readable format. And I wanted it to go and 00:12:58.080 |
actually extract the PR and get all the information about each PR. And so it showed me how to do that 00:13:03.120 |
and pulled together the information about the diff of each PR. And so I was basically using it to 00:13:11.360 |
interactively create information from our community about the latest updates to Solveit. 00:13:17.840 |
Something I think everybody hates doing, if you've ever had to, was setting up 00:13:22.240 |
an email server. I ran an email company for 10 years and I still hated it. So I really liked that 00:13:29.840 |
that when we set up AnswerAI, I just asked Solveit, okay, how do I set this up? 00:13:40.800 |
Make sure it's deliverable everywhere. And I just, it said, okay, here's all the steps. 00:13:49.440 |
And so I actually, you can see you can kind of collapse things when you're done. So I just went 00:13:55.440 |
through and got the CSV from Cloudflow like it told me to and asked, and it took me through all the steps 00:14:03.520 |
of doing everything, which is a lot easier than all the clicking. And it also left me with something now, 00:14:11.200 |
when I need to do this again in the future, I just go back and repeat the process. 00:14:18.240 |
Another example was I wanted to share with my team how we were going to go about horizontally scaling 00:14:25.760 |
our infrastructure, for example, and I recorded a chat with some of the team about it. And then I 00:14:32.000 |
basically just grabbed that transcript and pasted it into a Python variable. And then I grabbed our style 00:14:40.640 |
guide and pasted that into another variable and told Solveit, okay, I want you to help me write up a description of 00:14:47.440 |
this project. Do you have all the information you need? And then we started going back and forth iterating on 00:14:55.840 |
this information for the team. And it goes all the way back and talks about Plash and Solveit and how it all works, 00:15:04.240 |
which is very nice. Another example was I grabbed 00:15:11.840 |
from Archive, the HTML version of a paper that I was interested in. And just pasted it into a note, which is... 00:15:22.400 |
not all of it came out beautifully in the note, but interestingly it was totally good enough for... 00:15:33.920 |
to solve it to understand it. So I actually read it, you know, normal PDF reader, but then I asked like, 00:15:44.800 |
"Can you help me understand this paper?" And it can understand the paper because it doesn't care about 00:15:50.320 |
minor formatting issues. And it worked really well because I was able to go back and look at it 00:15:56.240 |
section by section. And, you know, it's like I was quite interested in some of the key citations in the 00:16:02.320 |
background section. And so it's gone through and told me about what each of those citations were with 00:16:08.640 |
links to them. And then I was like, "Oh, do I really need to know this?" And again, it's kind of looking 00:16:17.040 |
it up and giving me citations. And so I found for reading, it's nice. And it's also nice to implement 00:16:24.240 |
bits of code as you go as well. Or in this particular case, I didn't. 00:16:32.560 |
Yeah, Jono, I know you do some implementation as you go paper reading too, right? 00:16:36.480 |
Yeah, yeah. But the takeaway here is that it's not like it's just designed for reading a paper and 00:16:42.000 |
implementing. It's the scope from, "Oh, I just want to casually ask questions about a PDF." Like I might 00:16:49.120 |
normally go to claw.ai for, or, "Oh, we'd like to deploy a code change to our backends." Like I'd normally 00:16:54.960 |
go to like some sort of system administration tool or use SSH. Or like, "Oh, I want to explore some code and 00:17:00.320 |
some ideas." Or I want to teach something. All these pieces kind of end up being different types 00:17:06.320 |
of dialogue, right? They look different. Some are mostly prompts. Some are mostly code. A lot of them, 00:17:10.320 |
I don't use the AI at all. But it's all in the same basic canvas. So I think that's, yeah, a good way to 00:17:16.720 |
start thinking about what this tool is as we start speaking about the particular features. Like, why 00:17:20.480 |
might you want this? It's not at all a feature that's relevant for reading a paper, but it might be 00:17:25.280 |
hugely useful for like Eric who's fact-checking his book and vice versa, right? There's some features 00:17:30.080 |
here that are only for coding. And if you're interested in solving it for writing, it's like, 00:17:33.520 |
I don't care about Python tools as functions. But you can see that we're kind of designing a very 00:17:39.280 |
general purpose thing. It's just why there's so much packed in all the nooks and crannies. 00:17:42.720 |
Yeah. If you mouse over or use your keyboard to select a message, you'll see it's got a little 00:17:48.960 |
message toolbar. I basically never use this anymore because everything has keyboard shortcuts. So I'll mainly 00:17:54.560 |
be doing that today. So for anybody who's used Jupyter before, we've tried to align 00:18:00.080 |
keyboard shortcuts to be identical. We've got quite a few more than Jupyter, but as a subset. So for 00:18:07.200 |
example, to create a cell above, it's A or below, it's B. And there's no control or command or they're 00:18:13.680 |
called chords. They're not chords, you just hit B. So I'm just going to hit B. And so I'm going to show you how to use 00:18:18.960 |
solve it to be just like ChatGPT. And so to do that, you have to be in prompt mode. And these are command 00:18:29.200 |
or control, shift J, K, L, semi-colon, or just click them. Again, I always use my keyboard. So I hit 00:18:37.200 |
command shift L to go into a prompt. And I can ask anything I want to. So 00:18:53.040 |
can you tell me concisely how I can use ChatGPT? Whatever. And say submit. And it'll tell me what to 00:19:06.000 |
do. And you'll see that us using it is going to look a lot like it, right? So it's saying like, 00:19:13.840 |
what do you want to use it for? Now one thing you'll notice here is it hasn't immediately let me ask a 00:19:18.400 |
follow-up question. And that's because I just hit the submit button or hit command enter. But actually, 00:19:24.480 |
if I hit B to go underneath. If you hit Alt Enter or Option Enter, that's more like ChatGPT. And that's 00:19:34.000 |
going to immediately let me ask another question. So if I say like, what kinds of facts? So if I now hit 00:19:45.600 |
Alt Enter, you can see it's immediately got me back, ready to ask the next one, right? 00:19:51.760 |
So it's slightly ironic to be asking about ChatGPT, given that we actually use 00:19:56.560 |
anthropic models behind the scenes at this point in time. 00:20:04.560 |
If I wanted to think more about it, you sometimes get better answers. I mean, this stuff's simple. You 00:20:08.720 |
don't need to. But if you want to have it think a bit more, it takes a bit longer to get the answer. 00:20:13.280 |
You can hit the use thinking button. I don't tend to use it until I get answers that aren't 00:20:19.760 |
as good as I wanted. And like, oh, okay, I guess I've hit something difficult. 00:20:23.600 |
Command shift D is a shortcut. So you can just see I can toggle it on and off. 00:20:28.000 |
Whoopsie-daisy. Now this what happened here is I accidentally left it in code mode rather than prompt mode. 00:20:37.520 |
And the reason for that is actually because I 00:20:40.320 |
have default code on, and that's actually default code is on by default. We're trying to encourage 00:20:48.720 |
people actually generally, if you're doing coding, just to write your own code rather than have the 00:20:56.000 |
So we always switch it back to code mode unless you turn that off, in which case you stay in the same 00:21:01.440 |
mode you're in. So if I go back and re-ask this question and hit Alt+Enter without default code, 00:21:06.880 |
you'll see it's now left me in prompt mode. And so now, and I tend to use voice most of the time 00:21:13.360 |
for this kind of stuff. So I can say like, oh, that's interesting. How does this compare to 00:21:18.480 |
Claude? Is that similar? And I'll turn use thinking on, and 00:21:25.040 |
you can see a little brain pops up. That means it's thinking. 00:21:31.280 |
There you go. So it knows. And it looks pretty happy to me, Jono. I think you're right. 00:21:41.840 |
Yeah. So that's like, like ChatGPT, right? But here's something interesting. You know, 00:21:50.560 |
if I create a note here, now, this is, I find this really helpful. 00:21:53.840 |
And add a Markdown heading. So our basics with Markdown 2, this is 3, right? I can keep things 00:22:05.040 |
organized, right? So I can collapse that left and right, or click the little arrow. 00:22:09.840 |
And you can see here, this little number appears. It says this, this note contains six tokens, 00:22:17.120 |
but inside it, there are also another 723 tokens. You can kind of see how much you've collapsed away. 00:22:23.040 |
But that's great. You know, I've kind of, and also you can move around. So hit left, it goes to the, 00:22:29.360 |
to the start of the section, go right to go to the end of the section. So here I could say like, 00:22:37.920 |
like jupyter/reple. Whoops, I made that a prompt. So that's fine. 00:22:47.840 |
That's great. It's, it's telling me stuff. So I can just hit command shift K or click that. And so I'll 00:22:58.240 |
collapse this section. All right, Jono, since we're, since you've got my URL, do you want to do some 00:23:06.160 |
like jupyter examples? Sure. Before I do though, just on the, this is like chat GPT, I guess you've 00:23:13.760 |
already seen it, but one way this is quite different is the, the non-linearity of it. You know, a lot of 00:23:20.080 |
these chat products are still very much this, like it's an, it's an exchange of messages. And once it's 00:23:24.320 |
done, it's done. But these are all editable. Like, so I'll go to the first prompt message you showed 00:23:32.320 |
and I'll change it. Right. I'll, I'll edit the AI's response. And now any further interactions 00:23:42.240 |
with the AI sees that as part of the history. Or if I didn't like the, the next one, like this no 00:23:48.000 |
longer makes sense. What kind of facts I can delete that. Right. So it's a very freeing chat canvas, 00:23:53.920 |
because if I want to go down a rabbit hole, I can, and I can always come back, uh, collapse away. 00:23:59.360 |
We also have ways of hiding certain interactions, right? So if I don't want these to color the way the 00:24:04.320 |
AI interacts in the future, there's a little, um, eye icon, which is probably showing as toggled now on 00:24:08.800 |
Jeremy's screen. Yeah. Um, so you can manage your chat history a lot more usefully. Um, okay. But anyway, 00:24:15.360 |
we should, uh, we should talk about the Jupyter REPL part of it, um, excuse me. So, um, I want to go below. 00:24:23.840 |
Um, yeah. So like we showed earlier, I think we had a variable X defined, um, as in Jupyter, 00:24:32.720 |
if you execute a cell that has an output, um, it's going to show, I guess this is from our plotting, 00:24:41.280 |
uh, the map, the demo, um, but this is a live variable, right? So for example, things like 00:24:46.480 |
autocomplete, um, I have, uh, I think arrays normally have a shape. Yeah. There we go. I've got this little, 00:24:53.680 |
ah, you can't see my, my dynamic. Why don't you show your screen so we can see all that. 00:25:00.160 |
Sure. All right. Just a sec. Um, yeah, I guess the, uh, the, 00:25:08.880 |
just seeing the magical edits was, uh, that's useful for the, the dynamic nature. Um, yeah. So showing 00:25:15.840 |
here, we've got this X variable. So if I start typing. Could you make this less wide, maybe, 00:25:19.040 |
and increase the font size of it? Great. Thank you. Sure. Let's go. What if I do something like that? 00:25:25.120 |
How's that? Nice. Um, yeah. So if I write a variable name, 00:25:29.520 |
I'm going to see it printed out as the output. I don't have to use print in this. I want it. 00:25:32.720 |
Um, if I start typing, I've got this dynamic autocomplete for some of the attributes of the, 00:25:38.000 |
the, um, variable. Uh, I could modify this in place, right. Um, 00:25:44.080 |
and then print, print some part of it. So, um, it's a very live and dynamic environment. Um, and it's 00:25:55.120 |
got this persistent state between running. If you're ever like, you've managed to make something 00:25:59.520 |
up or you'd actually like to redefine X, we always have the same primitives as something like Jupyter 00:26:03.440 |
notebook. You could restart the environment, right. So this is going to clear. If I show the variables now, 00:26:07.440 |
um, you'll see there's no values defined because we now haven't run anything that shows what X is. 00:26:13.920 |
I've got a little what's appearing on my screen. Yeah. I clicked it, uh, very fast. Um, let's just do 00:26:21.600 |
that again. Okay. Um, uh, fair enough. It's no longer an empire array. Um, but, uh, yeah. 00:26:34.240 |
Okay. So you can see, we've got a variable X defined. If I restart the notebook, it's going to go away. 00:26:37.920 |
Okay. I know when it's ready because you'll see the, um, times disappear on the code. Yeah. Um, and so 00:26:45.520 |
we're able to like reset the slate if we want, but for the most part, things are live and existing 00:26:51.440 |
until you want to get rid of them or until you close down the notebook. Um, so this is very useful 00:26:55.440 |
for later on, we'll show like running a web application or defining a bunch of functions. I don't 00:27:00.480 |
think there's much to add now for the, um, the like Jupyter piece, other than if you've ever used any 00:27:05.760 |
kind of notebook environment, you'll be very familiar in this, in a spot. Um, yeah. I don't 00:27:13.840 |
know if you've got more to add on that, Jeremy, or you want to go through things. Okay. Cool. 00:27:18.800 |
Okay. And Jono's changes have all appeared at my end as well. 00:27:32.240 |
So, yeah. Um, every, uh, note prompt import and prompt output is formatted markdown. Um, even, 00:27:50.000 |
for example, if I create a note here and, um, let's find a cute puppy. 00:28:00.240 |
Some of those are a bit, this is a proper cute puppy. It's like, yep, it's a cute puppy. 00:28:08.320 |
So I can now copy that, jump over here and say, either in a note or in a prompt, oh wow, this sure is cute. 00:28:28.640 |
Paste. And now we've got a puppy. And the key thing behind, um, Solvert is that the AI sees everything 00:28:43.440 |
you do and vice versa. So we can ask it. I want a puppy just like this one. What type do you think it 00:28:53.680 |
is and how old do you think it is? Do you think it would make a nice pet for our family? 00:29:13.200 |
Um, so I think now might be a good time to talk about modes. Um, so I might just clean this up a little bit. 00:29:24.720 |
So I just, um, pressed X to cut and I had already collapsed that section, so it cut the whole section. 00:29:32.960 |
Um, uh, I could paste it somewhere else. So if I hit V, you can see I've now moved my section. 00:29:47.520 |
Um, so we've got this interesting thing called 00:29:51.120 |
modes. Um, standard, learning, and concise. So maybe the best way to explain that is by 00:30:06.240 |
Okay, right up to the top. I'll just say like, um, in learning mode. How do I plot a sine wave? 00:30:25.760 |
like, you can't really answer a question until you know what somebody knows. Um, because you really need 00:30:34.400 |
very different kinds of answers. Um, and so I can say like, um, to be honest, I don't even know what 00:30:42.720 |
one is. But, um, I was told for homework where we're meant to create them and learn about them and stuff. 00:31:00.880 |
So I was like, yeah, let's not plot right yet. Okay, that's good. Uh, on the other hand, uh, 00:31:06.480 |
yes, I'm an expert in matplotlib and in numpy and do a lot of trigonometry in my work. I just want a 00:31:16.000 |
reminder. So please jump to showing me the code. Be concise. 00:31:24.720 |
Now one thing that's interesting here is I've, I've added this, um, question above this question. 00:31:30.400 |
And that didn't confuse it because of the golden rule, which is that, um, 00:31:36.080 |
the AI sees what you do. And so the idea is if you're, if you're here in the dialogue, it only sees 00:31:44.480 |
what's before it. It doesn't read ahead, you know. Um, so it didn't see this question when it answered 00:31:53.120 |
this question. Um, so that's learning mode and it really does encourage you to make sure that you're 00:32:03.600 |
learning as you go. Um, on the other hand, if I copy and I'm just going to paste this twice 00:32:09.440 |
and then I'll go to the top. So it won't see the previous ones. And if I go to concise mode, 00:32:14.960 |
this just gets the job done and it keeps everything compact, um, which is quite often what I want. 00:32:24.640 |
And then standard is basically the kind of default flawed behavior, which I very rarely like. It tends 00:32:34.080 |
to produce overly verbose code, um, doesn't try to understand your needs very well, but it's there. 00:32:43.440 |
Sometimes you just want the full example, right? Like it's, you know, I just want the, the, the default 00:32:49.920 |
tutorial on that, on that plotlib that I might find on the internet. So I can copy and paste 00:32:53.680 |
the one line I actually care about. And, um, you know, once you get code like this naturally, 00:33:01.760 |
you'll very often want to run it. Um, but rather than just run it flawed code style in the background, 00:33:06.720 |
we kind of bring it front and center. So if you hit W, um, or, um, or hit the add messages, 00:33:13.600 |
fence block messages, it just turns those into a code message for you, which I can then run. Okay. And, um, 00:33:23.280 |
um, the AI sees the same output that you do as well. Um, so I agree, like... 00:33:33.360 |
...ask it anything you like, and it'll be able to see all the outputs and everything. 00:33:51.440 |
All the outputs and everything. There you go. Um... 00:33:59.520 |
So it's interesting. Um, I guess I use learning mode more than I used to. Um, I kind of went into 00:34:17.840 |
using concise mode a lot for a while, still sometimes use it, but I'm definitely realizing the more I use 00:34:28.320 |
to be pushed to not use AI too much and to take my time to explain what I actually want and to 00:34:34.960 |
actually learn as I go. Um, I think we've seen this in quite a few of our staff and students, 00:34:42.160 |
more and more people who are quite experienced being like, yeah, I still got to use 00:34:45.840 |
learning mode. Um, do you use all of them a little bit, Jono? Do you have one? 00:34:51.200 |
Yeah. I, I, I default to learning mode for some things, but occasionally, especially if I'm feeling 00:34:56.400 |
like a little lazier and wanting to get something done that I've done before, right? That's something 00:35:00.800 |
that's almost rote. I just want to quickly bang out some plots of the same data that I plotted a 00:35:05.280 |
previous time. I'll switch over to usually concise mode just to... 00:35:09.040 |
Matt Plotlib is great for concise mode because like, who's got time to learn from that? 00:35:14.320 |
Would you like to learn about importing Matt Plotlib? Okay, let me just toggle it into standard or 00:35:19.200 |
concise for a little bit. But, um, if I'm actually engaged and working, um, I'm usually coding first and 00:35:25.200 |
then if I want, I'm asking learning mode. And it's very steerable, right? Claude Sonnet is very steerable to say 00:35:29.920 |
I'm, I'm actually trying to get this done. I, I don't want you to like baby me, but, um, I do want to work 00:35:36.480 |
in small pieces a few lines at a time. You can give it some directions like that at the start, and it's going 00:35:41.040 |
to very much like adhere to that, um, and follow along. So, um, you can always stop it, um, at any time. So, 00:35:51.680 |
tell me a detailed and adorable story about the adoption of this puppy. Make it a real hero's journey. 00:36:05.840 |
He's thinking. And so, I probably won't want to stop this because it's going to be super cute. 00:36:18.560 |
There we go. So, as we start learning about the puppy, I can just hit stop. 00:36:22.720 |
Okay, I don't want to read that now. Um, and you can also do that with, um, code. 00:36:32.320 |
And, uh, the shortcut key is shift, uh, shift s for stop. So, shift s. Oh, okay. 00:36:44.720 |
Nice. Um, okay. I'm looking at the list of AI stuff. I guess the only one we haven't covered 00:36:53.520 |
is tools. Do you want to talk about tools briefly and then speed through some UI bets? 00:36:58.160 |
I love tools. Um, so you might have heard about, um, MCP, um, and, uh, all this kind of, uh, fancy 00:37:07.520 |
agent stuff. Um, we have a very different approach to all that, uh, in solve it, which we think is 00:37:14.800 |
more powerful, um, but, uh, also a lot easier to do. Um, to create a tool, you just create a function. 00:37:41.680 |
So I've got a function and, um, I can now use it in an agentic loop. Um, 00:38:08.800 |
Yeah. Everything needs a type. So it knows what to pass in. Thank you. 00:38:12.240 |
Uh, Jeremy, I noticed the user ID for this user's name. 00:38:17.680 |
I noticed some, uh, ghost text appearing there and it wasn't doing that before. 00:38:25.440 |
Um, okay. So that's, that's the great feature in most IDEs. Yeah. 00:38:28.960 |
This great right arrow complete or right arrow to accept it. Um, obviously this is often useful 00:38:36.000 |
if you're writing fairly boilerplate code, um, but it can also be distracting if you're learning. 00:38:40.560 |
So you'll notice we're now in standard mode, which is why this is suddenly showing up. 00:38:43.920 |
Um, if you're in learning mode, you don't get the ghost text. Although if you want to, like, 00:38:49.440 |
if it's something obvious, like this, um, doc string is arguably quite easy to predict. 00:38:54.800 |
there are keyboard shortcuts to trigger it. Um, oh, it won't actually change until I 00:39:03.040 |
do that now doesn't happen. So if you hit option or alt full stop, 00:39:13.360 |
then it forces it even in learning mode, which is a pretty good idea. It's not just distracting. It's 00:39:21.200 |
encouraging you to turn your brain off, which is not always healthy. 00:39:24.240 |
And this is going to be extremely incendiary. And when we were developing Solveit, like I, I felt it 00:39:30.480 |
almost unusable until we had the ghost text. Like there was a while where I was so used to tab complete 00:39:36.400 |
that it, it felt like wrong to be typing in a code box and not have it. And now I don't think I've had 00:39:41.120 |
it on by default for the majority of my work for the last few weeks. Yeah. I mean, I, I like it on 00:39:47.040 |
occasion. It's a bit like, again, when it's back to something more boilerplate. Interesting. Um, 00:39:51.120 |
but having the like, oh, I can just hit a keyboard shortcut to get the completion if I want it. 00:39:56.080 |
And I know it's a function that like my brain would normally be waiting for that text to appear and hit 00:40:00.160 |
tab. Um, it's still there. Um, but when you actually just want to like wrestle with some code yourself, 00:40:05.520 |
it's not there. So, uh, so yeah, I can say, um, can you please get the ID for the current user? 00:40:15.120 |
Now, obviously if every function was available as a tool, that would be bad news if you had like, 00:40:22.400 |
you know, delete directory functions in the symbol table and so forth. Um, so that's, you just have 00:40:28.960 |
to tell it at least once in your dialogue that something is allowed to be used as a tool. 00:40:32.800 |
And to do that, you write ampersand and then you put the tool name in backticks. 00:40:40.240 |
Or if you want to be fancy, um, you can put multiple tool names in an array in backticks. 00:40:56.800 |
And so you can see, it's actually looking up these functions. Um, and as I mentioned, you can, 00:41:06.480 |
you can have it anywhere, the, the list of tools. Um, so I could make this a note and say 00:41:19.120 |
some note tools available colon. Um, and then get rid of it from the prompt and it'll still work. 00:41:30.240 |
It's hard to overestimate how powerful this is. Um, 00:41:44.640 |
you basically have an instant cloud code, you know, in fact, we've provided all the tools you needed 00:41:51.440 |
for that. There is something called Dialog Helper. 00:41:54.400 |
And Dialog Helper can tell you about its own tools. So you just hit, um, 00:42:09.040 |
it's not an all, I think you have to import it if you want FC tool info, but if you just do tool info, 00:42:18.240 |
and so that's just brings all the tools in and you can edit that if you want to. Um, actually, 00:42:26.720 |
I'm just going to call out what happened there. He called a function and it added a message to the 00:42:30.160 |
dialogue. Oh yeah. So this is one of the pieces that we haven't spoken about yet, but there's this 00:42:34.000 |
idea of like, uh, we call it meta programming. You can see one of the tools is add message. Um, 00:42:39.440 |
and so this is a tool that you can hand to Claude. In fact, it'll have it now because that note exists. 00:42:43.760 |
Um, so you could ask it to add titles to tidy up your dialogue, right? Or, um, add a code cell that 00:42:51.360 |
does some specific thing, um, or find all messages that do something and then edit all of them to do 00:42:57.120 |
something else. There's some very powerful pieces that fall into place. And then for files, like you're 00:43:00.960 |
talking about Claude code style, um, HNT, you know, file editing. Yeah. We've got, um, 00:43:05.680 |
ability to grip and said and view files and insert or replace or edit. Um, so, so we use this, um, 00:43:14.400 |
I think most recently to like do some code archeology. Quoing a GitHub repository, let, uh, 00:43:20.480 |
solve it loose to say, Hey, use these tools, figure out where like these arguments eventually go. 00:43:25.680 |
Right. And so it finds a function that uses them and then it finds what function that calls and it finds 00:43:29.520 |
what function that calls and it reads another file to figure out. Oh, okay. Down at the bottom of the 00:43:33.120 |
stack, they're passed over the message queue in this format. Um, it was very useful to be able to send 00:43:39.520 |
it off on a little bit more of a, a deeper task once in a while. Yeah. In fact, the, this is basically 00:43:45.280 |
the same sort of tools that Claude code has by default. These actually come from Claude's text edit API 00:43:51.120 |
and we've, um, improved some of them and we've also added some others like the ability to search. 00:43:56.240 |
Um, so yeah, it can go away, search the code base and make edits to your files. And so you can use it 00:44:04.480 |
fully agentically, but we encourage people to be a bit cautious about how you do that. Um, I do it 00:44:13.200 |
in a way that really menial stuff. Sure, get it, go and do it for you. So we, this, this code archaeology, 00:44:22.320 |
it was easier than us digging through the code to see what calls what, um, but we're not going to get 00:44:27.920 |
it to go off and write all our software for us because we end up with something we don't understand. 00:44:32.720 |
Yeah. I think the most common pattern by far across Answer.ai is like, go and find some information. 00:44:37.520 |
And in fact, there's actually a couple of tools built in as well. So you don't have to create 00:44:40.800 |
functions for them for specifically searching and reading URLs. Um, because that's often what you want, 00:44:46.720 |
right? Like go read the docs of the Gemini API and tell me how to embed a document. 00:44:50.960 |
And let's do that right now. So for example, fast.html. Um, so there's a couple of ways you could, 00:45:14.800 |
um, please have a look at. And any links that would be helpful and tell me how to create 00:45:28.880 |
database applications and fast.html. Um, yeah, so that's going to go and look at that, um, link. As you 00:45:41.600 |
can see little things popping up to tell you, it's reading the URL and it's reading more URLs. 00:45:46.400 |
And, uh, the thing it's done is it's gone through this thing that's designed specifically for language 00:45:53.680 |
models to look at, just telling it all the things, places it could look for information. And, um, 00:46:08.240 |
you could say, please create a note containing the contents of. 00:46:30.880 |
Hey, um, is it because the tool definitions are further down in the dialogue? 00:46:36.800 |
Um, this one I was expecting to already be there. Um, I actually deleted all the tool definitions, 00:46:43.840 |
but, um, it's meant to already know that particular one. Um, oh, okay. 00:46:49.680 |
Um, well, we could always, uh, show the keyboard shortcut to copy the output and, um, 00:46:56.880 |
absolutely dump it in a note if we need, but it might just need a reminder about what it has access 00:47:03.040 |
to. So dialogue helper has some, you know, brief instructions, uh, documentation. Um, 00:47:08.720 |
so one of them is called URL to note, which is the one I was thinking it would use for me. Uh, you can, 00:47:17.600 |
oh, you know what? I didn't use thinking mode. I'm kind of curious now. Let's try turning on thinking mode. 00:47:39.520 |
I didn't know we made URL to note available. Maybe we haven't updated. 00:47:53.120 |
No, it's right there. Well, there you go. That's interesting. I think, um, that's a new, 00:47:58.640 |
so we're using Sonnet 4.5 and it's interesting. Every language model is different. Um, 00:48:05.200 |
so we're still learning, uh, about what each language model can do. And it seems for some reason, 00:48:13.600 |
this one might need more encouragement to use specific tools. 00:48:18.720 |
I think the rest of this is going to be mostly, oh, I guess we should talk about like, uh, sharing 00:48:36.160 |
dialogues and what's going on there. That's going to be relevant to new users and old users alike. 00:48:41.360 |
I was just going to also mention, um, undo is important. So one thing I quite like is if I 00:48:50.560 |
create a couple of notes here. So I hit Alt Enter there. Um, and if I delete D from there, 00:48:58.560 |
and I delete S from there, and I can go back here and press Command Z, it's undone that one. Go back here, 00:49:07.840 |
undo that, it's undone that one. So it's even quite smart if you edit a prompt output, 00:49:13.600 |
rerun the prompt. You can go back into the prompt output, hit undo to undo the AI's changes as well, 00:49:22.320 |
Um, all right. I think there's lots of useful things here. 00:49:34.080 |
Should we go through this? Yeah. Okay. Um, so this, um, this thing that's running here 00:49:46.240 |
that has, um, you know, variables that have values. We call it a kernel. That's not just we call it a 00:50:00.800 |
kernel. It is called a kernel. Um, it's a, it's a running Python interpreter, basically, that has this 00:50:08.320 |
state. And when you hit restart, it restarts that Python interpreter and clears out its state. 00:50:14.800 |
Um, so it's a full running copy of Python running on this machine that we've deployed for you called an 00:50:21.280 |
instance. Um, if you go back to the dialogue list, that stops your kernel. So if I go back into it again, 00:50:37.680 |
and ask what a is, it's not there anymore. Um, however, if you don't click that top left thing, 00:50:50.480 |
but just like go back into here, for example, you could go to the dashboard and click the button there. 00:50:56.880 |
Again, there's multiple ways to get back to it. That doesn't stop the kernel. And so you can see down at the 00:51:02.720 |
bottom here, there's a list of running kernels, right? So there is that kernel. So I could then 00:51:09.120 |
open up "open up Claire's lesson". And in that, um, click that code. A doesn't exist because this is a 00:51:23.920 |
different running copy of Python. Or else back over here in the original one. That's still right there. Um, and you'll see our, um, 00:51:35.600 |
what a refresh list of running kernels now shows me I've got two running kernels. 00:51:42.480 |
Do you think that's clear as to what a kernel is, Jono? 00:51:45.920 |
Yeah. Um, and so each dialogue has its own kernel, I guess, just like a dialogue is the collection of 00:51:52.400 |
the notes and discussion and so on. The kernel is like the thing that's run any code that you've run 00:51:56.960 |
in that session. And if you restart it, you're clearing the slate. Um, yeah. 00:52:01.920 |
Um, so, uh, I find it really helpful that we have a, um, duplicate button, which has the shortcut D. 00:52:11.440 |
Um, and I find that helpful because often if I'm working through trying to solve a problem and 00:52:18.960 |
I kind of, not quite sure what direction to go. And I want to do a little experiment, or I want to create 00:52:23.120 |
multiple versions with different tweaks or different parameters to a model. Um, I can hit D and it opens up 00:52:30.960 |
a second copy of this kernel. They're now both running, you know. Um, and then I could change its name to 00:52:40.240 |
other updates or whatever, and these are now two separate ones I can play with and go back and 00:52:47.440 |
forth between the two, which I find quite handy. And everything you do, you know, ends up, um, 00:53:02.640 |
you know, saved in your dialogue list. This is really nice for like templates as well. So often I 00:53:12.320 |
have my, my starter template that loads my, uh, latest chapter of the book and populates some data into a 00:53:19.280 |
list and all those other things. And then I could duplicate that a bunch of times. And in one of them, 00:53:23.600 |
I'm exploring the user feedback and in another, I'm editing and in another, I'm changing which 00:53:27.680 |
chapter we're doing. And then you've still got all of your prompts and your tools and your bits and pieces. 00:53:31.760 |
And in that case, you, you might want to actually click the, this does exactly the same thing, 00:53:35.760 |
click the jute button on the dialogue list. Um, so you can also go into a terminal at any time, 00:53:44.800 |
which is shift T, uh, or you can, um, do it here as well. Um, and that'll go into a terminal in the, 00:53:51.760 |
the current directory that you're in. So I'm currently in the teach directory. You can go back to earlier 00:53:56.320 |
directories using the breadcrumbs that appear here. Um, so if I press shift T, 00:54:01.040 |
you'll see, um, you'll see I've got a terminal and you'll see here, all of the dialogues are actually 00:54:06.880 |
stored as Jupyter compatible notebook files. Um, obviously in Jupyter notebooks, you won't have 00:54:13.600 |
all the functionality, um, um, but they, they do go in both directions. And so I could even like 00:54:22.080 |
open up in Vim and see that it's actually a JSON file behind the scenes, um, and I can CD around and 00:54:33.920 |
do all that kind of stuff. Um, that's also another way you can create folders, move things between 00:54:41.760 |
folders, so forth. Um, often you'll have stuff that you just want to upload from your local computer. So 00:54:49.200 |
you can always hit the upload button to do that. Um, or of course you can upload or create a SSH key 00:54:57.600 |
and get clone repos. And so I tend to do a lot of my work now in cloned repos. One nice thing about 00:55:05.360 |
cloning a repo or, or initializing a new repo is you can always revert back to checkpoints if anything 00:55:12.480 |
doesn't quite go the way you want it to. All right. Public URLs. This is a big one. Um, 00:55:21.920 |
so maybe even with creating a new dialogue. Um, so you can run, um, basically any server you like, 00:55:38.640 |
and if you have it running on, um, port 8000, um, then everybody that you give that public URL to can 00:55:48.800 |
also use it. Um, so let's see what would be a good way to do that. Um, I mean one simple way, for instance, 00:56:02.560 |
this is kind of cheating a bit, but I could say, um, python minus m http dot server 00:56:16.480 |
Okay, we're now serving. So that uses port 8000 by default. So if I now head over to this public URL. 00:56:29.440 |
There you go. There's my python server. Um, so you could run quarto, run a blog, do whatever you like. 00:56:38.320 |
Um, although, you know, most of the time the way we tend to use that is to create, um, 00:56:45.520 |
little web applications and test them out, um, which it looks like Jono's doing. So shall we just watch Jono? 00:56:54.720 |
Sorry Jono, I was running my python server. So it's now free for you, hopefully. 00:56:58.400 |
All right. So I'll stop this and restart and try that again. Okay. So this is just creating a little, 00:57:04.560 |
um, fast HTML server. Um, but maybe I ran that twice. One more time. Um, and then creating a couple of 00:57:17.440 |
different routes. Are you sure you stopped? I am not at all sure. No. Um, 00:57:22.880 |
yeah, I think I did. Oh, no, I didn't. There it is. Python minus m http server. 00:57:36.800 |
Kill 301. Oh, that's right. So it's running in the background. 00:57:43.680 |
No worries. I don't know why it says defunct, but, uh, that might mean it doesn't give you back the port. 00:57:50.080 |
It says me right for, I've never quite done it this way before. Do you have the port available? 00:57:56.640 |
All right. Um, and so it's a very small app. I just have two routes and have some interactivity. So when I 00:58:06.000 |
click on one, it uses htmx behind the scenes to toggle the, the word in this case. Um, but importantly, 00:58:13.920 |
this is an app running on port 8000. So if you went to the public URL, pull on foo. I don't know if you 00:58:20.400 |
want to do that, Jeremy. Absolutely. I want to do that. Yeah. Um, 00:58:24.960 |
That should be our running application. Simple as that. It's going to be huge. Everybody's going to 00:58:33.520 |
want to use your app. And the cool thing is it's, um, it's live, right? Like if I go and edit this code 00:58:39.520 |
here to say hi instead of hello and submit that, um, Jeremy should be able to refresh that page and see 00:58:45.840 |
the new app. So you're, you're there, um, editing, editing the code of the running application. It 00:58:54.240 |
doesn't have to restart, right? I can just add a new route. Um, and it does. Let's do that again. 00:59:00.640 |
Okay. We've got the high world thing. So change it again. I don't know. I'm not even going to refresh. 00:59:05.040 |
Just tell me when you're ready. All right. I've changed it. So, okay. So there's no redeploy. 00:59:10.960 |
Hey, Jeremy. Thank you. Um, yeah. So we have applications running like, uh, the discord buddy 00:59:17.280 |
solve it, buddy chat bot in our discord. That is just a solve it dialogue. And on the public URL is 00:59:23.120 |
where the app runs. Um, but anyone on the solve it team has that private URL. They can edit the dialogue. 00:59:29.360 |
They can give it new functionality or tweak what data is available to it. Um, make updates and the app is 00:59:35.280 |
still there running as a live artifact in its own instance. Um, so it's all nice and separate and 00:59:40.640 |
container. There's no like, um, special frameworky stuff. Like this is a plain 00:59:47.600 |
Python, ASGI web application. You could run fast API. You could run Django, whatever. 00:59:56.800 |
You could run quarto preview, right? And serve up your blog from this if you so desire. Um, yeah. Yeah. 01:00:10.320 |
Okay. What if I want to share the actual code other than just like sharing the app. 01:00:14.160 |
So we're talking about, uh, sharing. Uh, yeah, great. Yeah. So actually it's interesting at answer AI. 01:00:36.000 |
that an artifact we've created where actually the dialogue ends up being the artifact itself. 01:00:42.960 |
You know, just like sometimes you kind of end up sharing like chat GPT, deep research summaries or 01:00:48.080 |
whatever. It tends to happen a lot more in Solvert because you've actually built a complete 01:00:54.880 |
analysis package or you've done a complete transcription and history and whatever. 01:01:01.760 |
So there's a few ways you can share your work. 01:01:06.800 |
One way is just to go to settings and click export dialogue to export it to a gist 01:01:15.680 |
and that will render it kind of okay. Gists have some benefits to them which make them useful in some 01:01:25.440 |
situations or if you want to make it, um, you know, really work with Solvert though. Let me give you an example here. 01:01:42.560 |
Um, actually I'll just show you as well. Like sometimes if you want to make sure it's getting 01:01:47.520 |
the latest information, it helps to ask it to search. Search the web to make sure you've got the latest information. 01:01:57.120 |
Because it takes a bit of time for it to search so it doesn't always take that time unless it's 01:02:01.760 |
knows that you want it to. Just the way I prefer, you know. 01:02:07.200 |
And so when you do that you get these little asterisks which you can click on 01:02:17.840 |
to get more information. So now if I publish this then that's like a gist but it's just going to be more 01:02:27.440 |
um, Solvert native as you see. So that way you can kind of share something that's 01:02:34.560 |
the same as you see. And we're going to be improving this in the next couple of days so maybe by the time 01:02:41.440 |
you see it there'll also be options to get it in a more pure blog post style output. 01:03:05.680 |
All right. There's some nice extra things in with AI. 01:03:20.880 |
Sometimes again a lot of modern coding tools really lean into this. It's like get the AI to write your code 01:03:34.960 |
for you. You can have that mode too. We call them super completions. They use a more powerful language model to do a 01:03:41.200 |
bigger completion than ghost text. Don't overdo it. 01:03:53.680 |
You know it goes complete to write that for me and then it's like okay this is all pretty standard so 01:04:16.640 |
rather than hitting right arrow right arrow right arrow. I can just hit command shift full stop. 01:04:23.280 |
And it'll just take a little bit longer to try and write the whole thing for me. 01:04:36.880 |
And then once you've selected if you press the same thing command shift full stop 01:04:41.280 |
you can ask it to do something more specific. 01:05:14.560 |
Then I'll show you an interesting one if I see. 01:05:50.960 |
Can you show me a basic example of a fast html table containing a header row and then a couple of 01:06:05.600 |
Contact rows with say a name and a phone number just use two or three rows of example data. 01:06:17.920 |
It's quite good I find using AI in this way to generate tests data or examples or stuff like that. 01:06:29.120 |
And maybe because I kind of want to be more in like. 01:06:32.320 |
Hey you do it for me mode I'll switch to concise mode here. 01:06:43.120 |
What are some best practices for laying out tables? 01:06:50.000 |
Have a look at the way this is rendered currently and. 01:06:52.560 |
Tell me if we can improve it using Tailwind somehow. 01:07:01.760 |
That Solvert should be able to see the same thing that you see. 01:07:11.280 |
What a table looks like depends on your screen. 01:07:19.040 |
So to do that you can hit command shift comma. 01:07:21.840 |
And it brings up a little thing saying can I please look at your screen. 01:07:29.120 |
It just pops this little output included to let it know you did this. 01:07:34.080 |
Of this exactly as it appears in your screen. 01:07:36.160 |
And so before it could still see that output. 01:07:45.280 |
And that's probably okay at guessing what that looks like. 01:07:52.160 |
Particularly though if there's like a rendering problem with complex CSS. 01:09:23.120 |
Then it pops open the output into a separate tab. 01:10:27.760 |
It might actually be nice to keep a few of the. 01:14:18.160 |
I want to demonstrate our usage of LaTeX compatible math. 01:15:17.760 |
So I think we might need to change the system. 01:18:12.080 |
so thanks very much for watching bye gang there's everybody