Episode

Hammerstone · Nov 17, 2021

Launch Day is in Sight

Launch Day is in Sight
Show notes

<div>It's finally here.</div>

Transcript
00:00

Aaron

Okay. We're back. Sean's having a little bit of computer issues today, so his audio is coming through his headphones instead of his mic, but it's not that bad, and we can deal with it. So speaking of issues, Sean, you've been working on bundling. How's that going?

00:16

Sean

bet that's what broke my computer.

00:18

Aaron

That's Probably.

00:19

Colleen

Definitely.

00:21

Sean

Yeah. So I'm I'm I'm just down to the point where I need to bundle it up into a package that we can release on NPM, and then, yeah, it's time for, you know, you and me, Aaron, to link it up, make sure that I'm speaking the same language. Like, I think that I've got the I mean, I think that my blueprints that I'm generating are what you're gonna expect. Pretty sure they're identical to what I'm generating in the rail side, so, so we'll have to get that all synced up. And I think that it would be faster for us to do that not via the package.

00:54

So the the package does not really hold up on us, like, doing that work, if that makes sense.

00:59

Aaron

Mhmm.

00:59

Sean

So whenever you want, you and I could team up and make sure that that that works, figure out how we wanna do that. It's also thinking of, like, maybe we want to have a separate repo, which is basically just like our 2 projects pulled together to create Mhmm. Something so that way we can run integration tests on it. You know what I mean?

01:17

Aaron

Yep. That makes sense.

01:19

Sean

Which is a little bit crazy, but kind of like maybe what we should do. Yeah. I don't know. It's worth discussing, at least, if that approach makes sense, or if there's something simpler to do that we could do. But but yeah.

01:33

So then so that's done. Then the the bundling is, you know, should be easy, but it's not. I, like, I don't understand why it's a hard problem for me to just only build my code and not include all the other code, you know, that I'm pulling as dependencies. I don't I mean, it it is in theory. Like, if there's directives in, in webpack for me to say, like, exclude these things, etcetera.

02:07

And view CLI, the live the library that I'm using to, like, just create the project, does a whole bunch of stuff for me that I don't have to configure. So that's cool. But I have it set up the way it should be, and it's excluding most of these dependencies except for 1, and it's mysteriously just hanging around. So I'm just figuring that out. And it's just this one particular library.

02:28

Yeah. So it's it's weird. Like, I don't understand, like first of all, this library, I'm only using 2 functions out of it. It's, like, probably would not be that much for it to just be inlined. On the other hand, probably a lot of people use it.

02:42

It's this, like, time library. It's sort of the canonical library that people are using for time stuff now. So it makes sense for it to be a dependency that people pull in on their own. But on the other hand, it's also, like, kinda tiny amount of code, and I'm only importing these 2 functions. And in theory, it should do this tree shaking thing, and it shouldn't it could just inline it, and it would be small a small package to include.

03:06

So even if I did screw up the web pack, which I have, and it was included, it would be small, but it's not. So that's not working either. So, yeah, I don't I don't know. I'll figure it out, but it's stupid and annoying, and I don't understand why it's, like, just build build the library, build the code, and then don't include don't concatenate the other libraries unless I tell you to. I mean, I don't isn't that what basically you almost always want?

03:34

Aaron

Yeah. Basically.

03:36

Sean

So I don't know. Very frustrating. And I I've just been copy pasting magic incantations in, like, for each different library to get it to not include not concatenate into the the final build. Like, seriously, like each one has had its own little special thing I have to do. There's, like, this excludes thing in webpack.

03:56

It seems straightforward. You just put that in there, and then that should work. But, no. I had to go change something in my babel config in order to get one of them to not be included. Like, I don't understand why.

04:07

That makes no sense to me. It's it's weird.

04:11

Aaron

I know. It's very frustrating. Hopefully, this will be one of the benefits of being open source is someone can come along and say, like, you should change all this build step. Be like, great. Please change it for me.

04:25

Sean

Yeah. Yeah. I mean, in the end, I don't think our setup is gonna be that complicated. It's just, I just gotta get that one last kind of piece in, and then yeah. And then we're and then we're there, and I can push that out.

04:40

And then, yeah, I wanna do something crazy and see if I can get it to work in the rails code that our client is running just for fun.

04:46

Aaron

Oh, like as a smoke test?

04:50

Sean

Yeah. No. Smoke test would be I just yarn at it to my own project and then run it

04:55

Aaron

Mhmm.

04:55

Sean

There, instead of running from my own code. But the like, you know, that'd be the easiest thing. Just create another view client project, and then run it with the data that I've been providing. That'll be a fast test. But, yeah, it would be fun just to see it working with with, Colleen's stuff.

05:15

Swap out the Hotwire thing, put in the Vue client. That's kinda neat.

05:19

Aaron

Mhmm. That's pretty that would be very

05:21

Sean

to for fun. Yeah.

05:24

Aaron

Yep. Yeah. That would be awesome. Well, I am off all of next week, for Thanksgiving.

05:30

Colleen

Me too.

05:31

Aaron

So if any of those days work, for you, Sean, to do some integration stuff, then I might be able to set aside, especially, Monday, Tuesday would probably be easier.

05:46

Sean

Okay. Yeah. Probably not, but maybe

05:51

Aaron

That's fine.

05:52

Sean

I mean, I was telling you guys about all my work stuff.

05:55

Colleen

Yeah. Mhmm.

05:56

Sean

All the non developer work stuff ate into my developer time, and then I have commitments that I have to finish up for clients to get, like, some, you know, some of our important clients to get some stuff done code wise. So we'll see. But then, you know, certainly wouldn't be unreasonable for me to take a day off next week. I'm sure quite a few of us will be doing that. So that would be that would be awesome, actually, if I could get the work stuff, like, wrapped up, buttoned up, and then get a day off to do that with you.

06:25

That'd be sweet, but we'll see what happens.

06:28

Aaron

Okay. Keep me updated. I'll be I'll be around. I mean, we're not we're not traveling. We're actually hosting Thanksgiving here, and our office is closed for the entire week.

06:37

So Right. Yeah. I'll I'll be good. That's pretty big. I mean, that's pretty pretty exciting.

06:47

Sean

Yeah. So, like, where do you where are you at with, like, comfort level with soft launching? Like, once we just started working?

06:53

Aaron

Yeah. I'm ready. Let's let's integrate it, make sure that everything matches, and then Yeah. Start reaching out to people on Twitter.

07:02

Sean

We gotta double check on how I'm doing refinements and make sure that makes sense to you.

07:05

Aaron

Yeah. That's one open for me.

07:07

Sean

Decided I'm doing it, I think, what we decided together. And then the error data format, that's so easy to change and swap around. It's literally just, like we could just whatever makes sense, we'll just do that. But I I just put in what I thought probably was what we'd end up with.

07:26

Aaron

Yeah. I think that's

07:28

Sean

right. And then I did not do the deferred condition.

07:33

Aaron

That's fine. That one was very cool. I don't know if I don't know if the client has that one. And so, Collin, you may have never seen it, but it's very cool. It's like the option condition where they can say, like, you know, let's say, color is red, blue, green, purple.

07:52

But it is an a like, the options are provided, via AJAX. So they can start typing. It'll hit the back end, refine will do the query based on what they've typed and send back viable options for them. So if it's an option condition of, like, you know, 10,000 options or whatever, then we don't have to send them all down. So it's very cool.

08:18

Colleen

Nice.

08:20

Aaron

Yeah. I'm I'm ready. I think that's great. So we've got getting it. Yeah.

08:24

We've got the licensing portal set up through unlock.sh, which is incredible. So they will, I can set up fees and take billing and everything through there, and they handle the distribution. So everything on that side, I've got all set up. So, yeah, I think I think that's it. I think we're ready to go.

08:51

Sean

Mhmm. Yeah. Absolutely. So crazy. So if you know anybody that's interested.

08:57

Aaron

Yeah. I have a couple a couple people that have already reached out over the past, you know, whatever, 2 years, and they're ready to ready to try it. So I know. It's crazy. It's a big deal.

09:14

Sean

Cool, man. Yeah.

09:15

Aaron

Yeah.

09:18

Sean

They're gonna pay for it. Right?

09:20

Aaron

Yes.

09:21

Sean

Cool.

09:22

Aaron

Yeah.

09:24

Sean

Awesome. Getting that stranger money.

09:26

Colleen

I know. Yeah. That's great news.

09:29

Aaron

I know. It's gonna be great. We've we got our first license 2 years ago, and now we're ready for numbers 2, 3, and 4. You know? K.

09:44

Anything else on your side?

09:48

Sean

Mm-mm. No. Other than yeah. It's, like, tempting to I'm not gonna do this, but, like, the React version for just doing a builder version, it's like it's a fully formed in my mind. I just need to, like, poop it out in the code.

10:06

Like, I could do it at any point, but it's it's

10:10

Aaron

On that note, someone reached out to me saying they may want us to help them with a React version of it.

10:18

Sean

Yeah. Okay.

10:19

Aaron

So let me let me see exactly what he's looking for on that, and I may send him over to you. It was it was the last DM I had. It was like, hey. We'd love to pay you guys to build this out and react for us.

10:35

Sean

K. So That that makes sense.

10:39

Aaron

All this the way that you did the view stuff was so, like, you know, advanced Vue, like, basically not Vue, it's gonna translate super easily to React because you did all the composition stuff. Right?

10:53

Sean

Well, so, yeah, all of that stuff is above and beyond, like, just what I need in order to do the the builder version. But also, yes to what you're saying. Like, it's so much easier for my brain to think in React, and how I would do this in React, and, like, all of the the, like, statically like, the pure front end query builder code. Like, the basically, the declarative language for, like, the sorry. Domain specific language for building queries that you can you just write components out on, you know, like, that would enable us to do, like I keep wanting to call it spec search because that's what we used to call it, faceted search.

11:34

You know, that stuff, put that aside. That's easy for that's easier for me to wrap my head around in React than it was for Vue. And, like, building APIs for developers with the tooling that I have in React is, again, easier for me to wrap my head around. But just building the query builder component that accepts blueprint and errors and conditions, like, that is also easy and fully loaded in my brain and, you know, should not take more than I'm not gonna say, actually, because I'm gonna jinx myself. It should be easy.

12:08

Like, it should be pretty easy.

12:12

Aaron

That's great. Well, I'll see what this most recent DM from the React guy says and see if it lines up with anything we wanna do.

12:20

Sean

Okay. Yeah. Like, if they have a budget that they wanna throw at us and whether it's less than what we think we would need, that's fine. Like, it would be enough to, like, just prompt me to do it then.

12:35

Aaron

Mhmm.

12:36

Sean

That makes sense.

12:37

Aaron

Oh, speaking of budget, did, you ever get in touch with Matthias?

12:43

Sean

Yeah. We just couldn't, our wires just kept crossing, I guess. So Really? We we never really connected. I tried I tried to pull them in the email because I think Twitter DMs, both of us just, like, lose them.

12:56

Aaron

Yeah. Same.

12:57

Sean

But we didn't make it there. So

13:00

Aaron

Pity.

13:02

Sean

Yeah. We'll find somebody, though.

13:07

Aaron

Okay. Cool. Colleen, what's going on over there in California?

13:14

Colleen

You know, it's 65 degrees today, so I told my children they needed to wear pants because now that's cold for us.

13:20

Aaron

Mhmm. It's winter. It's the dead of winter.

13:22

Colleen

Basically winter. So we have fully acclimated when we decided it was cold. So yesterday was a big day on the client side. I spent hours, hours, the majority of my work day yesterday, talking to the client and talking to some database experts and trying to figure out how we're gonna handle the multiple database problem. And, Aaron, you are part of that discussion.

13:51

So we are going to I'm going to change a little bit the way the query is working. So it'll be interesting to see how it all how it all ends up. But I'm trying to get the We're

14:06

Aaron

we're we're ending up with multiple databases because they anticipate having tens of billions of rows in their events table.

14:17

Colleen

Right.

14:17

Aaron

And so they're pushing that onto a different provider than the rest of the application. And then the fun part is they want us to search through both at the same time, like be able to build filters against both sets at the same time. Right?

14:33

Colleen

Yep. So that'll be an adventure. I think it's good. I'm glad we have a path forward, and it's maybe not how we initially, designed it or had anticipated it being used. But I think it's gonna be fine.

14:50

I think it's gonna work fine. It's a great way to prove this proof of concept that we can do this. Oh, you got this guy and this this table in Postgres and this table in MySQL? Like, we can still make that work. Do that now.

15:07

So yeah. So but it was a lot it was a lot of talking to people yesterday, but I think I'm happy that we have a path forward, and I feel good about that.

15:17

Aaron

Yeah. It was weird for me because I I mean, at some point, I just had to say, like, I don't know.

15:23

Colleen

Like, I've

15:24

Aaron

I've never dealt with tens of 1,000,000,000 of records. So I real I really don't know.

15:29

Colleen

Like, I can

15:29

Aaron

tell you the theory, but I don't know.

15:31

Colleen

Like and I've talked I talked to a couple other people. Like, I have a friend who's really who's an super senior rails developer and a super senior database guy, and there's no answer. I mean, that's what I'm finding, right? Like, there's no one definitive this is the best way because there are so many factors in play here. And, you know, I spent an hour on the phone with him trying to, like, tease out, like, what is the best path forward?

15:58

And no one really knows. So we have 5 different people that we, you know, that I talked to yesterday who have different set of experience and, you know, different stacks and different database, Postgres, MySQL, like, different database expertise. Mhmm. And the answer is no one is quite sure. And so this will not break.

16:19

This might not be as fast as we were hoping or is our our initial design was gonna be lightning fast. Right?

16:29

Aaron

Mhmm.

16:29

Colleen

So we don't really know, but you don't know until you do it. That's kind of where I think we are. We know it's not gonna break. We know it's gonna work. And so we just gotta stop talking about it and do it because

16:42

Aaron

Right.

16:42

Colleen

We're not gonna know until we test it.

16:45

Aaron

And it it like, everything with databases, it depends so much on the shape of your data.

16:51

Colleen

Right.

16:52

Aaron

So you could have the same setup with 10 different data shapes, and it worked 10 different ways.

16:58

Colleen

Right.

16:58

Aaron

And so that makes it really, really tough. Did your database expert friend have anything, like, insightful that we weren't thinking about? Because that would be helpful for me to know.

17:12

Colleen

I don't think so. I mean, he talked a lot about with this level with this number of rows and this level of complexity, you really need to you really need to optimize it at the application level. Like, so I was trying to optimize it at the query level, and his point was you really need to optimize it at the application level.

17:29

Aaron

And so Explain the difference there.

17:31

Colleen

So I'm trying to say what is the best, the smartest, most performant query. And he said, you need to go back to your events table and said, what data do I need? When do I have like, do I have the right information on the events table indexed correctly?

17:45

Aaron

Oh, I see.

17:46

Colleen

That kind of stuff. Like, how can you can you So do a limit offset? Like, what can you do in real time when you're serving the data to make it appear quick.

17:58

Aaron

Gotcha. So put a lot of effort into the ingestion and storage of the events such that the querying can be efficient.

18:06

Colleen

So your query yes. So your query events table as efficiently as possible the way you build that table.

18:11

Aaron

Mhmm.

18:14

Sean

And then, like, build into your application logic, like, UI patterns, etcetera, that help to mitigate that that's not, like, a super fast query. And then probably also trying to figure out how to not blow up your memory stack, like because wouldn't it doesn't seem like that's a risk trying to do stuff at the application layer? Like, we we run a query on events, and it comes back with, like, a million rows.

18:43

Aaron

Mhmm.

18:44

Colleen

Yeah. You

18:44

Sean

know what I mean?

18:45

Colleen

And so talking to, you know, talking to my friend, that was kind of hit. I don't wanna say that was his point, but he was like, do you really need a 1000000 records at one time? Like, why would you do you really need to execute that query? Like, can you do, you know

19:00

Sean

With limits, I think.

19:01

Colleen

Limits. That's what he was talking about. He was saying, do you really need to pull a 1000000 records through at a time? Like, what's the purpose of that? And so that's more of a client specific question, but I think once we build it, we can then work with them to iron out those details.

19:19

What he does, he has an, analytics he's a CTO of an analytics company, and they do partitions. So they do table partitions in Postgres every 30 days. And so they, you know yeah. So so that was what he was talking a lot about how they use they partition their data. So point being, like, depends on what we depends on what database we use, but there will be strategies, I think, to make it work.

19:45

Aaron

Yeah. The every 30 days partition is pretty good. Because I would imagine most people, most end users are gonna wanna see stuff that's relatively recent. I mean, even if it's in the past year or whatever, you can still, after a while, drop off stuff that's older than a year.

20:05

Sean

So

20:05

Colleen

what yeah. What they do is they roll it up. So, like, after a year, then they roll all the data up so they don't keep, you know, the full events table.

20:12

Aaron

Oh, they don't even keep it.

20:14

Colleen

Yeah. They don't keep it past I don't I think he said a year. So then they roll it up because people but that works for his use case. Right?

20:20

Aaron

Sure.

20:20

Sean

Yeah.

20:20

Colleen

Because people wanna see stats going back x number of years, but they don't want contacts who viewed their page a year ago. Yeah. So I don't know exactly our client if if we are that flexible. But I do think if we think a little more, we being the client about what they really need, we can work to optimize it more, help them. But we gotta give them something to work with.

20:46

Aaron

Yeah. Yeah. I like the I like the partitions. I really I really think partitioning is a good way to go because it's managed by the database itself and not by us, which seems nice.

21:00

Sean

Mhmm.

21:01

Aaron

And the database can know I need to go to this one partition, and I can avoid these 10 others and not even, like, not even look there. It doesn't even matter because it won't be there. That's pretty awesome.

21:12

Colleen

Mhmm.

21:14

Aaron

Yeah. Yeah. Big day.

21:17

Colleen

Yeah. It was it was a big day. So it's all good things. It's just, you know, a change from, what we're originally trying to do.

21:30

Sean

So how's it gonna work with the query builder? So we're gonna allow them their users are gonna build queries.

21:36

Colleen

Yeah.

21:36

Sean

And then we're but their queries are gonna be so it's gonna be significant change under the hood, because we'll have to know, like, this particular clause or refinement, I guess, most likely, is gonna go through the events table, so then it's a separate query. Is that kinda how it's gonna work?

21:59

Colleen

Yeah. That's kinda how it's gonna work.

22:00

Sean

And then we give them, hey, look. You set it up with multiple tables. So then here's your query object. You figure out how to run it. Like No.

22:08

I mean, of course, we're gonna do the integration because that's what we're doing for them. So No. We figured out. But

22:13

Colleen

The plan and I'm still working on adding in these static filters. So I'm not I haven't worked on it yet today. But the plan is so right now, when we go through, you know, I want, oh, events with products that are red and products that are blue, and I want a contact with first name Colleen. Instead of returning the query, we will return a list of IDs of products that are red. So, it will be like select all events product IDs that match this list of IDs.

22:45

So we'll execute we we, Hammerstone Refine, will execute the query, return the IDs, and then feed those IDs into the parent query.

22:58

Aaron

So we could end up executing, you know, 6 different queries in an attempt to execute the one user intention.

23:06

Colleen

Right.

23:08

Aaron

So anytime we cross a database boundary so we'll be inspecting the models as we go, and the models the Rails models have their connection settings on them. And anytime we notice, okay, this interior query that, traditionally would have been run as a subquery by the by the database. This interior query is run on a separate database than this exterior query, so we need to execute the interior query and get a list of just Scalar IDs, and then that becomes the where in. Instead of a where in subquery, it's where in list. And we just do that all the way out.

23:51

Different, execute, different, execute, like bouncing back and forth between databases.

24:00

Sean

Yeah.

24:02

Aaron

Indeed.

24:04

Sean

Yeah. I mean, it's it's fine. Yeah. I just wonder if there's gonna be queries that they're gonna end up users will end up creating, which will be super duper duper slow. Like, that's gonna happen.

24:17

So then it's a matter of kinda like, if we're automatically letting them if we're automatically running all these queries. Yeah, that's that's a fun fun problem.

24:31

Aaron

Yeah. That'll be a problem.

24:32

Colleen

That's why

24:33

Sean

What's tell me about the static queries.

24:36

Colleen

Oh, that by static queries, I meant the nested queries. So, basically, I'm trying to add in a query like a refinement. I think we talked about it a couple weeks ago. So you know how you add refinements to, like, the inner the inner query? The subquery?

24:55

So I want to add additional filter queries to that subquery, which sounds complicated, but it's really not. I think I'm not I'm not explaining it well. So

25:05

Aaron

It's like when you you have a filter and a filter, and so you wanna say, show me users that have bought product, my favorite products, and my favorite products is a filter

25:14

Sean

Is a filter.

25:15

Aaron

That's super complicated that you built and then saved somewhere else.

25:21

Sean

Okay. Yeah. That makes sense. Alright. Does that change our blueprint?

25:28

Aaron

No. That'll still be just an option.

25:30

Sean

Fascinating. That's so cool.

25:33

Aaron

Yeah. Yeah. Because all all, like, all saved filters basically have an ID and a display. So it's, like, Colleen's favorite products, December 2021 is the display, and then the ID is, like, 12345. And it's just an option condition to the front end.

25:53

Sean

Nice. That's cool. Very cool. Yeah. I was wondering.

25:59

I was like, oh, do we need to coordinate on that? But no. Awesome.

26:03

Aaron

No. And Yeah. And no because Laravel doesn't have that. So double no.

26:08

Colleen

Double no.

26:10

Sean

Laravel doesn't have that? What do you mean? Like, it doesn't

26:12

Aaron

have We don't have that we don't have that ability yet. So we don't on our side on the Laravel side, we don't have the ability to say this condition is a, you know, filter in a filter condition.

26:22

Sean

Oh, meaning we just haven't built that out yet.

26:24

Aaron

Correct.

26:25

Sean

Yeah. Got it. No. That's I was wondering about that. Like, we, like, we know that that's a thing, that people want.

26:32

So it'll just be, like, the rails side just gets a little bit ahead of

26:35

Aaron

Exactly.

26:36

Sean

The Laravel side.

26:37

Aaron

Yeah.

26:37

Sean

Yeah.

26:37

Aaron

I'm gonna let Colleen and her giant team of designers and developers figure it all out.

26:42

Colleen

Figure that out.

26:43

Aaron

And then I'm just gonna copy it. Yeah. Because the design is the the the design is a real issue. Like, how do you build, you know, a filter in a filter? And so they'll get that sorted.

26:57

Colleen

Yeah. That's I think that's that'll be fun, but I think that's down the road a bit. I think the sequel is the biggest technical concern they have right now.

27:05

Aaron

Yeah.

27:06

Colleen

We actually have a vision for it, Sean, which you'll have to help me with, but probably not till not for a while. But the vision is, like, you're building out your filter, and then you have this, like, slide in.

27:18

Aaron

Yeah.

27:18

Colleen

Like like, you're saying, I wanna find all all contacts who viewed a product named red. So you'd but the the product named red is its own filter. So it would, like, slide in, and you could build it and, like, build it in line and save it. Anyway, don't worry about that. That's that's way down the

27:37

Sean

road. Cool.

27:38

Colleen

But it'd be cool. Right?

27:39

Sean

Yeah.

27:40

Aaron

Yeah. Yeah. And that's the, that's, I think, the answer to infinite refinements. Like, why are we not just, like

27:48

Sean

Making it filters.

27:49

Aaron

Making, you know, refinements and refinements and refinements. It's because this is the vision there.

27:55

Sean

Yep. So

27:56

Aaron

Yeah. That would And since since filters are stabilizable, you could then use your Colleen's favorite products anywhere you want in any other filter that you want. Yeah. And so it's kinda like you get

28:07

Sean

to build it once. Super, super cool. Yeah. That equals enterprise clients. Yeah.

28:15

Same thing with your querying multiple databases.

28:19

Aaron

Oh, yeah. I actually actually think querying multiple databases is gonna make it into Laravel because it's it's a thing. People do this. Yeah.

28:26

Sean

Yeah. Yes. Oh, man. So this is, like, very, very exciting.

28:35

Aaron

I know. This client was our biggest win by far.

28:39

Sean

Yeah. Yeah. I just could see we we're killing so many objections when talking when we're gonna, you know, if we start talking with any other enterprise clients.

28:49

Colleen

Oh, yeah.

28:51

Sean

Because we yeah. We've solved real thorny problems by the time you're done with this, Colleen. It's crazy.

28:58

Colleen

So it can we go back to what you just said, though, Aaron? You said it would just be an option condition. But what I'm looking at contacts that have viewed a product filter Mhmm. That's 2 options condition because viewed is its own options condition.

29:16

Aaron

So it's almost like a nested options condition. Condition.

29:19

Colleen

Maybe this is a unique case that we can talk about later.

29:23

Aaron

Oh, I see. So I think you can make you can control the clauses on your options filter. Right? So instead of saying so you'd say, like, contacts have viewed a product, and, like, your your I think your options clause there would be have viewed a product, and then your go ahead.

29:49

Colleen

We want that to be selectable. It's not just have viewed. It's have have clicked on, have whatever's in that table.

29:57

Aaron

And each of those are different clauses, I think.

30:02

Colleen

Right.

30:02

Aaron

Yeah.

30:02

Sean

I see what you're saying, Aaron.

30:04

Colleen

Right. Right. Right. But then you need have viewed a product. Now, I need another drop down that's like To

30:11

Aaron

select product?

30:12

Colleen

To select product filter. At least that's what I'm working on. So the product filter in this case, again, we can talk about this offline, isn't its own independent condition. It's actually tied to another condition.

30:29

Aaron

Okay. Will you have so I was thinking the clauses would be have viewed a product, have clicked on a product, have something a product, and then the option that they would be choosing from is the product filter.

30:45

Colleen

But that viewed is my through key, right, on the events table. So Mhmm. I can't I can't do that because I need to build up the I have to go through anyway, we'll look at it later.

31:01

Aaron

I see. That's what you're saying. Yeah.

31:03

Colleen

All work out, but I I was just just you said that, and I was like, wait. Did I miss that thing? I think it's actually like double option conditions. So the static I'm just gonna call it static filter, but, like, the pre created filter has to tie into that specific condition.

31:18

Aaron

I see. That makes sense. Yeah.

31:20

Colleen

But I think it'll still work fine. I think it'll be it'll be alright.

31:23

Aaron

Yeah. For sure. As we've learned, we we can make anything work. Yeah. I I see

31:32

Sean

what you're

31:32

Aaron

saying now.

31:33

Colleen

Okay. Cool.

31:36

Aaron

Speaking of squashing or quashing objections, we have a call with a new potential Rails client on Thursday. Right?

31:46

Colleen

Yeah.

31:47

Aaron

So this all happened publicly on Twitter, so I don't feel like we need to not talk about it. But I saw let's see. How did it happen? Oh, the auto the auto tweet from Transistor went out when I published last week's episode. Somebody replied and said, what do you guys do exactly?

32:06

And then, another guy that I'm Twitter friends with replied and said this you know, I've been listening from the beginning. This is what they do. And then Jesse, right, Jesse? Jesse Henley from Bento chimed in and was like, hey. I really need a query builder, and if you can solve this for me, I'll buy it yesterday.

32:25

It's like, oh, really? And he's he's bento is on bullet train. Right?

32:31

Colleen

Sure is.

32:32

Aaron

And he and Andrew he and Andrew are like best buds.

32:35

Colleen

Yep. So, this is great. I think this is great. Yeah.

32:39

Aaron

Yeah. So, I told him, I mean, publicly, all all of this, I told him, great. We are working with bullet train. We've we're working with a client that's got 1,000,000,000 of rows. Like, we're not quite there, but do you wanna talk?

32:52

And he's like, yes. I can talk tomorrow. Does that work? I was like, woah. I'm I'm going out of town.

32:57

I, you know, I think Colleen's asleep or something.

33:00

Colleen

So

33:01

Aaron

we're talking we're talking to him on Thursday.

33:05

Colleen

Yeah. So It's Thursday night our time because

33:08

Aaron

he's in Japan. Because he's in Japan. Okay. That's right.

33:10

Colleen

Yeah.

33:12

Aaron

So that's kind of exciting. And his deal is I think he uses the, I forget what it's called, but it's the jQuery query builder as the front end.

33:22

Colleen

Okay.

33:23

Aaron

And good news is, like, we can, you know, intercept. We can write middleware for our adapter to work or for our blueprint to work with with the jQuery front end.

33:35

Sean

I saw him mention something like what was it? Query builder? There's, like, a website. It was, like, query builder JSON. I think

33:40

Aaron

it's query builder JS, maybe, Or j s query builder.

33:44

Sean

Query builder JSON website. Uh-huh. Query builder dotjs.org? That thing?

33:50

Aaron

Yep. That's the one. Yeah. So you can see it like it's not totally dissimilar from what we're doing if a little bit, you know, more technically minded. And I actually did write I did write an adapter at one point between our blueprint and this.

34:14

And it's not perfect nor is it finished, but I did I did write one. So we'll just, you know, who knows if we're in a spot where we can help him. If he needs something tomorrow, you know, probably not, but we can at least talk to him and tell him the things that we've learned and, what we're doing with with the client. So that's exciting.

34:37

Colleen

Yeah. That's great.

34:39

Aaron

And you So what's the you and him speak the same language. So I'm just I'm gonna ride along. It's gonna be your deal. I don't I don't speak bullet train.

34:51

Sean

So when when Jesse was talking about was trying to figure out, like, what we do, you know, with the website. He's like, I don't that didn't help me. So, obviously, we need to do our website so that it's actually useful for this. So what would, okay, so I'm gonna throw this out there. There's a new React framework called Remix coming out.

35:14

Okay. And it is very clearly oriented towards content based websites. And I like everything that I'm seeing so far, and I want an excuse to check it out next week. And I was thinking of banging out our marketing site with it, but that would change us from your Laravel setup. But I would just do the marketing stuff.

35:37

Aaron

Full support. I do not Okay. I do not have any ties to owning the marketing website. So as long as you're comfortable, like, either editing or making it able for us to edit it

35:53

Sean

Exactly. That was that would be like, I'm gonna go play around with it. And Mhmm. If I can't set it up so that way it's easy for anybody to make a change, then it's not gonna work. Though that is currently the problem I have with the Laravel marketing thing.

36:06

Aaron

Mhmm. So I'm

36:06

Sean

like, oh, okay. I'm gonna have to get this whole thing set up and, like, figure out enough about Laravel to to make the changes, etcetera. It's probably not hard, but it it's like the same amount of work that it would be for you guys to figure out this thing if it's not Right. Straightforward. But it has file based URLs, which, like okay.

36:22

So I wrote a whole Rails thing, which lets me just write a markdown file, put it in the file structure where I want it to be in the URL structure, and then it turns it into markup and then serves it at that URL. Because I wanted to just be able to open up a text editor, open up a file, write markdown, save it, git commit as I go, use that to, like, save stuff on a branch for drafts or whatever, like, use git like I normally do, and then push it, and then have it just show up at the right URL. I think that Remix lets us do that, I think. The markdown piece, I'm not exactly sure yet, but I think that's workable. So anyway

37:01

Aaron

We we have that ability with our documentation part, but the, like, actual home page is just HTML. I mean

37:09

Sean

Yeah. Right.

37:10

Aaron

It's served by Laravel, but it's just HTML. It's a copy from a Tailwind UI thing.

37:15

Sean

It's documents. Are they on a sub a subdomain? I have both.

37:18

Aaron

No. They're not.

37:21

Sean

That's alright.

37:21

Aaron

I can't

37:21

Sean

figure that out.

37:22

Aaron

It's on a subfolder or directory. Yeah. I'm super not precious about the marketing site. I would love to not own that, but I'm happy to continue owning it if if I need to.

37:35

Sean

We would

37:35

Aaron

need to figure out the docs thing, but that seems that seems doable.

37:41

Sean

Yeah. Cool. Yeah. So that's gonna launch next week, so I'll mess around with it probably next week. I was hoping that would be my, like, Thanksgiving project.

37:50

Colleen

Nice.

37:53

Sean

Or me and Aaron getting it to work with the, the Laravel piece. That's my one my priority. But

38:00

Aaron

Yeah. Different kinds of brain work. Yeah.

38:03

Sean

We can sync up. We'll do that.

38:07

Colleen

Cool. Aaron, how about you? You seem a little tired today.

38:12

Aaron

Oh, just a little bit. Good. We, you know, went to Virginia last weekend, and it was great. The kids are amazing. My parents are amazing.

38:23

Jennifer's amazing. It just worked out like, it it worked out surprisingly well. However, just not a lot of sleep.

38:31

Colleen

Yeah. The whole excitement.

38:34

Aaron

Yeah. And, you know, you have, you know, Thursday night rehearsal dinner, and then Friday night wedding. And so we're out until midnight each night, and then the kids don't know that it's a wedding weekend. And, you know, they're sleeping in our room, not my parents' room.

38:52

Colleen

Right.

38:53

Aaron

So then they wake up at fortunately, it's an hour difference. So they woke up at 8 AM, which is better. But we've still gotta get up before them to prepare. And then you do the whole day, you know, of wedding activities and seeing the city. And so just and then you gotta fly home, which is miserable.

39:14

We left. We actually, the flight out, Jennifer and I woke up at 3:30 Dallas time,

39:19

Sean

because

39:19

Aaron

our flight was at, like, 620 or something. And, you know, we were walking through the airport with just, like, a hysterical number of bags holding, like, a yeti full of breast milk. We've got, like, 6 gallons of breast milk and a soft yeti, and it's like, is this the best idea? So it I mean, I have no complaints. It went amazingly well.

39:43

It's just it's just exhausting.

39:46

Sean

Traveling with kids that age is hard.

39:48

Aaron

It is real hard.

39:50

Colleen

It's so hard.

39:51

Aaron

It's real hard. I honestly I don't think we would have made it. We certainly wouldn't have had fun if my parents weren't there. There's just there's just no way. There's no way.

40:05

So that's where I've been. Trying to think of anything that pertains to us. I got a DM from the Indie Hackers account asking me if I wanted to do an AMA. Sweet. And I was like, sure.

40:22

Sean

Oh, yeah.

40:22

Aaron

Heck, man. Sounds great. Definitely. So they I assumed it's Cortland, and could be like a community manager or somebody. DM'd me, and was like, hey, I know you're bootstrapping and working and a new parent.

40:34

Do you want to do an AMA about it? And I was like, yeah, heck yeah. That sounds great. So I'll be doing that at some point, which is exciting.

40:45

Colleen

I was gonna say maybe after we have a marketing website, that would be kind of Maybe. I'll who knows? I know. I don't know if they want you to do it this week or if they were just like, no. Whatever.

40:53

Who knows? Cool, because that'll drive a lot of traffic to our Hammerstone site.

41:01

Aaron

Yeah. I will look. He sent me or they sent me a Calendly, and I will look and maybe try to do it later rather than sooner.

41:09

Colleen

December, if you can do it. Mhmm.

41:10

Aaron

I don't Yeah.

41:11

Colleen

Just a thought.

41:12

Aaron

Good thought. Good thought. So that's super exciting and encouraging. And that is about it. Last night, I took my, independent pursuit time to work again on Keith's stuff and feel like I'm making good progress there.

41:31

That'll probably be I'll probably spend some time next week, just finishing that up. And then, Colleen, you said you wanted to see some of that, so I may be able to show you some once I get once I get done. So, yeah, I think that's about it. I've got I've got a whole stack of new books that I can read.

41:55

Colleen

Oh, yay. I got mine too.

41:57

Aaron

All my yeah. Got all my MySQL books, and I'm just learning a freaking ton. And I think one good source of content for us on this database specific stuff is gonna be reading these books and then, like, turning these kind of academic, explanations into, like, rails and Laravel specific, like, here's how you would do it in the framework that you're using and not just, like, in theory, indexes work from left to right. It's like, well, here's how you would do it in in Rails to make it performant. Right.

42:38

These things are just full of great ideas. And it's like, why is nobody reading books anymore? I already did this bit last week, so I don't need to do it again. But it's been great, and I love it, and I'm super pleased with it.

42:48

Colleen

That's awesome. Yeah. I'm thinking, like, as we get more into it, and we will, throughout the course of this, have to be really good at databases. So I should also get some Postgres books because I think most Rails people do Postgres. So it'll be awesome.

43:03

We'll be, like, the dream team database dream team.

43:06

Aaron

I know. It's gonna be

43:07

Sean

so good. Excited that I'm not included in that.

43:09

Colleen

The database. Yeah.

43:14

Aaron

Well, I love it so much. So I'm happy. I'm happy to handle that one. If you wanna do remix or whatever, you do that. I'll read my sequel books and then we'll all be happy.

43:25

So I think that's I think that's all I've got. Unless anyone has anything else, I think we can call it.

43:32

Colleen

I'm good.

43:33

Aaron

Alright. Talk to y'all later.

43:35

Colleen

Bye, guys.

Details
Show
Hammerstone
Date
Nov 17, 2021
Role
Host
All podcasts
Podcasts
Newsletter

Every week: the best things I've found and what I've been thinking about.