Aaron
00:00:00 – 00:00:06
Okay.
Here we go.
Just just, Colleen and Aaron today.
Sean is traveling to work.
Colleen
00:00:06 – 00:00:09
He's in San Diego?
Oh, he's there.
Yeah.
I'm gonna see him tomorrow.
Aaron
00:00:10 – 00:00:16
Oh, no way.
This is the second time, I think, that he's traveled out there, and y'all have gotten to hang out.
Right?
Colleen
00:00:16 – 00:00:21
I know.
It's super awesome that his stage app brings him to where I live.
It's nice.
Aaron
00:00:21 – 00:00:39
He actually he texted me, I think, on Sunday, and said waving from the DFW airport.
And I was like, oh, man.
I get I get the airport stopovers, and you get to actually hang out with him.
So sucks for me.
So what's going on?
Aaron
00:00:39 – 00:00:42
What's going on in, I guess, client world?
Colleen
00:00:42 – 00:00:53
Yeah.
I so this isn't actually client world, but I did get, the back end of the repo pulled out for Jesse for Bento so they could play a trumpet.
Aaron
00:00:53 – 00:00:54
I saw that.
Colleen
00:00:54 – 00:01:02
It was really interesting because it took me a lot longer than I thought it would, which was, a good it's not bad, but it was good exercise.
Aaron
00:01:02 – 00:01:06
It was against the explicitly stated goal that we wouldn't spend too long on it.
Colleen
00:01:07 – 00:01:15
Yeah.
But, you know, I had that individual pursuit time on Thursday night.
So, I did it during my individual pursuit time.
Aaron
00:01:15 – 00:01:15
Love that.
Colleen
00:01:16 – 00:01:30
I think it was I think it was a really good exercise to actually pull it out to see how much work was involved.
I've ran into, like, a couple little things that we knew we were gonna run into, but I have forgotten.
For example, our tests are our tests are right now database specific.
Aaron
00:01:30 – 00:01:31
Mhmm.
Colleen
00:01:31 – 00:01:35
So I spun up a new Rails app with Postgres because that's what I do as default.
Aaron
00:01:36 – 00:01:36
Yep.
Colleen
00:01:36 – 00:01:38
And then I dumped our code in, and I was like, oh.
Aaron
00:01:38 – 00:01:41
And all the grammar was different.
And yeah.
Yeah.
Colleen
00:01:41 – 00:01:51
And none of the tests work.
So that was fine.
Obviously, that's easy to fix.
But it was just like little things like that Mhmm.
That I ran into.
Colleen
00:01:51 – 00:02:11
So it was really good to see that.
And just some things I have added into the client's repo, like testing libraries and making sure I get everything out the way I want it to be.
And so hopefully, I have given him enough information that they can get started.
Did you watch those videos I sent him?
Aaron
00:02:12 – 00:02:13
No.
I didn't.
Colleen
00:02:13 – 00:02:21
Okay.
They're short.
I sent him little overview videos.
I also have an hour long video about track's pending relationship subqueries, but I didn't send him that.
Aaron
00:02:21 – 00:02:25
I I do.
Send me that.
I wanna watch that.
Colleen
00:02:25 – 00:02:33
No.
It's just like me.
It's like my stream of conscious.
Like, I'm gonna I'm gonna walk through this, so I have it all sorted out.
Aaron
00:02:33 – 00:02:35
Wait.
Where did you send these videos?
Is it in the They're
Colleen
00:02:35 – 00:02:37
in the GitHub repo in the repo.
Aaron
00:02:37 – 00:02:42
Oh, okay.
I was checking our DMs.
No.
I didn't see that.
I will go watch those.
Colleen
00:02:42 – 00:02:54
Yeah.
It was 9 o'clock at night.
So they were they're a little stream of conscious.
But, I hope that I'm I'm really curious to see what they're able to do with it.
Now I am so familiar with it.
Colleen
00:02:54 – 00:02:59
You obviously have this problem too that it makes total sense to me.
And then
Aaron
00:02:59 – 00:03:00
Yeah.
Colleen
00:03:00 – 00:03:09
I'm trying to impart that information to a third party who has never seen it.
And I'm really curious to see how that works out.
Aaron
00:03:09 – 00:03:18
Yeah.
I really wanna see this 1 hour tracks pending subqueries thing that I think that would make me so happy.
Colleen
00:03:18 – 00:03:29
I feel like it's very, like, I'm just like, oh, and now we go here.
Now we do this.
But, I I it's nice to have it to reference when I get when I'm like, wait, what does this data structure do?
Aaron
00:03:30 – 00:03:35
Yeah.
And when we hopefully one day write it in another language, it'll be nice to have that.
Colleen
00:03:35 – 00:03:36
Yeah.
Aaron
00:03:36 – 00:03:39
Recorded somewhere.
Have you heard anything from Jesse?
Colleen
00:03:39 – 00:03:42
I have not.
And then he said
Aaron
00:03:42 – 00:03:44
a couple days ago, like, oh, we're getting started on it.
Colleen
00:03:44 – 00:04:01
I feel like it was just yesterday or the day before.
It was recently.
So I haven't heard anything.
But the great thing is I was gonna pull the front out.
The reason it took so long is I was originally gonna pull the front out front end and the back end out and put them in a new Rails app and have a complete package.
Aaron
00:04:02 – 00:04:03
Mhmm.
And I
Colleen
00:04:03 – 00:04:09
started to pull the front end stuff out, and it's pretty heavily entwined with the client work.
Aaron
00:04:09 – 00:04:10
Mhmm.
Colleen
00:04:10 – 00:04:33
And it's just a lot, in terms of the way the client is stabilizing.
Because, like, what the client does with Hotwire is every time you you enter something in the text box, like, on a debounce.
So not when you hit enter.
Like, every time you enter something debounced, we're stabilizing we're providing a new stable ID.
Oh, really?
Colleen
00:04:33 – 00:04:45
Yeah.
So what's hap so the JavaScript for it is like a lot.
Yeah.
So every time on the front end with the client now, the user starts typing.
For example, in the text box, we stabilize.
Colleen
00:04:46 – 00:04:48
I have an AJAX request that goes to stabilize that.
Aaron
00:04:48 – 00:04:51
Is it just URL encoded stabilization for Valorantica?
Colleen
00:04:51 – 00:05:25
That's why.
It's URL encoded stabilization, and then the, then our stimulus controllers, our JavaScript, sends an event saying this filter has been stabilized, then the bullet train specific filter partial listens for that event and, does some does some more magic.
And then when you hit apply, you just take if if your state has a URL encoded stabilized ID, you just push to that URL.
So it Say
Aaron
00:05:25 – 00:05:27
that again.
The last part, you just push to that URL?
What is
Colleen
00:05:28 – 00:05:40
Of the stable ID.
Yeah.
We just you just the way they apply it is the way it is applied is it's not another round trip to the server.
It's I already have the filter stabilized.
It has not changed.
Colleen
00:05:41 – 00:05:48
So apply is just, like, push state to force that filter to render on the page.
Aaron
00:05:48 – 00:05:50
Gotcha.
Okay.
Colleen
00:05:50 – 00:05:54
And anyway, that isn't It's
Aaron
00:05:54 – 00:05:55
very specific.
Colleen
00:05:55 – 00:06:01
Yeah.
It's like I was trying to pull it out, and then I needed, you know, all this other stuff, and he's not even using turbo hot water.
Aaron
00:06:01 – 00:06:02
Not even using yeah.
Colleen
00:06:02 – 00:06:30
And so I was like, this is a I'm spending too much time because oh my gosh.
Trying to pull up like, all of the events that this that that's going on in the front end in our JavaScript right now.
Like, there's a lot going on there in terms of the people who are listening to the events and pushing and, so it's almost it's actually, you know, almost working, but I didn't wanna send him to send him that one because I am not sure how much of that is client specific.
Aaron
00:06:30 – 00:06:31
Right.
Colleen
00:06:31 – 00:06:43
And so I wanna be I think I told you that.
Do not share that repo with anyone.
I don't think it's client specific, but I don't want to share it.
And I, he doesn't care because he's not using it.
He
Aaron
00:06:43 – 00:06:44
doesn't care.
Colleen
00:06:44 – 00:07:00
And it seems and it seemed more complicated than it was worth for, like, a basic query builder, that whole turbo situation.
So back end's out.
Good news is Sean can we can try and get Vue set up now Mhmm.
Because it should theoretically just work.
So that's cool.
Aaron
00:07:00 – 00:07:16
Yeah.
That's super cool.
That is what I have been doing is we got it integrated last week, and now I'm working on the couple of sticking points between the 2.
And it's like, I've got it in a browser here.
It's it's working.
Aaron
00:07:17 – 00:07:20
Awesome.
I know.
It's super great.
Colleen
00:07:20 – 00:07:20
So great.
Aaron
00:07:21 – 00:07:47
And I'll tell you what, like, it is so nice to have both of them together in a little playground where I can make changes to both of them and, like, NPM will earn yeah.
Node will run and compile everything again, and I don't have to, like, push and redownload.
It's just like, oh, this is wrong in the JavaScript.
I can change this.
This is wrong in the PHP.
Aaron
00:07:47 – 00:07:50
I can change this, refresh.
Now it works.
Colleen
00:07:50 – 00:07:51
That's awesome.
Aaron
00:07:51 – 00:07:54
It's so fast and so amazing.
Colleen
00:07:54 – 00:07:55
Nice.
Aaron
00:07:55 – 00:08:20
So, yeah, I'm feeling really good about that.
The thing I've been working on is getting so with, with the Vue front end, we want to be able to let the developers choose, like, what components are rendered.
Colleen
00:08:20 – 00:08:20
Okay.
Aaron
00:08:20 – 00:08:53
So, like, when they choose an equals, like, let's say, like, number equals, that equals clause has some component property has a component property attached to it so that we know what to render next to the clause, you know, for number equals the thing that we render next to it is a single number input For numbers between the thing that we render next to it is a double number input.
So that you track
Colleen
00:08:53 – 00:08:54
it a lot?
Yeah.
Yeah.
Aaron
00:08:54 – 00:09:28
So what I've been working on right now is the system to register all of those components.
So that let's say they have a date picker that they really like, and they don't want to use the one that came with the view to front ends that we provide.
I want them to be able to just swap out the date, the single date, and the date between so that they don't have to reinvent the whole front end.
They can just say, actually, I wanna use this date component instead of your date component.
So that's what I've been working on.
Aaron
00:09:30 – 00:10:16
And then, of course, like, if they have custom custom clauses, they need to be able to specify what component to use so that the user can input their data.
And it's great because, like, most of their custom clauses, whatever, you know, whatever they should be, we'll be able to be satisfied by the components that we already ship.
Because we ship, like, text input, number, date, double date, select, you know, you can do with drop downs.
So hopefully, even if people are writing custom clauses and comp or clauses and conditions, they won't have to write any custom front end.
They can just utilize ours.
Aaron
00:10:17 – 00:10:37
So, yeah, it's really, really great.
And I'm super pumped with where we're at right now for, for like the first time in a really long time.
I'm like, this is it, man.
Like, we're going to do this thing.
There's there's been a, there's been a big old lull there in the middle while you guys were working on client.
Aaron
00:10:37 – 00:10:42
And I was like, man, we're never going to get there, but we're back, baby.
I feel like
Colleen
00:10:42 – 00:10:44
we're going to get there.
Yeah.
Aaron
00:10:44 – 00:10:55
I'm super pumped.
It's awesome.
I love it.
It also helps that I got the first proper integration done.
So we are for Keith, it's done.
Aaron
00:10:55 – 00:10:57
Like, I handed it over to him.
Colleen
00:10:57 – 00:10:57
Well done.
Aaron
00:10:57 – 00:11:16
So it's it's a little different because he's not using the front end, which is, you know, fine.
He already has a front end.
Yeah.
So it's not quite the full deal, but it's still, like, I've set him up in our distribution system, which is unlock does dot sh for anyone that wants to distribute private packages.
I've set him up in there with a license.
Aaron
00:11:17 – 00:11:31
He's like composer requiring it.
Like, it's the real deal.
There's no, like, side loading, SIM linking, or anything.
So I got him like set up fully up and running and I handed him his project back and it's
Colleen
00:11:31 – 00:11:32
That's amazing.
Aaron
00:11:32 – 00:11:52
Yeah.
I feel Yeah.
There's a couple a couple of, I don't, I mean, they are big wins, but they're big emotional wins to be like, okay, like this frigging thing works.
And, like, when I handed it over to Keith, I was like, okay.
Here's, like, here's what we got.
Aaron
00:11:52 – 00:12:09
I think, like, I think it's pretty good.
There's still more work that you'll need to do because you have the domain knowledge of your app and you'll need to like finish out some of the fiddly parts.
But this is like, this is what I've got.
This is how far I got.
What do you think?
Aaron
00:12:09 – 00:12:22
And he was like, this is unbelievable.
I'm so moved.
I never thought I would be moved by code.
And I was like, ah, thank goodness.
Because, you know, of course, I felt like, oh, it's not good enough.
Aaron
00:12:22 – 00:12:37
But he was like, no, this is this is ideal.
So super pumped.
Also really glad to have that project off my plate because I was very busy with it.
And Yeah.
It's nice to have some free time back.
Aaron
00:12:37 – 00:12:38
So
Colleen
00:12:38 – 00:12:39
Yes.
Aaron
00:12:39 – 00:12:42
Feeling much better.
Colleen
00:12:42 – 00:12:44
Nice.
That's great news.
Aaron
00:12:44 – 00:13:05
I know.
Man, the the the low, like, while you're just grinding Yeah.
And you're not like, you haven't released, and you're just grinding, and you're like, am I an idiot?
Like like, is this am I very stupid?
Is this never gonna work?
Aaron
00:13:05 – 00:13:19
Am I, like that part is that part's real tough.
I don't love that part.
Yeah.
And I know that the answer is like, oh, just release before you're ready.
But, like, that's kind of
Colleen
00:13:19 – 00:13:45
It's interesting.
So I was talking to a friend of mine at the indie hacker meetup here.
Mhmm.
And he has been in the startup space for a long time.
And he we were talking a lot about Laravel, and he was talking a lot about what you have been telling Sean and I from the beginning, which is it's not an ecosystem in which you want to release just release something that's not very well done.
Colleen
00:13:46 – 00:13:48
And, we talked about it for a while, but but, like, he
Aaron
00:13:48 – 00:13:49
That's interesting.
Colleen
00:13:49 – 00:13:58
Totally agreed with that assertion that, like, within the Laravel ecosystem specifically, that's not a good move.
Aaron
00:13:59 – 00:14:16
Well, that makes me feel better.
That's interesting that that was his perspective as well.
That makes me feel better.
Yeah.
I mean, I like you said, I agree and have been saying that, and it's, I think, doubly tough because of the nature of what we're building.
Aaron
00:14:17 – 00:14:25
One is it's very, it's very technically difficult, and so it's hard to be like, oh, just like we'll just ship it and we'll fix it later.
Colleen
00:14:25 – 00:14:26
It's like,
Aaron
00:14:26 – 00:14:57
oh, this is gonna, like, this could potentially cause some real pain for our users if we're, like, returning things that aren't true.
Like, that's a bad deal.
And then the second thing that's tough is, there's, like, eternal state built into our application.
So, like, once a filter is stabilized and out there in the world, especially with, like, URL encoded filters, there's no getting it back.
Like, you can never get it back.
Aaron
00:14:57 – 00:15:13
You can break it.
You can migrate it, but you can't ever just be like, okay.
That one's invalid.
Like, you just have to, like, have contingency plans for, okay, what if I change an ID?
What if this filter name changes?
Aaron
00:15:13 – 00:15:26
What if this condition goes away?
Because people are gonna come back to their bookmarks, and suddenly everything's broken.
So Yep.
Anyway, life is hard, but I'm feeling so so much better.
Colleen
00:15:27 – 00:15:28
Oh, I'm glad.
That's
Aaron
00:15:28 – 00:15:33
Yeah.
Super encouraging.
And we've got go ahead.
Colleen
00:15:33 – 00:15:34
Oh, no.
Go ahead.
Aaron
00:15:35 – 00:15:38
I was gonna say we've got Dave working on React.
Colleen
00:15:38 – 00:15:38
Right.
Aaron
00:15:39 – 00:15:41
And I think he's starting today.
Colleen
00:15:41 – 00:15:42
Okay.
Aaron
00:15:44 – 00:16:00
So I think we decided gonna give him, a chunk of, like, 50 hours and see how far he gets and then reevaluate.
He's already gotten so far just like dorking around on his own.
So I'm pretty pleased with
Colleen
00:16:00 – 00:16:21
I feel like and then I think that might I think React and rails is gonna be really good together.
I think the turbo is maybe not the best fit the way this has been, done.
But I feel like the React rails is gonna be be really solid.
And a lot of people aren't aren't on the turbo bandwagon yet because it's so new.
So there's that as well.
Colleen
00:16:21 – 00:16:25
So I think that, I think this is gonna be cool.
What I
Aaron
00:16:25 – 00:16:33
think the only thing that could make our client engagement better is if they had been using React from the beginning.
Yeah.
Colleen
00:16:33 – 00:16:34
It definitely is interesting.
They The way
Aaron
00:16:35 – 00:16:42
They have legit reasons for using for not using React.
But, like, in a perfect, perfect world, they'd be using React.
Colleen
00:16:42 – 00:16:43
We would
Aaron
00:16:43 – 00:16:43
have that.
Colleen
00:16:43 – 00:16:44
We'd have that.
Aaron
00:16:44 – 00:16:47
But we'll get it.
We'll we'll get it anyway, so we'll we'll be fine.
Colleen
00:16:47 – 00:16:50
What's your soft launch plan for Laravel with our your list?
Aaron
00:16:50 – 00:17:06
So Our list.
So next week, provided I get this component stuff done, which I am pretty sure that I will.
Next week, at some point, I'm gonna reach out to a couple of the people that have expressed the most interest
Colleen
00:17:06 – 00:17:06
Okay.
Aaron
00:17:07 – 00:17:12
And try to just basically hand hold them through the process.
Colleen
00:17:12 – 00:17:13
See how it goes?
Aaron
00:17:13 – 00:17:19
Kind of yeah.
Kind of 1 on 1, like, alright.
We're in the DMs.
Like, what are you is it working?
Is it not?
Aaron
00:17:19 – 00:17:44
Like, what are your errors?
What are your questions?
So that'll start next week, provided this gets finished.
And then after that, I don't really know because, so if I onboard, you know, 1 or 2 people next week, that puts us into, do do do.
So today is 8th.
Aaron
00:17:45 – 00:17:57
If I reach out to them next week, let's say on 15th, And I spent a couple of days working, getting them integrated.
The week after that is the 20th through 24th.
Colleen
00:17:58 – 00:18:02
Yeah.
So no one's looking that week or really the next week because Or
Aaron
00:18:02 – 00:18:03
next week.
Colleen
00:18:03 – 00:18:06
So you're really looking early January before, you know.
Aaron
00:18:08 – 00:18:26
Yeah.
And so this is a question.
There's there's some notion that, like, nobody's really working that week, but there's also the notion that, like, nobody's really working that week.
So I can do, you know, I can do a bunch of work.
Like, are there people out there who are like, okay.
Aaron
00:18:26 – 00:18:35
Finally, everything's quiet.
I'm gonna do some fun work.
And would this qualify as like, I wanna try this out and see how it goes.
Colleen
00:18:35 – 00:18:36
It might.
Aaron
00:18:37 – 00:18:39
But the yeah.
It's tough because it costs $1,000.
Colleen
00:18:39 – 00:18:48
Yeah.
I feel like the answer my my gut reaction there is the answer is no because no one's just buying it for their side projects.
People are buying it for work That
Aaron
00:18:48 – 00:18:48
is true.
Colleen
00:18:48 – 00:18:50
And they're taking a week off work.
So I think it's
Aaron
00:18:50 – 00:18:51
good to be wants to, yeah.
Colleen
00:18:51 – 00:18:54
Work yeah.
No one wants to do regular work.
Regular work
Aaron
00:18:55 – 00:18:55
Heck no.
Colleen
00:18:55 – 00:18:57
On their on their vacation.
Aaron
00:18:57 – 00:18:58
No freaking way.
Okay.
Colleen
00:18:58 – 00:19:05
So I think realistically yeah.
I don't think so.
So don't feel disappointed if people are like, yeah.
We'll do it in January.
Aaron
00:19:05 – 00:19:07
Yeah.
I don't care about that right now, man.
Colleen
00:19:07 – 00:19:08
Low priority.
Aaron
00:19:10 – 00:19:39
Yeah.
So I think that may be it then.
Just try to get, you know, I'll reach out to several people and as many that wanna take me up, before Christmas, I'm happy to to work with.
I also want to specifically try to not work over Christmas because I worked so much over Thanksgiving on Keith's stuff, which is a whole another, you know, philosophical question.
I'll save for later because we've only got 18 more minutes.
Aaron
00:19:39 – 00:19:40
But
Colleen
00:19:40 – 00:19:40
Okay.
Aaron
00:19:41 – 00:19:54
I don't know.
I'll tease it.
Here's the question, Colleen.
As as the happiest person in in in the Slack, here's the question.
And we can't talk about it now because we don't have enough time.
Colleen
00:19:54 – 00:19:55
I know.
Aaron
00:19:55 – 00:19:55
Here's the question.
Colleen
00:19:55 – 00:19:56
You gotta go.
Aaron
00:19:56 – 00:20:35
How much how much does it make sense to sacrifice now in terms of like time so that you can reach escape velocity later and suddenly have all the time in the world, you know, quote, unquote, versus how much does it make sense to just work the 9 to 5, boring, but you're not like sacrificing Thanksgiving break and weekends and individual pursuit nights.
You're just freaking getting a paycheck and hanging out.
Right?
Colleen
00:20:36 – 00:20:36
Right.
Aaron
00:20:36 – 00:20:58
Because the sacrifice only is only valuable provided you reach escape velocity, because if if you don't reach escape velocity, then you would have been better off just working a 9 to 5 and like dorking around in your free time.
Right?
Colleen
00:20:59 – 00:21:00
You're right.
You're not wrong.
Yeah.
Aaron
00:21:00 – 00:21:01
Think about it.
Colleen
00:21:01 – 00:21:03
I'll think about it.
We'll talk about it next time.
Aaron
00:21:03 – 00:21:07
Yeah.
Dear listener, come back next time.
Hopefully, you'll talk about it.
Colleen
00:21:08 – 00:21:10
You'll have all of your life questions answered.
Aaron
00:21:10 – 00:21:20
I hope so.
As as my guru, I need Colleen to tell me.
The other thing that I want to talk about is this numeric optimization.
Colleen
00:21:21 – 00:21:22
Okay.
Tell me, Tim
Aaron
00:21:22 – 00:21:30
Horton up with, tell me about it.
So been reading, excuse me.
I've been reading these sequel books, right?
Colleen
00:21:31 – 00:21:31
Yes.
Aaron
00:21:31 – 00:21:57
And I actually just got 2 Postgres books because I probably need to know more about Postgres because I know nothing about it.
Yeah.
So I've been reading these sequel books.
And one of the, clever things that they're talking about in terms of indexing is when you use, like, a, let's say, number is between 110.
Right?
Aaron
00:21:58 – 00:22:34
What MySQL is gonna do is it's gonna do, like, a range scan, which is, you know, can be can be index, assisted.
Right?
So if you have an index on that thing, it is index assisted.
However, it is faster and more performant in many cases to say instead of number between 110, to say number n and then do the parenthesis and put 1, 2, 3, 4, 5, 6, 7, 8, 9, 10.
Right?
Colleen
00:22:34 – 00:22:34
Okay.
Aaron
00:22:35 – 00:22:39
So that's called a a multiple equality versus a range.
Colleen
00:22:39 – 00:22:40
Okay.
Aaron
00:22:40 – 00:22:54
Right?
So the multiple equality in my SQL is not evaluated as, like, a equals 1 or equals 2 or equals 3.
Like, it's that's not how it works.
That would suck.
That's no good.
Aaron
00:22:55 – 00:23:05
It's evaluated using it's it's a multiple equality, so it gets to use the indexes.
So it's lightning fast.
Colleen
00:23:05 – 00:23:06
Okay.
Aaron
00:23:07 – 00:23:24
The other benefit is, let's say you have a multipart index.
Wherever and it's like column a, b, and c.
And if you are searching on column b, so it's right there in the middle.
A, b, and c is your index.
Column b is in the middle.
Aaron
00:23:25 – 00:23:54
You're searching on column b, and your criteria for column b is a range.
So you're like a equals 1, b between 110.
So column B is a range.
It can't then take advantage of the third part of the index column c, wherever it reaches the first range condition, going from left to right, it stops.
There's something called like loose index scanning, but it's just, you know, it stops.
Aaron
00:23:54 – 00:24:20
So you can't use the whole index.
It stops when you reach the first range.
So all that being said, I realized for cases like our numeric condition and potentially our date condition, if it's a date without a time, I realized that are you still tracking with me?
Colleen
00:24:20 – 00:24:20
Yeah.
Aaron
00:24:21 – 00:24:43
Okay.
You had the furrowed brows.
I couldn't tell.
I realized that, in a numeric condition, if you don't allow floats, so it has to be integers because if it's a float, then the range is infinite.
Cause you can just keep going smaller and smaller decimal points, right?
Aaron
00:24:44 – 00:25:07
In a numeric condition that doesn't allow floats and you know the bounds of the data, we can transparently optimize the user's intent of show me numbers between 110.
We can transparently optimize that to show me numbers in 1, 2, 3, 4, 5, 6, 7, 9, 10.
Colleen
00:25:07 – 00:25:08
Right?
Yep.
Aaron
00:25:08 – 00:25:29
So that's great.
So we can do that for between clauses.
But we're kinda hosed on less than, greater than, not equals, not between.
Right?
So what I added was, the ability to define the minimum and maximum bounds of the numeric input.
Colleen
00:25:29 – 00:25:30
Okay.
Aaron
00:25:30 – 00:25:45
So let's say you're setting up a condition for, like, you know, users age or whatever, you can say that the minimum is 0.
Like, you know that it's it's not negative one.
Colleen
00:25:46 – 00:25:46
Right.
Aaron
00:25:46 – 00:26:12
So if you say the minimum is 0 and the maximum is, I don't know, 120, 80, whatever.
Not only does that validate the user's input on the front end, so, like, you're not gonna get garbage in.
So it'll validate that it's between 80 and, 0 and 80, but we can also then use that as one of our bounds for numeric optimization.
Colleen
00:26:13 – 00:26:13
Yep.
Aaron
00:26:13 – 00:26:30
Right.
So if we say like in our, in our app at work, like we have to choose a year for certain things, and we only have data going back to 2018.
So I can say the minimum you can choose is 2018.
The maximum is we'll do this year plus 1.
Why not?
Aaron
00:26:30 – 00:27:01
And so now we have what?
Five values?
18, 19, 20, 21, 22.
So when the user says, oh, I want anything after 2018, I can convert that from a range to a multiple equality because I know the bounds of the universe.
And if they say I want anything that's not 2021, even on a not equals, I can convert that to a multiple equality and just take the 5 that I know exist and take out the one they're not looking for and use those 4.
Aaron
00:27:02 – 00:27:44
So I can and and it's great because we have this issue where not only is our app living or our library living in an unknown environment, but then it's being used by users.
And so even the developer doesn't really know exactly how it's gonna be used.
And so if we can apply these transparent optimizations when the data fits, I think we're gonna be able to really increase a certain number of queries, you know, not all of them, but we'll be able to offer these optimizations and tell the app developers, like, listen.
We've done everything we can.
We've probably done everything you can too, and it's gonna be as performant as it can be.
Colleen
00:27:44 – 00:27:47
As possible.
Yeah.
Yeah.
That's cool.
I like that idea.
Colleen
00:27:47 – 00:27:50
Have you started doing that at work?
Have you played around with it?
Aaron
00:27:51 – 00:27:58
I've played around with it on our work data, and I've implemented it in, Hammerstone's version of refine.
Colleen
00:27:58 – 00:27:59
Okay.
Aaron
00:27:59 – 00:28:09
The work the work version of the filter builder is completely independent because of my employment contract.
So I'm not using this optimization at work.
Colleen
00:28:09 – 00:28:09
Got it.
Aaron
00:28:09 – 00:28:14
But I tested the, SQL on work data, if that makes sense.
Colleen
00:28:14 – 00:28:18
So how are you defining those bounds?
Is that
Aaron
00:28:18 – 00:28:36
So it's just another in in our world, in Laravel, it's just another, fluent method on the condition.
So just another attribute on the condition.
So I would say numeric condition, name is age, men is 0, max is 80.
Colleen
00:28:37 – 00:28:39
Got it.
Cool.
I like it.
That's great.
Aaron
00:28:39 – 00:28:41
Thanks.
Awesome.
Cool.
Right?
Colleen
00:28:41 – 00:28:42
Yeah.
That's super cool.
Aaron
00:28:42 – 00:28:48
And I realized we could also do this, potentially on dates provided there's no time data.
Colleen
00:28:48 – 00:28:49
Okay.
Aaron
00:28:49 – 00:29:10
So, you know, on on the columns, you can have, I forget all their names, date, date, time, time stamp, all all that garbage.
The ones that are proper dates with no times attached to it, those are finite.
Right?
With time, it's not really finite because it's continuous.
So with dates, it's finite.
Aaron
00:29:11 – 00:29:29
So if it's a date column, and we know the bounds, and it makes sense.
We don't, you know, if, if the range is a 1000000 items wide, we're not going to do that.
We're just going to use the engine to do that for us.
Yeah.
We can also perform that optimization on dates.
Aaron
00:29:29 – 00:29:40
I think that'll be less useful because I think most people are using, timestamps where they have the date and the time that like the thing happened.
But why not?
It's free for the app developer.
Colleen
00:29:41 – 00:29:41
Yep.
Aaron
00:29:41 – 00:29:45
Like, if it works, it's a bonus and if it doesn't, you're right back where you were.
Colleen
00:29:46 – 00:29:48
So.
Nice.
I like it.
Aaron
00:29:48 – 00:29:48
Interesting.
Right?
Colleen
00:29:48 – 00:29:50
Yeah.
It's super cool.
Aaron
00:29:50 – 00:30:06
I'm curious if there are any other things like that out there.
Because, like, the breakthrough I had was, why doesn't MySQL do this?
That was my question.
And the answer is because MySQL doesn't know MySQL doesn't know the bounds of the data.
Right.
Aaron
00:30:06 – 00:30:20
It knows what's currently in there.
Mhmm.
But in terms of, like, business requirements, it doesn't know the logical bounds of the data.
And so it it just it can't make that optimization because it may do it wrong.
Colleen
00:30:20 – 00:30:21
Mhmm.
Aaron
00:30:21 – 00:30:25
So yeah.
Colleen
00:30:26 – 00:30:26
Awesome.
Aaron
00:30:27 – 00:30:27
Cool.
Colleen
00:30:28 – 00:30:30
Very cool.
Yes.
Yeah.
Very cool.
Aaron
00:30:30 – 00:30:31
Super pumped.
Colleen
00:30:31 – 00:30:32
Yeah.
Nice.
Aaron
00:30:32 – 00:30:38
Yeah.
I was pleased with that one.
Alright.
I've got 7 minutes before proper meeting.
What do you got?
Colleen
00:30:39 – 00:31:07
Well, also, I'm trying to get the query builder working with sample client data, like, a bigger set.
I don't I can't obviously do a 1000000000 records, but with the the bigger set of data.
Because we've been leaning really heavily on our tests, which are great, but, you know, spell out the SQL.
So I think that'll be a big win to be able to show them the data query builder working on their data.
What you said earlier about grinding it out and, like, just kind of Mhmm.
Colleen
00:31:15 – 00:31:31
It's, like, mostly done.
And the client wants these amazing optimizations, which are gonna be so great, but it's a lot of stuff.
And, I feel good about it.
I feel like all of the really hard, like, is this even gonna work?
Details are worked out.
Colleen
00:31:31 – 00:31:41
So now it's just execute.
But there's a lot there's a lot to execute.
And there's a lot, yeah, there's a lot to execute for these guys.
And so, hopefully
Aaron
00:31:41 – 00:31:49
gotten to show them the sizzle yet?
Like, have you shown them, look, this works, and now we're talking optimizations?
Are we still
Colleen
00:31:49 – 00:32:06
No.
Because they the reason the reason that is the reason I don't have anything cool to show yet well, hopefully, if I get that sample data in Mhmm.
And get it working on that, that'll be a little bit better.
But, the cool thing that they really wanna see are the safe filters reapplied elsewhere.
Aaron
00:32:07 – 00:32:07
Right.
Colleen
00:32:07 – 00:32:08
And so
Aaron
00:32:08 – 00:32:09
Which is super cool.
Yeah.
Colleen
00:32:09 – 00:32:38
Which will be super cool.
And the back end is getting really close.
But, it's not quite done.
And the front end is really the challenge there for me is is how because I'm gonna have to basically, like, for example, if you wanna get if your, like, nested filter is a product, and it's related to contacts and you're on the contact filter, I'm gonna have to somehow examine all of the relationships on the contact model,
Aaron
00:32:38 – 00:32:39
Mhmm.
Colleen
00:32:39 – 00:32:50
Sort through the available filters.
I haven't figured and then provide them in a drop down.
That's what I think I'm gonna do.
That's my plan.
So there's, like, just lots of stuff like that.
Colleen
00:32:50 – 00:32:52
It's, like, how is this exactly gonna work?
Aaron
00:32:52 – 00:32:53
Mhmm.
Colleen
00:32:53 – 00:32:59
And it's gonna be so great, but it's still it's it's still a lot of a lot of things, to finish up there.
So
Aaron
00:32:59 – 00:33:22
And you don't have like that, the same thing I'm feeling.
You don't have like that emotional win of having shown them, like, look, this works and it rules.
So there's still this, like, what who knows what they're thinking?
But what you're thinking is, do they doubt that this is ever gonna happen?
Do they doubt me?
Aaron
00:33:22 – 00:33:24
Am I an idiot?
Like
Colleen
00:33:24 – 00:33:26
That's exactly what I am
Aaron
00:33:26 – 00:33:36
You don't you don't have that win of, look, this freaking thing works.
Let's talk improvements and optimizations, and that that is the trough of despair.
Colleen
00:33:36 – 00:33:45
That is a 100%.
Like, Eric, that's so funny because you you hit it on the head.
That's exactly the state I'm in right now.
So I'm like
Aaron
00:33:45 – 00:33:50
Listen, if you wanna talk feelings, I'm your guy.
I God.
That's exactly how I feel.
Colleen
00:33:51 – 00:33:53
Oh, man.
So yeah.
So Alright.
Aaron
00:33:53 – 00:33:54
Well, I gotta go.
You
Colleen
00:33:54 – 00:33:56
gotta go.
That's okay.
Alright, man.
It was good chatting with you.
Aaron
00:33:57 – 00:33:57
Alright.
Talk soon.
Talk to
Colleen
00:33:57 – 00:33:59
you later.
Bye.