00:00:00.080 --> 00:00:03.600
Think of it as basically the FileMaker Pro equivalent of Google Analytics.
00:00:04.000 --> 00:00:06.480
And you get something that looks like it's 60 or 80% done.
00:00:06.639 --> 00:00:07.120
Yeah.
00:00:07.440 --> 00:00:08.880
It's 15% done.
00:00:09.119 --> 00:00:12.480
So there's two ways to analyze it: the boring way and the cool way.
00:00:12.880 --> 00:00:15.199
So let's marry up our two products.
00:00:15.519 --> 00:00:17.039
Claris Talk AI.
00:00:20.640 --> 00:00:22.719
Welcome to Claris Talk AI.
00:00:22.800 --> 00:00:28.320
This is Matt, and I am here at the EngageU Conference in Malmo, Sweden.
00:00:28.879 --> 00:00:31.039
And our first guest today is Jesse Barnum.
00:00:31.359 --> 00:00:32.159
Hey Matt.
00:00:32.479 --> 00:00:33.679
It's really fun being here.
00:00:34.000 --> 00:00:35.439
We've known each other for a super long time.
00:00:35.600 --> 00:00:39.920
So, weird little coincidence, you came out with a really cool logging tool.
00:00:40.240 --> 00:00:41.840
I came out with a really good logging tool.
00:00:41.920 --> 00:00:42.880
We didn't talk to each other.
00:00:42.960 --> 00:00:43.039
No.
00:00:43.359 --> 00:00:45.520
But I want to know more about yours.
00:00:45.759 --> 00:00:46.560
So talk to me.
00:00:47.039 --> 00:00:50.399
So the origins of mine are actually 2008.
00:00:50.479 --> 00:00:54.399
I started a plugin a long, long, long time ago called Layout Logger.
00:00:54.799 --> 00:01:00.960
And then recently, with all of the stuff that's going on with AI and analysis and analyzing raw stack, you know, huge stacks of raw data.
00:01:01.039 --> 00:01:01.200
Yeah.
00:01:01.439 --> 00:01:07.040
It occurred to me that it would be really cool to kind of like dust it off and fix it up and publish it.
00:01:07.519 --> 00:01:09.040
And so that's exactly what we did.
00:01:09.120 --> 00:01:10.560
And we added a whole bunch of stuff to it.
00:01:10.640 --> 00:01:12.480
Like now it logs script calls as well.
00:01:12.560 --> 00:01:17.680
So it's maybe a little bit obsolete to still call it layout logger, but what's it logging?
00:01:17.840 --> 00:01:20.640
So is it a login data from FileMaker, logging from server, logging?
00:01:26.319 --> 00:01:28.799
It's a FileMaker Pro client plugin.
00:01:29.359 --> 00:01:30.000
Yeah, plugin.
00:01:30.239 --> 00:01:32.480
So it's not using like on Windows transaction.
00:01:32.799 --> 00:01:32.959
No.
00:01:33.200 --> 00:01:33.359
Okay.
00:01:33.599 --> 00:01:33.840
No.
00:01:34.239 --> 00:01:36.400
And it's not logging uh edits.
00:01:36.480 --> 00:01:37.519
It's not like an audit log.
00:01:37.760 --> 00:01:38.560
Oh, okay, okay.
00:01:38.799 --> 00:01:47.439
Um it's logging uh which screens users are it it's really it's not actually logging any record data at all.
00:01:47.840 --> 00:01:48.400
Oh, okay.
00:01:48.640 --> 00:01:51.519
Uh so in that sense it might we might be talking about two very different things.
00:01:52.079 --> 00:01:53.519
We are, but we'll get to mine.
00:01:54.239 --> 00:02:00.799
What it logs is essentially uh think of it as basically the FileMaker Pro equivalent of Google Analytics.
00:02:01.200 --> 00:02:01.599
Got it.
00:02:01.920 --> 00:02:11.199
In that it's logging which layouts you're on, which records you're looking at, whether you're in list view, form view, which file maker pro version you're using, your username, your account name, your IP address.
00:02:11.759 --> 00:02:16.400
Basically anything that you can call with a get function is something that we're gonna log.
00:02:16.800 --> 00:02:22.560
Forever ago, I used to do this thing that was a one-pixel web viewer on and put on every layout, which actually was a Google Analytics call.
00:02:22.800 --> 00:02:23.199
Yeah.
00:02:23.520 --> 00:02:26.000
Um so but people really didn't like that.
00:02:26.960 --> 00:02:29.360
Um because you couldn't see it, you couldn't like tell.
00:02:29.520 --> 00:02:30.960
Um and it makes perfect sense.
00:02:31.039 --> 00:02:37.439
You know, I mean, like you wouldn't build a web, a marketing website without Google Analytics or some something equivalent to it.
00:02:37.680 --> 00:02:38.240
Yeah, yeah, for sure.
00:02:38.400 --> 00:02:51.919
But we build FileMaker applications all the time and then ship them and have no idea how many people are using them and what screens they go to, or which things are fast or slow, or which things are broken, which things give error messages, you know, and all we can do is just wait for users to tell us if there's a problem.
00:02:52.000 --> 00:02:55.120
But the idea here was to kind of like proactively get an insights into what we have.
00:02:55.280 --> 00:02:59.919
Yeah, huge utility um for determining which parts of the program are used or not.
00:03:00.000 --> 00:03:01.680
How do you tell if they're fast or not?
00:03:02.080 --> 00:03:07.439
So what's interesting, so our plugin works uh through the plugin idle handler API.
00:03:07.599 --> 00:03:07.759
Okay.
00:03:07.840 --> 00:03:14.800
So FileMaker Pro will call our plugin approximately 20 times per second just to say basically, hey, we're I'm idle, nothing special is happening.
00:03:15.039 --> 00:03:15.360
Okay.
00:03:15.599 --> 00:03:24.400
Uh and so during that time, we will call all of these get functions and we'll compare them to the previous sec time that we called it, you know, a 20th of a second ago.
00:03:25.120 --> 00:03:33.680
And if anything has changed in those, then we log that and we'll log it to a server in JSON format, and then you get a big dump of stuff on the server that you can then kind of analyze through.
00:03:33.759 --> 00:03:39.120
And it's really, really cool to feed that stuff to an AI like Claude and start asking questions about what are people doing in my database.
00:03:39.599 --> 00:03:44.879
So the log runs with a plugin on each client system or on the server itself?
00:03:45.280 --> 00:03:48.319
So it's both a client and plugin and server-side plugin.
00:03:48.560 --> 00:03:48.719
Okay.
00:03:48.960 --> 00:03:54.000
But the way it's installed is it's all done through a f an FMP12 file that we distribute called Layout Logger.
00:03:54.159 --> 00:03:54.319
Right.
00:03:54.479 --> 00:03:57.759
So all you need to do is just put the layout logger file maker data.
00:03:58.319 --> 00:04:01.199
Host it on the server, and then you call it from your startup script.
00:04:01.280 --> 00:04:02.479
You just call a script in that file.
00:04:02.800 --> 00:04:03.120
Got it.
00:04:03.280 --> 00:04:08.000
That will then automatically install the plugin on the server, install the plugin on the client, enable the plugin on the client.
00:04:08.080 --> 00:04:10.639
And there's no walking around to people's computers or doing anything like that.
00:04:10.879 --> 00:04:12.319
I'm playing dumb, but I've actually done all that.
00:04:12.560 --> 00:04:12.879
Yeah.
00:04:13.199 --> 00:04:13.439
Yeah.
00:04:13.680 --> 00:04:17.279
Um so uh but then I want to ask more questions too.
00:04:17.360 --> 00:04:18.720
Where does the log data get stored?
00:04:19.199 --> 00:04:22.959
The log data gets stored in the same place as your FileMaker server log files.
00:04:23.279 --> 00:04:24.879
So it's so it's a text file.
00:04:25.120 --> 00:04:29.680
It's it's uh it's it is literally just it's actually two JSON files.
00:04:30.000 --> 00:04:30.240
Okay.
00:04:30.480 --> 00:04:32.240
Um two JSON text files.
00:04:32.399 --> 00:04:34.079
It's not being stored in FileMaker Pro.
00:04:34.399 --> 00:04:34.639
Right.
00:04:34.800 --> 00:04:35.920
Um Yeah, interesting.
00:04:36.160 --> 00:04:36.399
Yeah.
00:04:36.480 --> 00:04:41.839
And so the server-side plugin, it's the server-side plugin is not really doing anything with FileMaker.
00:04:42.240 --> 00:04:48.079
It's just basically a glorified HTTP server that receives events from the clients and appends them to a text file log.
00:04:48.160 --> 00:04:51.920
Aaron Powell What's the communication that's happening from the plugin on the client?
00:04:52.079 --> 00:05:00.959
So like if I'm on my Mac and I go to load a layout um and the plugin gets called, uh how how does the data get transmitted?
00:05:01.360 --> 00:05:05.839
So what the plugin will do is it will turn that into a JSON format and add it to a queue.
00:05:06.000 --> 00:05:10.319
Well, first of all, what it does is it compares it to see if it's identical to the previous thing or not.
00:05:10.560 --> 00:05:10.639
Okay.
00:05:10.879 --> 00:05:12.240
If it's identical, it just throws it away.
00:05:12.480 --> 00:05:14.800
So this is the little 20 28 millisecond polar.
00:05:15.199 --> 00:05:15.439
Yeah.
00:05:15.519 --> 00:05:21.199
So 99.99% of the time, the event it gets is going to be identical to the event it just got and it's going to throw it away.
00:05:21.519 --> 00:05:32.079
But in those, you know, one in a thousand cases where the user just clicked on another field or another record or switch layouts or something like that, then we convert all the information about where they're currently looking at to JSON.
00:05:32.720 --> 00:05:35.279
We append that to an in-memory queue.
00:05:35.439 --> 00:05:41.600
Uh and on a separate thread, once that queue hits 25 events, then we use an HTTP call to send it to the server-side plugin.
00:05:41.839 --> 00:05:42.000
Okay.
00:05:42.079 --> 00:05:43.680
So it's not slowing down FileMaker Pro at all.
00:05:43.759 --> 00:05:44.000
It's only like that.
00:05:44.079 --> 00:05:44.879
Yeah, it doesn't sound like it.
00:05:45.040 --> 00:05:47.759
Yeah, it only gets called when FileMaker Pro is idle anyway.
00:05:47.920 --> 00:05:53.519
So it can't possibly make it slow when it's working because we that we wouldn't get idle event calls during that time.
00:05:53.759 --> 00:06:01.600
Um and uh and because it's all happening on a separate background thread for the processing and the sending to the server, it's never interfering with the users.
00:06:01.680 --> 00:06:03.839
It's not gonna like block them or give them a beach ball or anything like that.
00:06:04.240 --> 00:06:04.639
Right, right, right.
00:06:04.800 --> 00:06:04.879
Yeah.
00:06:05.040 --> 00:06:06.800
Uh FileMaker Go, WebDirect?
00:06:07.040 --> 00:06:09.199
No, no support for FileMaker Go or WebDirect.
00:06:09.439 --> 00:06:11.600
We are working on WebDirect, and we had it.
00:06:11.680 --> 00:06:18.480
We got it to the point where it would install and enable in WebDirect, but it seems like there is a bug in the calculation engine that the Wait, a bug in FileMaker?
00:06:18.560 --> 00:06:18.800
No.
00:06:19.120 --> 00:06:20.879
Well, you know, I will say this for FileMaker.
00:06:21.759 --> 00:06:22.720
I know, I know, I know.
00:06:22.879 --> 00:06:32.240
Um but I have uh I send my bug reports usually just to Clay, and he knows me pretty well, and he's really highly responsive by getting these things fixed.
00:06:32.319 --> 00:06:37.360
So I anticipate that there will be a fix for this before long and then he knows me really well too and never responds.
00:06:38.399 --> 00:06:40.160
I don't ever I don't uh ever do that.
00:06:40.240 --> 00:06:44.240
But I'm not at that same level with you for for you're being a plug-in developer.
00:06:44.560 --> 00:06:50.160
I've gotten to know Clay because every year at DevCon, when we had DevCons, he would host a plug-in developer meeting.
00:06:50.399 --> 00:06:51.040
Yep, oh yeah, yeah.
00:06:51.279 --> 00:06:55.600
Uh and so we'd all get together and you know I tend to ask a zillion questions.
00:06:55.759 --> 00:06:57.839
Uh so I got to know him pretty well from doing that.
00:06:57.920 --> 00:06:58.800
He's a fascinating guy.
00:06:59.279 --> 00:06:59.759
He's amazing.
00:06:59.920 --> 00:07:00.079
Yeah.
00:07:00.240 --> 00:07:00.800
Yeah, yeah, yeah.
00:07:00.879 --> 00:07:02.639
On the personal and uh work stuff.
00:07:02.720 --> 00:07:03.040
It's great.
00:07:03.120 --> 00:07:03.519
Yeah, yeah.
00:07:03.680 --> 00:07:04.800
Um so let's see.
00:07:04.879 --> 00:07:06.879
Um tell me about the audit log product that you've got to do.
00:07:07.040 --> 00:07:08.240
I'm not done asking you questions.
00:07:08.480 --> 00:07:09.439
Uh ask away.
00:07:09.680 --> 00:07:13.680
Um so so the you've got this uh JSON text file on the server.
00:07:14.160 --> 00:07:17.600
Um are there tools to like analyze that, or what do you do with that after?
00:07:17.920 --> 00:07:20.720
So there's two ways to analyze it: the boring way and the cool way.
00:07:20.879 --> 00:07:31.199
So the boring, simple, fast way is uh we ship a little utility, a command line utility that you can run that takes the JSON files and generates an HTML single file report.
00:07:31.519 --> 00:07:31.759
Okay.
00:07:31.920 --> 00:07:36.000
Um and it's all uh you know clickable and sortable and stuff like that.
00:07:36.079 --> 00:07:46.639
So you can see who's connecting and what versions of FileMaker Pro and which layouts they looked at the most, which scripts they looked at the most, and Mac or Windows, what application languages, tons, tons and tons of statistics that you can see in that.
00:07:46.959 --> 00:07:47.120
Sure.
00:07:47.279 --> 00:07:55.839
But that's the not the cool way, uh, which I which I just demoed in my in my session here, is you take those files and you feed them in my case to Claude.
00:07:56.319 --> 00:07:59.199
I use Claude Cowork because then Claude Cowork, you can point it at a local.
00:07:59.519 --> 00:08:00.399
You used to use cloud cowork.
00:08:00.560 --> 00:08:02.480
Now you use cloud code because cowork's gone, right?
00:08:02.720 --> 00:08:03.040
No.
00:08:03.439 --> 00:08:03.920
Different thing.
00:08:04.079 --> 00:08:04.720
Anyway, I continue.
00:08:04.959 --> 00:08:08.319
Uh when you create a new Claude chat, it'll it has a little tab that says cowork.
00:08:08.560 --> 00:08:09.279
Cowork, okay, yeah, yeah.
00:08:09.439 --> 00:08:10.079
Which is the computer one?
00:08:10.160 --> 00:08:10.560
I don't know.
00:08:10.639 --> 00:08:11.439
I just use cloud code lately.
00:08:11.680 --> 00:08:13.439
Anyway, continue, I stopped interrupting.
00:08:13.759 --> 00:08:17.759
So so co-work will allow you to point at a particular folder on your on your computer.
00:08:17.839 --> 00:08:18.720
So you can point to that.
00:08:18.959 --> 00:08:25.040
And then you can just and and critically, I intentionally avoided trying to write a skill for this.
00:08:25.199 --> 00:08:30.639
Um, because I wanted it to be, I I wanted to ensure that it was very portable across whatever AI system you're using.
00:08:30.800 --> 00:08:40.639
Um and it's really fascinating how well Claude is able to, just from the basically the names of the JSON attributes, figure out everything about who's doing what.
00:08:40.799 --> 00:08:44.240
And then you can start asking questions like who modifies my database the most?
00:08:44.399 --> 00:08:46.480
Um, what countries are people accessing from?
00:08:46.559 --> 00:08:49.840
Because we stored the external IP address that people are using to access the server.
00:08:50.240 --> 00:08:52.480
Um you can ask things like what is the ping time?
00:08:52.559 --> 00:08:55.200
You know, how how fast is people's latencies to the server.
00:08:55.360 --> 00:09:01.279
You can identify if people are sharing passwords, for instance, because the you'll see the same account name with multiple different persistent.
00:09:01.840 --> 00:09:02.480
Oh, yeah, that's right.
00:09:02.559 --> 00:09:04.159
And different source IP addresses, yeah.
00:09:04.480 --> 00:09:06.960
Um there's all sorts of security stuff that you can do with this.
00:09:07.039 --> 00:09:12.639
Uh you can see, you know, if you set up custom menus, you can tell whether users are using the custom menus you intended them to use or not.
00:09:12.960 --> 00:09:14.799
Yeah, so there's a lot of data coming with every call.
00:09:14.879 --> 00:09:17.679
What can you also manually call it from a script or something?
00:09:18.080 --> 00:09:21.440
Um manually call the the data collection part.
00:09:21.519 --> 00:09:22.799
Like the use case there.
00:09:22.879 --> 00:09:23.200
I'm not sure.
00:09:23.360 --> 00:09:37.679
Well, so for example, right now you're you're going to uh uh capturing a layout, but if you have um if you want to specifically make uh a log record in your log when a user clicks on a certain action, which may not change the layout or do anything else.
00:09:38.159 --> 00:09:39.279
No, but I like that idea.
00:09:39.440 --> 00:09:44.799
The idea of basically kind of arbitrarily stacking whatever data you want into some server-side log.
00:09:45.120 --> 00:09:45.200
Right.
00:09:45.440 --> 00:09:57.200
Well, for example, like for example, you could do that to solve the problem with FileMaker Go um uh or WebDirect, you can say, you know, put a uh when the user comes to the layout, you can have it on layout enter.
00:09:57.360 --> 00:09:57.519
Yes.
00:09:57.679 --> 00:10:05.600
And that could call, and it can then the script could say, oh, you're running on WebDirect, you're running on Go, call the log entry and then here send all the information for the yeah.
00:10:05.679 --> 00:10:06.480
Yeah, I like that idea.
00:10:06.639 --> 00:10:07.600
It doesn't do that right now.
00:10:07.840 --> 00:10:12.159
You know, I mean we've got a fixed number of attributes that we capture, and we capture them always during an idle handler.
00:10:12.559 --> 00:10:17.360
Um but I I love the idea of making it so that the developer themselves, because there's really not much for the developer to do.
00:10:17.679 --> 00:10:18.720
Yeah, it sounds like you just drop it in.
00:10:19.200 --> 00:10:21.919
You just drop it in, you you add a line to your startup script.
00:10:22.080 --> 00:10:36.240
But I do love the idea of having some developer uh accessible way to say, take this arbitrary stack of information that I want to capture at this moment and append it to the other log files that I can all be accumulated on the server and then analyzed by an AI tool.
00:10:36.480 --> 00:10:37.360
I think that's a great idea.
00:10:37.440 --> 00:10:37.919
I'll write that down.
00:10:38.240 --> 00:10:38.799
I'm glad you like it.
00:10:38.879 --> 00:10:40.879
Yeah, kind of ties into something I do.
00:10:40.960 --> 00:10:41.440
So what I love.
00:10:41.759 --> 00:10:42.559
Just tell me what you're doing.
00:10:42.879 --> 00:10:45.919
So many years ago, I wrote this thing called FM log.
00:10:46.159 --> 00:10:46.639
Uh yes.
00:10:46.799 --> 00:10:50.240
And it was it was entirely a data tracking log, an audit log.
00:10:50.480 --> 00:10:50.639
Okay.
00:10:50.799 --> 00:10:53.519
Um not like a full audit trail undo kind of a thing.
00:10:53.759 --> 00:10:59.919
Um in other words, you couldn't like uh there's been some plugins that have a complete uh undo, redo, whatever they call that.
00:11:00.159 --> 00:11:02.320
I I remember because I presented FM Data Guard when you're at data.
00:11:02.559 --> 00:11:03.279
Data Guard, that's the one.
00:11:03.440 --> 00:11:03.600
Yes.
00:11:03.679 --> 00:11:03.759
Yeah.
00:11:03.840 --> 00:11:05.600
So it's a long time ago that I presented it.
00:11:05.759 --> 00:11:06.399
It was a long time ago.
00:11:06.480 --> 00:11:07.120
So this wasn't that.
00:11:07.200 --> 00:11:11.200
This was basically like a uh you'd be able to put logs in plain English.
00:11:11.440 --> 00:11:17.759
So what it what it was was a uh table that you could either have in your main file or its own separate data file.
00:11:18.159 --> 00:11:27.120
And then it run typically uh you would call it on um on object save, so which is my favorite of the triggers from a field.
00:11:27.360 --> 00:11:48.879
Um and so when a user saves a record or saves a you know, either um uh a field by clicking out of it, so field by field edit, it would call script server side and send JSON to it with the ID, the primary key, the name of the table, um, and the whatever else you want to log about that particular event.
00:11:49.279 --> 00:11:53.759
So you'd so you would put in um you know kind of an English description.
00:11:53.840 --> 00:12:00.960
And on a layout, if you wanted to add it to the whole layout, you um would make and it could also track a lot of other get stuff too.
00:12:01.120 --> 00:12:01.279
Right.
00:12:01.440 --> 00:12:05.120
Um that you want to like and also it also grab the before value and the after value.
00:12:05.279 --> 00:12:05.519
Okay.
00:12:05.679 --> 00:12:07.919
Um because you could have a trick uh trigger running out enter.
00:12:09.120 --> 00:12:09.360
Yeah.
00:12:09.519 --> 00:12:14.240
A script with one line of code that basically sets a variable to what the value is when you click into it.
00:12:14.720 --> 00:12:20.960
And then when you click out to save, then it says, oh, okay, well, it was there a previous value, go grab those and make one record for it.
00:12:21.200 --> 00:12:22.399
Okay, and then it would do the diff and the game.
00:12:22.639 --> 00:12:23.759
Yeah, so this is what that used to do.
00:12:24.159 --> 00:12:24.799
Oh, okay, okay.
00:12:24.960 --> 00:12:30.480
Um and that was used by many uh over the years, tons of people downloaded it and used it.
00:12:30.720 --> 00:12:33.279
So uh along comes AI.
00:12:33.600 --> 00:12:42.559
And what I've been doing, all of this work I've been doing like crazy, is been is building this thing that maybe you could call a sidecar or function as a service or something like that.
00:12:42.639 --> 00:12:50.399
So I'm in love with this uh website called Fly.io, which is runs a Linux, a dedicated little Linux instance that runs Docker, essentially.
00:12:50.879 --> 00:12:55.840
And it's uh can wake up in under a second, or it can be always on.
00:12:56.080 --> 00:12:56.320
Okay.
00:12:56.559 --> 00:13:01.120
It's crazy inexpensive to run, like a dollar a month, even for something.
00:13:01.279 --> 00:13:04.960
Uh and it has its, you can you can customize and run whatever stuff you want on it.
00:13:05.039 --> 00:13:08.320
So what I've done for this one, my product's called Clio, Clio log.
00:13:08.639 --> 00:13:10.399
All my things are Greek names.
00:13:10.639 --> 00:13:34.080
Um it um on a trigger in FileMaker, for example, on ObjectSave, um, it runs a script in FileMaker like the other one, but then what it does is an insert from URL, it does uh an API call that calls out to this dedicated little server and it sends JSON to it, and that logs it in a uh to a SQL database.
00:13:34.399 --> 00:13:34.720
Okay.
00:13:35.200 --> 00:13:43.919
Um and though there's a whole WebViewer application that's part of it that gives you all of the AI features to analyze the log.
00:13:44.000 --> 00:13:45.679
It gives you a regular old log view.
00:13:45.919 --> 00:13:46.240
Right.
00:13:46.480 --> 00:13:50.960
And it also gives you um an automated understanding of the log.
00:13:51.200 --> 00:13:53.440
Like it just kind of figures out what's going on from a day.
00:13:53.679 --> 00:13:54.000
Cool.
00:13:54.320 --> 00:13:57.600
Um and it has uh rules you can set up.
00:13:57.840 --> 00:14:01.039
And the rules can look for things that happen or things that don't happen.
00:14:01.360 --> 00:14:05.360
So like if a if a user doesn't log in for two days, you can get an alert.
00:14:05.440 --> 00:14:07.360
So you can set up a Slack alert or something like that.
00:14:07.679 --> 00:14:09.360
What would trigger that two-day alert?
00:14:09.679 --> 00:14:10.879
Well, basically you'd have a rule.
00:14:10.960 --> 00:14:15.519
So it's kind of looking for things, and all the rules are written and they run in Python or something like that, right?
00:14:15.840 --> 00:14:18.879
But I mean, like what there's got to be something that is executing that rule.
00:14:18.960 --> 00:14:20.799
What executes in the absence of an event?
00:14:21.120 --> 00:14:27.840
So when whenever a log uh record gets made, um when it calls, it kind of cues it up in case there's a ton of them hitting it once.
00:14:28.559 --> 00:14:35.679
Um and this is all this was all like generated with a huge amount of AI code, and I did a lot of testing on it.
00:14:35.759 --> 00:14:39.440
So I don't actually modify and read the the code underneath it.
00:14:39.600 --> 00:14:39.679
Okay.
00:14:40.000 --> 00:14:40.799
Full disclosure.
00:14:41.200 --> 00:14:42.720
Um I just test what it does.
00:14:42.879 --> 00:14:43.039
Right.
00:14:43.200 --> 00:14:45.840
I trust the input and output from huge amounts of testing on it.
00:14:46.080 --> 00:14:46.399
Okay.
00:14:46.559 --> 00:14:48.960
Um it's a free tool, by the way, no guarantee.
00:14:49.120 --> 00:14:54.080
So um uh let's see, to continue on that.
00:14:54.559 --> 00:14:58.320
My question was like, how do you take some action in the absence of an event?
00:14:58.639 --> 00:15:03.360
So since this thing is always on, you can say it was a Docker thing that wakes up at the end of the day.
00:15:03.519 --> 00:15:14.960
Yeah, so but but it's on like when you're interacting with it, when you go into the web viewer that runs the that's the Clio interface, which you can put in a web viewer on your application, or you can just run it entirely out of FileMaker on a web viewer.
00:15:15.120 --> 00:15:20.080
So someone, you know, a database director or whatever outside of who doesn't have a file maker account can actually use this.
00:15:20.320 --> 00:15:20.639
Okay.
00:15:20.799 --> 00:15:23.919
Um it just has a secure URL and uh like a login.
00:15:24.639 --> 00:15:32.000
Um uh so there's one URL for that, and there's another URL that gets called every time a log record gets made.
00:15:32.240 --> 00:15:32.559
Okay.
00:15:32.799 --> 00:15:44.080
Um and so I talked about on object save, but the way that it kind of comes by default is it does use on um I already forgot the name of the trigger that runs basically on window transaction.
00:15:44.240 --> 00:15:44.879
On window transaction.
00:15:44.960 --> 00:15:45.120
Thank you.
00:15:45.279 --> 00:15:45.919
I already forget it.
00:15:46.080 --> 00:15:46.240
Yeah.
00:15:46.399 --> 00:15:51.039
Um so that one's great because it captures everything from every way you can do it.
00:15:51.200 --> 00:15:57.679
Create a record, delete a record, delete a whole bunch of records, import a bunch of records, anything, everything from GoPro and WebDirect.
00:15:57.919 --> 00:15:58.399
Yes.
00:15:58.639 --> 00:16:00.960
But not API calls.
00:16:01.919 --> 00:16:04.240
Not API calls unless they call a script.
00:16:04.480 --> 00:16:07.919
Unscripted API calls uh are not are excluded from the approach.
00:16:08.080 --> 00:16:08.480
Oh, that's right.
00:16:08.559 --> 00:16:09.039
Yeah, yeah, yeah.
00:16:09.279 --> 00:16:11.679
And I think if it's server script, I don't know if it does that.
00:16:12.080 --> 00:16:19.840
Many, many tools out there, uh, you know, when they're like many web applications that are front ends to FileMaker often work by just calling scripts in FileMaker.
00:16:20.000 --> 00:16:22.960
If you're calling scripts in FileMaker, the on-window transaction will fire.
00:16:23.200 --> 00:16:28.960
But if the web application is just making direct OData or data API calls, actually I don't know about data API.
00:16:29.279 --> 00:16:29.840
Yeah, I'm not sure.
00:16:30.080 --> 00:16:33.919
I know I know for sure that currently I filed that as a bug with FileMaker.
00:16:34.080 --> 00:16:39.519
Uh if you make uh a direct OData modification call, it won't fire an on-window transaction.
00:16:39.759 --> 00:16:46.080
So there are some sideways around it, but yeah, I think that FileMaker has decided to do that for performance reasons.
00:16:46.720 --> 00:16:47.600
Yeah, yeah, yeah.
00:16:47.840 --> 00:16:57.519
Um so but it actually one of the other things that FMlog did was it also was supposed to run on login and logout, so it tracked duration of a session.
00:16:57.679 --> 00:17:03.840
It would track if the session failed, like if a user had to force quit FileMaker or something like that by not having a logout.
00:17:04.319 --> 00:17:08.160
Um and then I also put it in really heavily for any kind of scripting.
00:17:08.319 --> 00:17:24.720
So when I like if you're trying to debug a script that runs server-side at many different places in it, you can just put, you can copy and paste the script that calls the log and say, I'm starting, I'm about to start the loop, I finished the loop, here was the output of what the loop was, here how many records it was, here's the next layout, blah, blah, blah, blah, blah.
00:17:24.880 --> 00:17:25.039
Right.
00:17:25.200 --> 00:17:28.079
Um, because none of those things would otherwise be tracked.
00:17:28.799 --> 00:17:40.799
Um, if you use that along with window transaction, you have a huge loop, then you have a problem because you're actually calling a script every single time you go, uh, and then you have this huge stack of scripts running.
00:17:40.960 --> 00:17:41.119
Right.
00:17:41.279 --> 00:17:42.799
So that would be kind of an issue there.
00:17:42.960 --> 00:17:43.119
Right.
00:17:43.279 --> 00:17:46.000
Because on window transaction cannot be turned off.
00:17:46.240 --> 00:17:46.480
Right.
00:17:46.720 --> 00:17:47.759
There's not a there's not a switch.
00:17:48.079 --> 00:17:52.240
You just have to stick logic at the at the big top of your script that knows when to short circuit itself.
00:17:52.720 --> 00:17:53.759
But it can't.
00:17:54.000 --> 00:17:57.599
You can't, there's not a switch for it on script level or any other level.
00:17:57.839 --> 00:18:01.200
I'm saying if you have a loop or something like that, it just Okay.
00:18:01.440 --> 00:18:01.839
Yeah.
00:18:02.319 --> 00:18:09.440
But I'm just saying like your script would need an if condition at the top that says if like it's this table or this file or whatever like that, then take no action.
00:18:10.000 --> 00:18:15.440
Well, but if it's in a file, then every single layout in that file would fire, period.
00:18:15.680 --> 00:18:15.839
Right.
00:18:16.000 --> 00:18:22.799
And so if you wanted to do a loop that did a bunch of editing, you'd have to use some other write mechanism or have it call to another file that had it.
00:18:22.880 --> 00:18:26.079
So that's the problem with unwindow transactions is certain kind of automation scripts.
00:18:26.480 --> 00:18:33.440
One workaround for that, which does require development changes, is using the uh begin and uh close transactions.
00:18:33.759 --> 00:18:36.960
Because on window transaction is not necessarily per record, it's perfect.
00:18:37.119 --> 00:18:37.599
That's true.
00:18:37.759 --> 00:18:40.160
Oh, and that's one of the other features of Clio, right?
00:18:40.240 --> 00:18:47.839
So one of the things that it does is if you do something like an import or an export or something that stacks up a bunch of things all at once, um, it can send them in batches.
00:18:47.920 --> 00:18:50.400
So it'll send one, like if you do an import records.
00:18:50.640 --> 00:18:52.079
I believe it's every 500 records.
00:18:52.319 --> 00:18:58.079
Yeah, after it imports, it will send one look uh entry, one API call for every 500 or whatever.
00:18:58.319 --> 00:18:58.559
Right.
00:18:58.720 --> 00:19:02.240
Uh and then when they show up in Clio, it actually shows up for individual records.
00:19:02.319 --> 00:19:05.279
So it actually smartly breaks it out so you can see the history.
00:19:05.519 --> 00:19:05.839
Yeah.
00:19:06.160 --> 00:19:20.480
And then when the log record gets made, an event fires, basically there's some logic that happens inside Cleo that compares that particular record's history to any other record edit that's been made for that record for any other field.
00:19:20.559 --> 00:19:24.000
So you can click on any log entry and see the history of that record.
00:19:24.640 --> 00:19:30.319
Um and then regular old simple filtering, you can just go to a thing.
00:19:30.559 --> 00:19:30.720
Right.
00:19:31.039 --> 00:19:41.200
Another super cool feature is if you want to add it to another database, you copy and paste the one script that gets called, you paste it into the other database, and you turn on whatever method you want to log it, and poof.
00:19:41.279 --> 00:19:46.319
And in Clio, it actually just shows up as hey, you've got a log entry from some system that's not the same name.
00:19:46.640 --> 00:19:50.799
Is it part of the other system, like a multi-file database, or is it a whole different database?
00:19:50.960 --> 00:19:51.119
Right.
00:19:51.359 --> 00:19:56.079
And so one central thing can handle any number of file maker databases and tell them apart and name them and all that.
00:19:56.400 --> 00:19:56.960
Very nice.
00:19:57.279 --> 00:19:59.440
And then the the other really cool killer feature, right?
00:19:59.519 --> 00:20:04.240
The the uh rules and um and then just also ask your logs.
00:20:04.319 --> 00:20:10.480
Yeah so you can just go in there and say, you know, how many uh invoices have been edited in the last two weeks.
00:20:11.440 --> 00:20:27.759
That's one of the things that that really kind of like impressed me so much when I was asking Claude about you know the the layout logger tool is that I didn't tell Claude what FileMaker is, I didn't tell it what the get functions do, I didn't tell it any of those things, and I just asked it a question like who modifies records the most?
00:20:27.920 --> 00:20:32.160
And it looks at the record modification count and by it based on the name, it figures that that's what it means.
00:20:32.400 --> 00:20:34.640
And then it'll give me all this analytical information about it.
00:20:34.720 --> 00:20:36.960
It looks like this user modified the record a bunch of times.
00:20:37.119 --> 00:20:41.839
This user ran a loop that modified all the records and within the same like five milliseconds of each other.
00:20:42.000 --> 00:20:48.079
You know, and it's really it is quite striking how good it is at inferring the meaning of all these fields.
00:20:48.400 --> 00:20:50.160
It's almost like it's an inference engine.
00:20:52.000 --> 00:20:54.160
Uh okay, ready for something crazy?
00:20:54.559 --> 00:20:55.440
I'm ready.
00:20:55.759 --> 00:20:58.559
So FileMaker server has this crazy thing.
00:20:58.640 --> 00:21:00.480
It's the command line interface, right?
00:21:01.039 --> 00:21:03.279
So you can actually do things like that.
00:21:03.359 --> 00:21:04.319
Are you talking about FMS admin?
00:21:04.480 --> 00:21:05.440
Yeah, FMS admin, right?
00:21:05.519 --> 00:21:05.599
Okay.
00:21:05.759 --> 00:21:11.039
So you can actually say, uh, you know, run a terminal command that says, hey, show me data in that folder or whatever.
00:21:11.200 --> 00:21:12.319
You can get you can get information.
00:21:12.480 --> 00:21:15.519
Also, if it's running on a Linux box, you can just directly query the OS.
00:21:15.920 --> 00:21:20.160
Well, you can set up a path from the Clio instance wherever it runs.
00:21:20.240 --> 00:21:21.519
By the way, it doesn't have to run on fly.
00:21:21.680 --> 00:21:26.559
It could run on the FileMaker server itself in a Docker, it could run on anything, run on a local computer, it doesn't really matter.
00:21:26.640 --> 00:21:26.720
Okay.
00:21:26.880 --> 00:21:29.599
I I run it on Fly because it's convenient and cheap.
00:21:29.839 --> 00:21:30.160
Right.
00:21:30.799 --> 00:21:33.359
So let's marry up our two products.
00:21:33.519 --> 00:21:33.680
Right?
00:21:33.759 --> 00:21:43.839
If someone like really intents about it, then Clio can actually look for on a periodic basis anything that's happening in the log file that you write, which is JSON, because of course this is all JSON too.
00:21:44.079 --> 00:21:44.240
Right.
00:21:44.400 --> 00:21:46.240
And then marry it up with the actual event.
00:21:46.400 --> 00:21:47.680
So now you're getting both.
00:21:47.839 --> 00:21:48.000
Yeah.
00:21:48.240 --> 00:21:51.920
You're getting all the latent data changes, which I can capture, right?
00:21:52.079 --> 00:21:55.200
And all the entering layouts and user layout, which I can't.
00:21:55.519 --> 00:21:59.599
And so in one thing, you're getting this crazy amount of data in a in an in a
00:22:00.480 --> 00:22:09.920
Because when we call layout log or enable, which is the plugin function that kind of turns it on and starts a tracking, I've been kicking around the idea of making it an optional additional parameter of where to log it to.
00:22:10.160 --> 00:22:10.319
Yeah.
00:22:11.039 --> 00:22:11.920
So currently by the thing.
00:22:12.079 --> 00:22:13.039
You could also just do that, right?
00:22:13.119 --> 00:22:15.119
You could just call make a Clio log with an ALEAL.
00:22:15.279 --> 00:22:15.359
Yeah.
00:22:15.519 --> 00:22:15.680
Yeah.
00:22:15.759 --> 00:22:21.519
I could just basically make it so that when you call layout logger enable, you pass in an optional parameter that says log to Clio at this address.
00:22:21.680 --> 00:22:21.920
Yep.
00:22:22.079 --> 00:22:25.440
Or, you know, I've been thinking about it actually in terms of SQS with Amazon.
00:22:25.599 --> 00:22:28.799
You know, it's like record each event to an SQS record.
00:22:29.680 --> 00:22:30.880
But it would be really nice.
00:22:31.039 --> 00:22:32.960
I have had some people that too.
00:22:33.200 --> 00:22:37.680
I have had some people concerned about the idea of running a FileMaker server-side plugin.
00:22:38.400 --> 00:22:41.119
You know, some people just don't like server-side plugins.
00:22:41.359 --> 00:22:45.920
And I tell them, you know, Layout Logger is literally not doing anything at all with FileMaker server.
00:22:46.000 --> 00:22:48.960
It's literally just listening on an HTTP port and appending to a text file.
00:22:49.440 --> 00:22:55.599
But if there's any kind of a security breach that can be taken advantage of in the server, then that's that's kind of the attack surface, right?
00:22:56.000 --> 00:23:00.079
So I I still feel like the way Layout Logger works should be the default way.
00:23:00.240 --> 00:23:07.039
You know, there's a server-side plugin that gathers data and client-side plugin that gathers data and a server-side plugin that stores it.
00:23:07.119 --> 00:23:07.440
Yep.
00:23:07.599 --> 00:23:19.279
But it would be really nice for the people that would rather not run a FileMaker plugin on their server to have an option to say, okay, instead of reporting this to the FileMaker server plugin, report it to Clio or to SQS.
00:23:19.599 --> 00:23:21.200
Clio's completely open source.
00:23:21.359 --> 00:23:23.759
So you could actually just take it and do whatever you want.
00:23:24.079 --> 00:23:24.480
That's cool.
00:23:24.799 --> 00:23:24.960
Yeah.
00:23:25.039 --> 00:23:27.279
And then just take advantage of the hundreds of hours or whatever.
00:23:27.519 --> 00:23:39.519
That one I didn't have hundreds of hours of work in, like some of the other things I've been doing, but many, many hours of coding and testing and making the interface look good and setting up the you know all the features that make it convenient and use.
00:23:39.759 --> 00:23:43.039
Yeah, it's uh creating creating tools with AI.
00:23:43.359 --> 00:23:52.960
Uh you get the super big rush of feel what feels like after you do the first prompt and you put three prompts in and you get something that looks like it's 60 or 80% done.
00:23:53.119 --> 00:23:53.599
Yeah.
00:23:53.920 --> 00:23:55.279
It's 15% done.
00:23:55.519 --> 00:23:55.839
Yeah.
00:23:56.319 --> 00:23:56.559
Yes.
00:23:56.799 --> 00:23:58.319
You know, there's a huge amount of time.
00:23:58.400 --> 00:24:04.079
And then the last 5% is a lot of time with AI.
00:24:04.240 --> 00:24:06.240
Much more, I think, than if you just did it with FileMaker.
00:24:06.559 --> 00:24:12.400
Going off of the technical track, if I can detour for just a moment, I've recently discovered Midjourney.
00:24:12.559 --> 00:24:12.880
Yeah.
00:24:13.039 --> 00:24:15.759
And, you know, I am a big fantasy role-playing game fan.
00:24:15.839 --> 00:24:20.480
I've loved Dungeons and Dragons since I was a kid, and I still play with a lot of my friends since when I was a kid.
00:24:20.720 --> 00:24:24.559
And it's really, really fun for me to use Midjourney to put that stuff together.
00:24:24.720 --> 00:24:31.279
And it's amazing how much time it takes to kind of instruct the AI on exactly what you want and tweak it and tweak it and tweak it.
00:24:31.359 --> 00:24:31.440
Yeah.
00:24:33.599 --> 00:24:34.640
You can kind of endlessly do it.
00:24:34.720 --> 00:24:36.559
And just like art, you have to know when you're done.
00:24:36.799 --> 00:24:37.200
Yeah.
00:24:37.519 --> 00:24:39.519
Um Yeah.
00:24:39.599 --> 00:24:41.200
And then, you know, one thing leads to another.
00:24:41.279 --> 00:24:44.240
Like every time you have an idea of something, like you can do that.
00:24:44.319 --> 00:24:50.880
Like one of the other things I thought of was can was actually syncing this with the server logs, which also capture a lot of stuff.
00:24:51.119 --> 00:24:51.359
Right.
00:24:51.519 --> 00:24:54.640
Those capture logins and logouts and server backups and server events.
00:24:54.720 --> 00:24:57.440
And and you could marry all three of those things up.
00:24:57.599 --> 00:25:04.880
Pretty, pretty uh, I don't think I would want to append to the server logs, but I think it would be not append, but like or or mix in.
00:25:04.960 --> 00:25:05.119
Yeah.
00:25:05.279 --> 00:25:05.839
I don't think it would be.
00:25:06.079 --> 00:25:07.759
No, AI told me it didn't want to do that either.
00:25:08.000 --> 00:25:15.759
Yeah, I don't like the idea of one log file with all that stuff, but I do love the idea of giving like eight different log files to Claude and saying these all have timestamps in them.
00:25:16.319 --> 00:25:22.240
So match up all the timestamps, and now you know what's happening from this angle, this angle, and this angle all at the same exact moment.
00:25:22.400 --> 00:25:24.240
Like for instance, another good one is top call stats.
00:25:24.400 --> 00:25:26.000
Yeah, and I was just gonna bring that up, right?
00:25:26.240 --> 00:25:29.039
Because if you turn that on, then you're getting a gigantic amount of data.
00:25:29.200 --> 00:25:29.359
Right.
00:25:29.519 --> 00:25:31.759
Like imagine if you're really trying to look for something.
00:25:31.839 --> 00:25:32.000
Right.
00:25:32.240 --> 00:25:35.599
You could turn on Cleo, uh, your logging tool.
00:25:35.759 --> 00:25:36.319
Layout logger, yeah.
00:25:36.480 --> 00:25:41.200
Yeah, layout logger, plus top call stats, and you get like you would have the world on the colour.
00:25:41.680 --> 00:25:47.200
And of course, AI would easily be able to the hard thing with top call stats is it doesn't give you like here's the username and here's the name of the layout.
00:25:47.359 --> 00:25:48.880
No, it's not user IDs.
00:25:49.200 --> 00:25:49.359
Yeah.
00:25:49.519 --> 00:25:52.400
But but yeah, but AI can just reference that.
00:25:52.640 --> 00:25:52.880
Yeah.
00:25:53.440 --> 00:25:53.680
Yeah.
00:25:53.920 --> 00:25:54.160
Yeah.
00:25:54.240 --> 00:25:55.359
And then use some tool.
00:25:55.440 --> 00:25:58.480
Well, Clio Clio would be very easily since it's open source.
00:25:58.559 --> 00:26:01.839
Um, anything you wanted to add to it, you would just basically go in and prompt it, right?
00:26:02.240 --> 00:26:07.359
It's built specifically to be uh to be extended in whatever way you want by prompts.
00:26:07.519 --> 00:26:13.519
I've cut like little stubs of all the different areas that I could think of that you might want to go so that they're you can just kind of plug into them.
00:26:13.759 --> 00:26:14.400
Of course, you know.
00:26:14.720 --> 00:26:15.920
And that's in Python?
00:26:16.240 --> 00:26:18.799
Uh no, it's mostly not.
00:26:19.119 --> 00:26:21.680
Um is it Node?
00:26:22.319 --> 00:26:27.680
Yeah, it's it's Node and JS, but but I don't I don't really look at the stack, so I kind of don't care.
00:26:27.759 --> 00:26:29.599
It's like a platform agnostic.
00:26:29.680 --> 00:26:36.319
Like, you know, I'm I'm sort of like in the in the seat of a customer that says, I want you to do a thing and it needs to solve this problem.
00:26:36.480 --> 00:26:38.319
And I don't care if you use FileMaker.
00:26:38.480 --> 00:26:38.720
Right.
00:26:38.880 --> 00:26:42.960
You know, from the customer's perspective, they just yeah, so I'm the customer in this case.
00:26:43.200 --> 00:26:44.640
I haven't gotten to that point with AI yet.
00:26:44.799 --> 00:26:45.680
Yeah, I'm definitely there.
00:26:45.839 --> 00:26:55.759
Starting November last year, uh-huh when uh I think it was Opus 4.8 came out, all of a sudden it it crossed a hill.
00:26:56.160 --> 00:26:58.880
It reached the top of a hill of trust.
00:26:59.200 --> 00:27:04.640
And since then we've been we've been starting to coast and pick up speed of the ability to completely trust.
00:27:04.880 --> 00:27:06.160
Trust but verify, right?
00:27:06.400 --> 00:27:07.039
Right.
00:27:07.519 --> 00:27:12.319
Um, I still care very much about the technology being used.
00:27:12.400 --> 00:27:19.680
And I I write most of the code myself, and then I get AI to like document it, test it, do some of the tedious parts.
00:27:20.000 --> 00:27:27.680
Sometimes what I'll do is I'll write a stub of a method, you know, I'll say, this takes these eight inputs, and here's the documented behavior, now fill in the implementation.
00:27:27.920 --> 00:27:28.160
Yeah.
00:27:28.319 --> 00:27:33.839
Um, which is nowhere near what you're doing with it, but I'm just not quite at that point yet where I'm like, I don't care what language is.
00:27:34.240 --> 00:27:36.160
Well, you're an expert Java developer.
00:27:36.480 --> 00:27:36.640
Yes.
00:27:36.960 --> 00:27:40.400
Yeah, so and I I don't know, I guess I should say I'm an expert file maker developer.
00:27:40.559 --> 00:27:43.920
I wouldn't yet trust file um to run to write all my file maker code.
00:27:44.000 --> 00:27:46.559
I can see it, I can understand that I I completely get it.
00:27:46.880 --> 00:27:47.359
Right.
00:27:47.599 --> 00:27:56.400
But for writing things that are out of FileMaker, API calls, I'll give you a specific things like that, I then I I I'm I'm okay with it as long as I can totally verify the input and output.
00:27:56.640 --> 00:28:17.519
I'll give you one specific example of where I uh were asking AI to do something that I didn't oversee closely enough really blew up on me, um, which is so Layout Logger, uh, and this gets a little bit into the technical weeds, but Layout Logger originally uh, so it gets called 20 times a second on every client.
00:28:17.680 --> 00:28:17.839
Yeah.
00:28:18.160 --> 00:28:20.079
And for the most part, that's no problem at all.
00:28:20.240 --> 00:28:24.799
But there was one thing I was doing really wrong, which was one of the get functions I was calling was get user count.
00:28:25.039 --> 00:28:29.359
And every time you call get user count, it makes a round trick to FileMaker server to get the user count.
00:28:29.519 --> 00:28:39.200
Yeah, so that meant that I each connected client was calling FileMaker server 20 times a second getting the user count, which you know was fine in my testing with my one laptop.
00:28:39.519 --> 00:28:41.680
I wouldn't even think yeah, on single user.
00:28:41.920 --> 00:28:42.319
Yeah, yeah.
00:28:42.559 --> 00:28:44.400
Yeah, where it isn't, it wasn't even a call.
00:28:44.640 --> 00:28:50.799
Yeah, no, I mean, I mean I was testing with a hosted file, and the load from one user was not enough for me to notice.
00:28:51.039 --> 00:28:55.759
But uh, but I showed it to Clay, and Clay pointed out that this you know is uh could be a real problem.
00:28:55.920 --> 00:28:56.079
Yeah.
00:28:56.240 --> 00:29:01.200
So then I went to uh to Claude and I said, okay, take out the calls to get user count.
00:29:01.359 --> 00:29:05.359
You know, let's just do those once when we connect in or maybe once a minute.
00:29:06.079 --> 00:29:18.160
And so um so what Claude did, uh and I don't remember which model I was using, maybe I wasn't using a smart enough model, um, but what Claude did is it simply stopped reporting the results of the get user count.
00:29:18.400 --> 00:29:18.799
Oh, yeah.
00:29:18.960 --> 00:29:22.880
Uh but it was still calling it 20 times a second, and I shipped a version of that.
00:29:23.039 --> 00:29:33.119
Yeah, and then I had to kind of quickly, once I found out while I was hand coding a different part, and I happened to look at the get functions we're calling, I'm like, why is get user count still in there?
00:29:33.279 --> 00:29:37.119
And then I realized that it was still calling it and just discarding it because it thought I just didn't care about it.
00:29:37.200 --> 00:29:37.599
Unless it's a lot of people.
00:29:37.759 --> 00:29:38.960
That's the kind of thing that can happen.
00:29:39.200 --> 00:29:46.319
Yeah, so I feel I still feel like it is really pretty important to know what it's doing.
00:29:46.720 --> 00:29:51.440
And I I can't I can't empirically measure the performance impact.
00:29:51.519 --> 00:29:53.920
So I can't tell that it's doing that.
00:29:54.000 --> 00:29:56.400
That's something that you have to I have to look at the code to know.
00:29:56.799 --> 00:30:01.039
But I mean you could actually have Claude write a program to empirically test it.
00:30:01.359 --> 00:30:07.279
Or even better, you know, have uh have you know uh some other model test it.
00:30:07.359 --> 00:30:11.039
So I I definitely have two completely different models look at all of my code.
00:30:11.200 --> 00:30:28.079
You know, I'll have, you know, I'll go into OpenAI's latest, greatest model and say, here's my here's my repo, find flaws with it and and report them back and assign a task to the cloud agent to fix it so the two of them have a conversation.
00:30:28.400 --> 00:30:33.359
But the only way this could be empirically found is if I had many file maker clients all running at the same time.
00:30:33.680 --> 00:30:33.839
Right.
00:30:33.920 --> 00:30:34.640
Yeah, yeah, that would be.
00:30:34.880 --> 00:30:36.559
And that would be possible to stage.
00:30:36.640 --> 00:30:40.079
We've done it before for mirror sync testing, but it was a it was a beast to set it up.
00:30:40.319 --> 00:30:41.359
Yeah, yeah, yeah, I would bet.
00:30:41.519 --> 00:30:41.680
Yeah.
00:30:41.920 --> 00:30:43.920
So you know, that level would be hard to do.
00:30:44.079 --> 00:30:56.079
Plus also, you know, you're when you're writing JavaScript stuff, Python stuff, there's millions or billions of hours of developer time that OpenI models can cross-reference.
00:30:56.240 --> 00:30:56.400
Right.
00:30:56.559 --> 00:31:03.119
When you're when you're writing uh file maker plugin code, um, it's not that's that's true.
00:31:03.279 --> 00:31:03.839
That is definitely true.
00:31:03.920 --> 00:31:06.000
There's a small lesson.
00:31:06.400 --> 00:31:08.559
A lot fewer lines of code for it to plagiarize from.
00:31:08.880 --> 00:31:16.400
Yeah, I mean there's obviously jillions of lines of Java code, yeah, but it's not cross-referenced with the docs of what uh right.
00:31:16.559 --> 00:31:18.480
It doesn't know specifically the get user count.
00:31:19.279 --> 00:31:21.519
But you would have a code, you would probably have a channel.
00:31:21.680 --> 00:31:24.079
You know, you'd have a project inside Cloud Code.
00:31:24.240 --> 00:31:24.319
Right.
00:31:24.559 --> 00:31:26.319
By the way, Cloud Code does everything cowork does.
00:31:26.480 --> 00:31:27.440
It works on a folder.
00:31:27.599 --> 00:31:29.440
They've been editing, they've been adding the features.
00:31:29.599 --> 00:31:32.160
For a while, you could only do it in the command line version in terminal.
00:31:32.240 --> 00:31:32.640
Oh, okay.
00:31:32.880 --> 00:31:35.839
But now the the desktop app has all of it.
00:31:36.079 --> 00:31:36.400
Okay.
00:31:36.640 --> 00:31:42.880
So it'll run local folders, it'll run run the computer, it'll spin up and you know, control a browser or control other applications.
00:31:42.960 --> 00:31:43.680
You can watch it work.
00:31:43.839 --> 00:31:44.000
Okay.
00:31:44.160 --> 00:31:45.519
So it has computer control.
00:31:45.680 --> 00:31:49.200
Um, it'll directly deploy, so it can run terminal commands on anything.
00:31:49.359 --> 00:31:49.920
Right.
00:31:50.160 --> 00:31:55.759
Um so uh, you know, I use it to control my AWS server, uh, control my FileMaker server.
00:31:55.920 --> 00:31:56.319
Right.
00:31:56.480 --> 00:32:02.160
Uh uh use you know other other new things that are coming that we we've seen here at the conference, which are exciting as hell.
00:32:02.319 --> 00:32:11.839
Which by the way, I think the new things that are coming are gonna have a bigger impact on FileMaker developers' lives than anything since FileMaker 7, and I think including FileMaker 7.
00:32:12.079 --> 00:32:15.599
Oh, yeah, the stuff that they showed at the keynote today was definitely very exciting.
00:32:15.920 --> 00:32:16.400
The biggest.
00:32:16.480 --> 00:32:17.359
This is the biggest impact.
00:32:17.839 --> 00:32:18.240
Yeah, yeah.
00:32:18.480 --> 00:32:18.640
Yeah.
00:32:18.799 --> 00:32:20.240
We should have started with that, Jesse.
00:32:20.880 --> 00:32:21.920
We buried the lead.
00:32:22.160 --> 00:32:22.960
We wait till the end.
00:32:23.039 --> 00:32:27.519
Well, I'll have other well, I'm having other conver uh conversations like with other people here.
00:32:28.079 --> 00:32:31.359
Uh this would be so fun to do a little thing together.
00:32:31.440 --> 00:32:38.559
And I love that we've taken completely different approaches to solving very real but very different problems for microdevelopers.
00:32:40.319 --> 00:32:43.599
Yeah, it's um Yeah, I agree.
00:32:43.839 --> 00:32:44.400
Yeah, fun.
00:32:44.640 --> 00:32:45.519
Thanks for your time.
00:32:46.960 --> 00:32:47.920
Glad to be on the show.