← Back to Show Notes

Transcript: GeoDjango - Harout Boujakjian and Andrew Hornstra

Will Vincent

Hi, welcome to another episode of Django Chat.

I'm Will Vincent, joined by Carlton Gibson.

Hi, Carlton.

Carlton Gibson

Hello, Will.

Will Vincent

And we're very pleased to welcome Harut and Andrew from Pin Planet.

Welcome both of you.

Harout Boujakjian

Hello.

Hey guys.

It's nice to be here.

Yeah.

Will Vincent

Yeah, thank you for joining us.

So I'm excited to talk about your app, Pin Planet, because it's a chance to talk about something from prototype to production since you've been working on it for several years, but um hopefully you still remember those early early days.

So maybe we could start with what is PinPlanet and then we'll go from there.

Harout Boujakjian

Okay, so Pin Planet is an app that lets you pin where you've been.

Uh it's a way to keep track of all your travel memories in one place.

So like let's say, for example, that you visit Portugal and you somebody asks you about it later, they want to know your travel recs.

Pin Planet helps you essentially keep track of all of that.

You'll be able to go back and tell them all the spots you visited, like the restaurants, the hotels, museums, etc.

Uh, you keep track of your photos, you have your travel buddies, so it also functions as like a trip planner, and then you get to visualize all of your pins on a uh on a 3D globe as well as a 2D map.

Will Vincent

That was one of the things that's most striking when I first signed up for it is that that 3D globe.

Um, can I ask, what are you using to generate that?

I that's I know that's not Django, but what are you using to generate the globe?

Harout Boujakjian

Uh well, so I have to ask, which which globe are you talking about?

The one in the getting started or the one on the profile now?

Oh.

Because they're two different globes.

That's true.

Will Vincent

Uh either.

Tell tell me how they're different.

Harout Boujakjian

I can I can answer both.

So the the one in that's in the getting started prompts is our older globe.

It was a web globe that I built in JavaScript using D3.

And then the newer globe takes advantage of Apple's uh map kit.

So they have a way to render 3D Globe.

It's a little bit more performant.

Okay.

So we s we started using that one on the profiles instead of the web one.

Will Vincent

Okay, very cool.

Carlton Gibson

Okay, and the but and the back end is uh using Geo Django.

Is this

Harout Boujakjian

yeah, yeah,

Carlton Gibson

yeah, all right.

Phew, we're on a Django show.

Go on, tell us about that.

What's the what's the what's the down and dirty though?

Like what's the how do you how do you build such an app?

Because it's quite cool to play with and you know.

Harout Boujakjian

Okay, so the the front end is the front end is completely native.

We did start as a web app, and we're definitely happy to talk about talk about the PWA aspects as well.

But so the front end is is iOS for right now.

We are in the midst of of building an Android app, and we're actually getting pretty close to releasing it.

The back end is Django and obviously a little bit of Geo Django, and then our database is is Postgres.

We have Redis server running for cache, everything runs on EC2 instances.

So that's good, that's like the quick, quick and dirty.

Carlton Gibson

Right, so brilliant.

But so it's literally just the two of you.

Harout Boujakjian

Yes, we are.

We're the engineering team.

Yep.

Yeah.

Carlton Gibson

Okay, so here's here's what I want to know.

How's it going building um a Django backend?

Okay, and just you know, a few EC2 instances getting okay, fine, no problem.

Uh a PWA to begin with, okay.

Uh, you know, get that.

Then an iOS app.

Oh, hang on.

Carlton Gibson

And then an Android.

How to did uh do two pairs of hands get quite so much done?

It must be a challenge.

Harout Boujakjian

I I I I don't even know how to answer that.

Um I'll answer it a little bit.

I think that we we're like a pretty efficient engineering team.

Andrew and I, Andrew and I's skills, we we complement each other really well.

That's my answer, but I want to hear what what Andrew thinks.

Andrew Hornstra

It's about as hectic as you as you kind of made it seem and sound.

Um yeah, especially with with adding ios and we now suddenly we're suddenly uh we're supporting so many different versions of the app.

And with a PWA, it was just one thing.

And it's it's been it's been a bit, but yeah, like Harut said, every time I have an issue, I go to him and he tells me, Oh, you you missed this very obvious thing, or vice versa.

And so we it it works out very well.

Harout Boujakjian

And let me just say on the air that Andrew is my Python guy.

So I know Python pretty well, but if I really like want to get into Python details, then I then I go to Andrew.

So I I think this synergy works really well between the

Will Vincent

who yeah, I was gonna say who's who so iOS, are you both writing Swift or are you dividing that and versus you know Java for Android?

How is that division of labor happening?

Harout Boujakjian

Uh so no, I I do iOS fully.

Andrew has been taking over the Android app.

I help a little bit over there.

It's pr it's more like it maybe like an 80-20 split.

And then both of us also do backend, handle database stuff, handle server stuff, but that's more I would say Andrew's specialty is backend.

But I'm you know, I'm comfortable getting in there as well.

Carlton Gibson

Okay.

And since we're in there, like uh Andrew, you've have you been digging into the the whole Kotlin thing in Android or is it still Java based?

Andrew Hornstra

We're we're 100% Kotlin and Jetpack Compose.

Right, brilliant.

Carlton Gibson

Uh and so um for the listeners like Jetpack Compose is a bit like Swift UI, it's one of these declarative UI frameworks that you can just sort of spell it out and then the runtime works out how to render it, and so you're not it's simpler and quicker, I guess.

Andrew Hornstra

Yes, simpler in syntax.

Uh the the the titular composition aspect of Jetpack Compose is sometimes it feels inconsistent uh and like a bear to wrestle with, but I'm sure that's a

Harout Boujakjian

personal failure.

It's an understatement from the little bits that I've had to help out.

Carlton Gibson

So the essential complexity of UI design didn't just disappear somewhere.

Andrew Hornstra

Uh you know, it didn't.

Carlton Gibson

Right, okay.

So here's my burning question about Kotlin, since you've been they you go on the Kotlin website, sort of like, you know, a cross-platform, multi-this, multi-that, and then they got this thing down the bottom where it says iOS, and I'm thinking, oh, so is it yet at the case that you're building chunks of your app in it for both iOS and Android in Kotlin?

Andrew Hornstra

Not we're we're not doing that, and we're not gonna go in that direction.

We're we're sticking with native for both, which is yes, a lot of work.

Carlton Gibson

Um okay, so can I ask why?

Because the like you know, and this comes back to the idea of old, you know, PWAs, or why don't you ship ship a PWA and ship it to every platform?

Why go native in the first place?

You know, why why not try and use the cross-platform code then?

Like what does native only give you?

Harout Boujakjian

Well, it depends what uh what exactly you're asking for.

So is it the difference between PWA versus native iOS, or is it something like Kotlin multi-platform, which is saying, all right, you're gonna use one code base to also build iOS and Android?

Because the answers are different.

Carlton Gibson

Right, no, but I'm but it kind of is bugged, right?

Because I'm still basically fascinated with the fact that the two of you are building a back end plus multiple front ends, like with just one one pair of hands.

And that's kind of incredible in a way.

It's kind of really hard to do, and to do it at a high quality, you know, that that's a lot of effort.

So I'm I'm kind of trying to tease from you the decisions that lead you to go that that hardest of routes.

Harout Boujakjian

Okay, all right.

So the easier one is the easier way to answer this is why we didn't go call Kotlin multi-platform.

It I think it's mostly it's mostly me.

I just don't believe in in these cross-platform solutions.

They they always they always sell it a lot better than it actually is.

Like you get the first 50% done really well and really fast, but then the second 50%, you're pulling your hair out and you go gray by the end of it.

So that that's that's the reason for that.

The reason we went from PWA to native is because that's more complicated.

Uh we've trained users for 10 plus years, uh, you know, over a decade to look for apps in the app store.

So when you tell them, oh, I built this app, and they're like, oh, okay, what is it called?

Let me look for it in the app store.

And we're like, oh, it's actually not in the app store.

And trying to get over that hurdle is is is very, very difficult.

Andrew Hornstra

That and notifications.

Harout Boujakjian

Yeah, that and push notifications.

So that was gigantic.

Carlton Gibson

So there's a lot, there's a lot of people in the Word World world who are kind of cross with the way that PWAs just aren't as capable as native apps.

Harout Boujakjian

It's it's really unfortunate because like two years ago I was such a huge advocate of the web, and I still love the web.

I think I think the web is the best cross-platform solution.

There's nothing that comes close to like the cross-platform capabilities of the web because every platform essentially has some version of a browser, and that's awesome.

But yeah, Apple in particular does their absolute best to just make that experience not so great.

Carlton Gibson

I mean, I think the Basecamp app is like that, right?

It's essentially web views with a with a very small native wrapper around it to integrate with the with the iOS.

But essentially all of the views are exactly the same you get on the basecamp website.

Yeah.

Carlton Gibson

I don't know.

I know, okay.

Right, so one more question here, and then I'm gonna let Will have a go.

Because I'm well, I've got you both on the on the hook.

So the big um impedance match for me is the serialization between so you've got your Python backend and you you serialize to I don't know your JSON objects and then you um deserialize into your Swift objects and um or or you know your Kotlin objects or whatever.

So to can you describe how you've how you've dealt with that and what your your pain points have been and you know what what you've enjoyed and what you haven't, and you know, we'll I think follow up there.

But also there's another little switch back to that that Kotlin bit.

Would you reuse the Kotlin bit just for that kind of networking layer?

Or, or you know, is that just it just doesn't bring enough to the table?

Andrew Hornstra

Yeah, I can I can speak to I can speak to the Kotlin aspect of that.

I've I've only been using Kotlin for, I guess, three or four months.

Three months or so.

Harout Boujakjian

Well it's remarkable that you've been able to build the app in in three months, so

Andrew Hornstra

it's been a lot of work.

But I've really, really enjoyed Kotlin and have been very impressed by how intuitive the syntax can be.

The library we're using for the client side HTTP is KTOR.

And that's also a server side.

So I I think one of my next projects will be uh a Kotlin server side application just to mess around with that.

Um but for now I think we're just because of the complexity of a two-man team managing four machines, two platforms, uh yeah, we'll we'll we'll stick with just one for now.

Harout Boujakjian

But and let me ask you.

I'll I'll answer the serialization piece, which I think is interesting.

It's basically double the amount of work, and there's no way around that.

Like we have our DRF serializers, which you know will serialize and deserialize the data, and we've split that into uh input and output serializers nowadays.

And then in Swift or Kotlin, you know, we have essentially very similar ways to you know, quote unquote serialize the data into Swift and Kotlin objects.

Carlton Gibson

But you but you end up writing a set of kind of almost boilerplate-y classes in Python, and you and it doesn't matter if you're using DRF serializers or you know, Pydandic or Atas and Katas, like it's still boilerplate, it's still rubbish to write.

And then you've got the same in Swift with the uh coding, you know, the coding protocol or whatever it's it's called.

But it's again, and they've got lots of utilities, like they know how to map from Python names to Swift names, and okay, great, but it's still rubbish to write those.

And and you spend a lot of time doing that, right?

Harout Boujakjian

Yeah, yeah.

Uh there's no way around it.

I feel like we bit the billet a while ago, and we're like, yeah, that's that's okay.

It's costly.

Carlton Gibson

Okay, so that's good.

I'm glad nothing's changed.

Carlton Gibson

But what about what about LLMs and Copilot and these things?

Have they anything there to speed up all of your your work?

Andrew Hornstra

I think we've we used we used Chat GPT one time a while ago, probably, probably six or seven months ago, and it helped.

Harout Boujakjian

Yeah, there was some weird uh web view layer we we were doing.

So we're trying to send some data to the web view for the old globe.

Uh, and then there was like one line that we got from ChatGPT.

But for the most part, I don't I don't actually ever use ChatGPT.

Uh, but I do uh the the support in PyCharm, I think, if that counts, is pretty good.

Andrew Hornstra

Actually, I can say that I've used ChatGPT a few more times.

It's never given me any code that was something it's never given me any changes, any code I could include.

Um mostly because I've been troubleshooting very complicated problems and the difficulty is almost always at this point with something so mature and like as many files as we have explaining what the problem is.

And if you can do that, you have a pretty good shot at fixing it yourself.

Carlton Gibson

So you're still essentially the the bottom line is you're still with when it comes to serialization, deserialization, you're still sort of having to maintain that mapping layer, you know.

Yeah, yeah by hand.

Carlton Gibson

Yeah.

Will Vincent

Have either of you uh we we um we recently had Simon Willison on, um, who's a obviously a big advocate of LLMs.

Um, but I mean, have you tried, was it Py Assistant, right?

That's the new um PyCharm one that they just launched.

I haven't had a chance to play with it myself, but it's sort of like their co-pilot that they just the the new update to to PyCharm.

Harout Boujakjian

I I did recently try it.

I didn't like it actually.

I I thought it was kind of it was like a little annoying because some of the suggestions were were just not right.

And it kept doing weird casing.

Like it would give me camel case in Python.

Is that is that the right one?

Yeah, not the underscore, not the uh snake case.

It gave me camel case names.

And I was like, well, why are you doing that?

Like, you know, this is Python.

Will Vincent

So Carlton, you like copilot though, right?

Carlton Gibson

You yeah, no, uh, but I like it for these kind of boilerplatey things.

I like it, you know.

I I'm like um I had a okay, so today I was writing a um a property that maps from choice fields and make sure it's displayed in the right way.

And it's like, okay, I need some tests for it.

So I'm like select it, copilot, I need some tests for this, and it gives me the half a dozen cases, and I don't have to type them out by hand.

I'm like, okay, that's fine.

And the rest of it's you know, not useful, but that little bit saves me a few minutes.

And I so I used to write APIs for a living.

So I back in the day, I used to write iOS apps with the DRF backend, and the bane of my life was this mapping of from serialization to deserialization, and every time it updates and every change, it's like, okay, I've got to make a change in the app to the serializer, change in the DRF backend to the serializer, make sure that that's backwards compatible, or introduce a version to endpoint.

Oh, just it was kind of like the the the the legwork of the of you know, it's not difficult, it's not challenging, it's not it, but it's it's the stuff that needs to be done, the grind work.

And my hope with these toolings is that they can automate that in some way, that they can take away a little bit of the mundanity of that particular mapping task, which it, you know, it's not difficult, but it's time consuming.

Andrew Hornstra

I think the direct integration entirety ease is going to be the biggest, the biggest value add for I I mean, this is a very obvious thing to say, but for developers, just because swapping back and forth between Windows, copying and pasting, waiting for the output there, and just the amount of task switching, it's it is a higher cost to your productivity than I think either of us were willing to willing to take to fit that into our workflow.

Harout Boujakjian

The other the other kind of issue is that we're both of us are jumping between two IDs.

We both use PyCharm, and then I also use Xcode, and Andrew, Andrew uses Android Studio.

So it's like kind of it's a little tricky, you know, unfortunately.

Carlton Gibson

Yeah.

And I guess uh part of me is I'm sorry, I'm gonna keep banging the same drum all episode, I realize.

But so this part, the the promise of the Kotlin layer is that if you could incorporate that as a library into your iOS app, that mapping could be done like once in the one layer, but whether or not you can, I don't uh you know, I'm not gonna ask the same question again.

You haven't got that yet.

Will Vincent

All right.

Well, we've we've uh we dove right into it, but I'm actually curious if we could back up to um how you two met, how like your backgrounds in programming and how it led you to Django, because that's always interesting to hear.

I I know you both, I believe, studied at George Mason University, is that right?

And maybe that's how you met?

Yeah.

Is that how you met as well?

Harout Boujakjian

We we met through a friend that I guess also went to Mason and then have we've been working together ever since.

I can I can tackle the question first if you want, just quickly go through my background.

So uh I studied math, uh like applied math and computational mathematics at Mason.

Uh I did a lot of programming.

I actually, surprisingly, I'll say this on the year.

I took AP computer science in high school and I just did horribly.

It was in Java, it was just like the worst experience.

And then I retook the class a couple months later after the AP exam in in college, and it was in Python, and I did much, much better.

And everything just clicked.

I don't know if it was because I didn't like Java or just because Python's a great language, but that was kind of where it started.

And then, you know, as every math major unfortunately goes through, uh, you you do a lot of MATLAB when you're doing kind of computational programming.

This this was, you know, just just a life that I lived for a couple of years.

Then I went back to Python, I did some data science, was a data analyst for a little bit.

And then at some point after that, like it, you know, while doing data science, I started building tools for people.

And this for me was just like the big switch.

When I started building like tools for data scientists, for business analysts, for project managers, I realized, okay, like software engineering is a thing that I really love.

And then and and Python has always been my my go-to choice for for building backends.

I jumped around, I did Flask, I did Fast API, I did Django, and then kind of did the entire rotation again.

I guess Fast API wasn't as big at the time when I first started.

And then I don't know, something about Django just I mean, this is so cliche to say, but like the batteries included aspect, the stability, the maturity of the framework.

I was just like, yeah, this is awesome.

I I'm just going to use this.

Carlton Gibson

The that that response, like it was the look on your face as you said it, it's like somehow it's like when you're building an application, it just sort of gets out of your way.

And you know, there might be different frameworks, different options, but Chang is quite sweet in its own in its way.

It's quite, you know.

Um it's had all the edges knocked off it over the years, so it fits the whole very well.

Harout Boujakjian

Yeah.

All right, Andrew, do you want to?

Sure.

Andrew Hornstra

And so also went to Mason.

I studied math and physics and didn't do didn't do hardly any programming for a very long time.

I took one computational data science class, CDS 130, did a little bit of MATLAB, did not enjoy it at all, and then said, I I think I'll be able to have a career as a physicist with no programming, very naively.

Uh and both of those things were wrong.

So I didn't end up going and doing grad school.

Um, and later on at uh at Mason, I decided, you know what, I really should learn how to program.

And started with Python again and read through uh Jake VDP's, Jake Vanderplas's, um, amazing whirlwind tour of Python and Python data science handbook.

And those are some of my favorite tools, some of my favorite books that I've read on learning Python.

Love those.

So I read through those, did some automate the boring stuff, and then found my way at a at a bank as an analyst doing work with pandas for about a year, moved on to being an analyst, just doing SQL for eight hours a day for two years, found my way back to working on huge models with terabytes of data in PySpark.

Uh, and then uh eventually Harut and I started working together right after that in a startup doing doing Django.

Uh well I I was doing Django.

Uh and I when when he told me he wanted to do Django for the back end, I was I had a a trip to Chicago planned.

So I was I I got all my stuff together, got on a train, and the train was like 18, 20 hours.

I just did the Django tutorial on the train.

I did the DREV tutorial on the train.

And I think to this day we do about, well, I do about 30% of my code is written on an Amtrak.

Carlton Gibson

Super.

So do you do you commute regularly or do you just have to go on special trips to get anything done?

Andrew Hornstra

Oh man, it's it's gotta be both.

It has to be it.

I I go down to I'm in Arlington now, and I head down to Richmond to see family and friends pretty regularly.

Um and yeah, trains just the perfect, it's the perfect place to work.

Cheaper than an office, probably.

Carlton Gibson

Cheaper than a cogworking, yeah.

Will Vincent

Back when I was in college, I went to William and Mary for undergrad, and I would go up to Boston, which is almost as long as it can go.

Um it's about 15 hours, but this is pre this is 20 years ago 20 plus years ago.

So I would just read two, three books.

And but there is something, you know, as an adult or as a parent, you know, to Carlton's point to like not be interrupted, you know, train is sort of like daytime, you know, middle of the night, no one's gonna bother you, vibes, which is uh yeah, hard to come by.

Andrew Hornstra

That's great.

And you you cannot leave, you can't distract yourself with something else.

Wi-Fi's too slow to stream, no excuses.

Yeah, yeah.

Carlton Gibson

So just don't like just don't download the um the series before you leave.

So you've got nothing.

So so um pin planet, geodata.

So come on, we don't talk enough about GeoDjango, I think, on the show.

It's like probably the best um geo platform, you know, for the web out there, and yet we hardly ever mention it.

So give us your you know, give give us your um experience with Geojo.

Harout Boujakjian

Andrew, do you wanna talk about that?

Sure.

Andrew Hornstra

Geo Django on Mac OS is our current setup for local dev.

And we don't have it in Docker, which has led to some frustrations.

Uh it by far the most difficult part was getting it installed, getting everything working, all the correct versions of everything, making sure it's detected, pointing Django at the right set in the settings at the right uh GDOL files and all that stuff.

It's just it's utilities.

Harout Boujakjian

It's fair to say that we still have nightmares about GDOL and Proj installation.

Yeah, yeah, yeah.

Carlton Gibson

Absolutely.

Brew.

Harout Boujakjian

Yeah, and brew brew doesn't help in this case.

It just things become a gigantic mess.

Will Vincent

If there was a a Docker image to end all images, would that help or no?

Harout Boujakjian

Because we used to work in Docker, but uh honestly at some point I I just got annoyed with like having to remount and then the the container caches maybe sometimes a little too strong, so you have to rebuild the entire container setup and then it just ruins your flow.

So at some point, I remember talking to Andrew, I was like, let's just put let's just run GUnic directly on our dev machines, and then and it's just so much faster.

Andrew Hornstra

If you can't tell, we're really into doing things that do not scale.

Yeah, so

Will Vincent

that's just well they scale eventually.

Yeah.

And it's just the two of you, so you you know you can get away with both figuring out your local dev setup, right?

If you if it was 20 of you, then I think that's where you know the Docker pane is kind of worth it.

Harout Boujakjian

The the maybe these are the the perks of a two-person team currently.

Will Vincent

I think so.

Andrew Hornstra

Yes.

Yeah.

Will Vincent

But anyways, yeah, so geo, yeah, um, so once it's installed though, what was I mean there so there's obviously Django project docs, but like how did you how do you learn that?

How did you baby step your way to you know building pin planet with it?

Harout Boujakjian

So the well let's let's talk about our our use case first.

So the thing the reason why we wanted uh to use Geojo and and really post GIS is because we wanted to be able to automatically capture, like if you pin somewhere from the lat long, we want to know what continent that's in, and then that also extended to what country that's in, so we can run some continent and and country stats like that are that are on the profile.

So we basically we took a bunch of uh JIS data, we put it in, it's about like a hundred megabytes.

I think it's like you could even look it up, it's the coastlines one meter resolution thing.

OSM data.

Harout Boujakjian

Yeah.

We we put that in in postJIS, and then every time you pin a place, we run uh an ST con I think it's ST contains, an ST contains query to basically say take this uh point, this lat long point, and then tell us like which of these countries it's in and then which continent it's in.

So that that's like the extent of our current postJIS use, but we want to extend that to cities as well, so we can also start capturing some city data.

Andrew Hornstra

Yeah, the the I think, yeah, the extent to what we use Geojo for is that SD contains.

That's very nice to not have to write some uh raw queries and be able to do that.

It's really convenient to be able to just slightly extend the ORM with the Geojle extension.

Uh that's it gives me a lot more confidence about having that work in the future.

Uh but

Carlton Gibson

you're not gonna write it yourself.

Yeah.

Yeah.

Andrew Hornstra

And it's it, I guess the biggest issue we've run into has been when we tried to parallelize testing outside of installation, when we try to parallelize testing, because we uh like re recreating that database with all of the all the you know geodata in it was was a bit of a pain.

Harout Boujakjian

Because you need this is one of the cases where you need the hundred megabytes of of your GIS data in the database, even if you recreate it.

So we have to re-import it every time you recreate the database.

So it's a little bit of a testing, like there's some hassle there.

Carlton Gibson

Yeah, I'm wondering if there's some clever snapshotting, db snapshotting technique you could use where you just sort of swap in a snapshot and go bam and then speed that up, but like you know, I haven't got one to hand.

Harout Boujakjian

Listen if you find one, send it our way, because that would make our testing much faster and easier.

Andrew Hornstra

It does give me an idea though.

Thank you for saying that.

Carlton Gibson

There there's I'm sure there's some Postgres thing that does that.

Oh, I'll find I'll look it up when we're offline and I'll I'll see if I can find

um search.

Will Vincent

So I had fun playing around with your search.

Can I ask what what are you using to power that?

How how is it building out search?

Because that's that's a non-trivial thing too.

Harout Boujakjian

Uh what what's search?

Will Vincent

What's like when I on like I I typed in just zip code for a place, for example.

Uh I guess once I was all logged in, there was a play for a place set where you've been.

I I I believe I I typed in Yeah, I typed in zip code or I typed in the name.

Harout Boujakjian

For our uh for our search, we use Apple Maps, and uh thankfully in Swift they actually have a way to just you could just start typing stuff in and they send the request for you.

So this is really useful.

Um and then we're also we're actually also using Apple Maps, but they're server APIs for Android to have a consistent search experience.

Andrew Hornstra

I've been for a while, I've been for a little while trying to convince Harut to make our worst decision yet, which is to take the some terabyte of OSM uh data out there, load it into a post GIS instance, and uh host our own uh search

functionality with that.

With an awful idea.

Use something that's already out there, but

Harout Boujakjian

the worst part is that when you're two engineers and both of you guys uh uh know like how to do stuff like this and you're excited by big tasks, like I I'm I'm sometimes like, well, maybe maybe we should do that.

And then I think you got a terabyte of data to host, you're gonna have to do caching and all this stuff.

So I

Andrew Hornstra

we'll look at our issues list and decide, yeah.

Will Vincent

That's a good procrastination thing.

It's like, ooh, like this big I think that's a universal feeling.

Carlton Gibson

Ever writ large.

No, it's like we want to do this ourselves because clearly we'll do better than what's available, but can we?

Will Vincent

Yeah, it's all about the journey, anyways.

Harout Boujakjian

So for the place search, so like if you go back to the explore page and you start typing stuff in, that one actually is I I think it's just an I contains right now.

We had considered setting up Elasticsearch, but there were there, I guess it's the prioritization is the real answer for for why we haven't done that.

We want to, we want to improve search.

Andrew Hornstra

Uh it's

Carlton Gibson

actually it's and then you'd ex explore Postgres search before going all the way to Elastic, right?

To a separate thing.

Andrew Hornstra

I'd I'd set up a full text search uh setup uh for for that functionality and tweaking it, it it wasn't great.

I'd set up Trigram search as well, and we just couldn't get the results to be to feel good when you're like actually searching it.

So we'd always type in some really comp people are gonna look for London, right?

Or New York, and you can get one to work well and one to just not work well at all.

And yeah, we we gave up, and I contains just it works really well.

It gives you what you expect.

Carlton Gibson

See, that's my favorite story.

Will Vincent

Yeah, it wasn't it wasn't an issue.

I mean, I think there was something like I was I added in like DjangoCon US, and I typed in Durham, and you know, just Durham, and the default was in the in the UK, which makes sense, but then I just added you know NC.

Um I mean it was yeah, it will it was more than sufficient in searches, you know, everyone compares you to Google, so it is sort of like it it it asymptopes pretty quickly on the results unless you're building a search engine yourself.

Um anyways, okay.

That was that was one thing I wanted to ask about.

Can we can we talk about the PWA?

How did you so what what actually was the PWA?

What was that setup?

Harout Boujakjian

Okay, yeah.

So uh the the way that this initially happened and uh was my girlfriend who I this is the maybe the one beginning portion of the story that we didn't talk about.

So this idea came from my girlfriend wanting to pin all the places she had been to.

And this started in uh November 2021.

So at the time, because I had done so much web development and I was working at a company where it almost felt like I was at an agency, I was just constantly building new projects.

I said, all right, let me see if I can take what you want, which is an app, and build it on the web.

And that's where the the kind of the PWA came up.

I I realized like, oh, okay, you can actually add stuff, you can save it directly to your home screen, it'll function like an app.

So I ended up writing tons and tons of JavaScript, which I'll say this on the air.

I I like JavaScript, I don't have an issue with it.

Uh I don't think it's a better language than Python.

So but in in any case, uh I I built the initial versions of it as a web app.

And we even promoted it pretty heavily as a web app.

Like, you know, got a bunch of people to install it, and then about three months into it, Andrew and I uh uh started working together on it as well because a one-person engineering team for such a big project just doesn't work.

And and now I can't imagine, I I I can't even remember what it was like to work on this without Andrew also being here.

But we had we had uh a web app.

Obviously, the the constraints that I talked about at the beginning of the episode, which is like finding web apps in the app store don't that functionality doesn't exist, push notifications don't exist, Apple makes the experience not so great.

We bit the bullet and said, all right, we should probably just go native.

Andrew Hornstra

Hard to convince the users to to come to you, especially when you have so little visibility.

So you gotta you gotta go to where they are.

Carlton Gibson

Yes, but uh like the visibility in the app store is not great unless you're like one of the chosen five apps they put on the you know the the homepage there.

Like you'd never find Pin Planet by browsing, right?

You'd never find you know some other indie app by browsing.

So it's you've got to do the same amount of marketing.

Harout Boujakjian

Well, so the the cool thing actually is that similar to SEO, there is ASO, which is App Store Optimization.

And if you get the keywords right, you can actually for rank for stuff, which is somewhat surprising.

Andrew Hornstra

Huge increase in signups from one keyword tweak.

Harout Boujakjian

Yeah, we we did like we've done small keyword tweaks here and there to see.

The the trickiest part is actually thinking like, well, you know, this kind of app isn't like the norm.

You know, Instagram is the norm nowadays.

Like if you think about all right, I want to upload my photo somewhere or social media stuff, you think of that.

But pinning all the places you've been to isn't something that people are always thinking about.

So one of the hardest parts of this project is actually thinking, like, all right, well, what would a user potentially type in to find the kind of thing that we've created?

Will Vincent

Yeah.

I mean, one I don't know if you thought of this angle.

One uh I'm I'm familiar with families that have like a family, you know, map, right?

And then they pin like where the family has gone or like, you know, different colors, like if somebody for big so I don't know if the family angle plays into it at all.

I would think it's more like the 20-something backpacking crowd would be like the default, but there's also um yeah, I don't know.

A number of families I know have that big thing, and uh we're always like, oh, we should we should have that, but we don't have a wall that would work for it.

But yeah, yeah, it's a tricky thing, I guess.

Well, you know, that's that's why there's business problems separate from tech problems, I guess, right?

Harout Boujakjian

So Yeah.

Will Vincent

Um Carlton, you have a question?

Carlton Gibson

So oh good, yeah, no.

So I so in that case, then I I guess it's that journey.

It's like how are you finding scaling?

You I mean you're obviously coping, but there comes a point in which you know you're gonna need a third pair of pants and a fourth now to keep growing.

Harout Boujakjian

Yeah, I think right now that if we were to bring on another person, we'd probably bring on someone that does uh more marketing, honestly.

Because uh Anna on the other end, who's our our third co-founder, she's kind of alone in that regard.

Like I help, I try to help out as much as I can with marketing, but that's obviously not I'm not amazing at it.

Although I have been putting together TikTok videos, which is is another story.

But um, yeah, we would we would hire we'd hire a marketing person, and Andrew and I would just continue to work together.

It's not fair to her, because like if we got if we got another engineer and she's like still alone doing all the marketing and and stuff by herself, you know.

Yeah, no, I get it.

Carlton Gibson

I get it.

But you feel like so, but in the flip side of that, it you you must feel like you're not drowning, you know, you're you're you're doing fine.

You're you're running the servers, you're running the back end, you're building the front-end platform, the front-end applications.

You seem to be handling that very well.

Andrew Hornstra

We've we've built, we've spent a lot of time and put quite a bit of effort into building out that kind of supporting uh tech infrastructure.

We've we put a lot of time into our testing.

We didn't start out with testing, uh, we kind of we added it several months in, and that was a that was a big dedicated effort where we said we want to just we want to test, I think we just did all of our views.

Yeah.

Andrew Hornstra

And we've just maintained that coverage.

We've got like 93% coverage.

I think we checked recently, we have almost 500 assert statements.

I mean, yeah.

Harout Boujakjian

Which which gives us a lot of confidence to like continue to you know shift stuff around and build new features in the back end.

Andrew Hornstra

So it took a lot of time, but it saved many times more.

Harout Boujakjian

So that's that's one half of the story.

The other half actually is we we spent a considerable amount of time like getting using Ansible, like writing a writing our own playbook so that we can spin stuff up if we ever need to, which actually has happened multiple times.

We're like, you know, I I can't even I can't I wish I could remember a good one to to say or like a good reason why we brought down one of our servers and then we brought it back up like within just a couple minutes.

I think it was Redis.

I think we had done something with our Redis server, and then we decided, like, all right, you know what, this this is not working.

We want to upgrade to a larger server.

We just brought that one down and brought the new one up, and like it was so fast, and it gives you so much confidence to know that okay, even if something happens to the API server, we'll create a new server, uh new EC2 server, and then we'll run Ansible and and we're good.

And that really, really does give you a lot of comfort.

Andrew Hornstra

It takes you know five minutes for us to deploy as many, as many of these servers as as we want because of you know the the time investment into Ansible up front, which was you know maybe two or three days spread out a couple weeks.

Will Vincent

Were you always on EC2?

Or I I've I believe I read somewhere you were Heroku at one point, or did you always go EC2?

Harout Boujakjian

No, no, no.

We've we've always been always EC2 and EC2.

Yeah.

Will Vincent

Right.

And I assume that's because you both have prior experience in work settings using EC2, or you just jumped right to EC2 just because that's what the big kids do.

Andrew Hornstra

I think uh he's looking at me to confirm.

Yes, we both have uh experience with with EC2.

Harout Boujakjian

Andrew is more Andrew's actually more comfortable with AWS because of his work uh when he was in banking.

I used to work at a company where uh you could like just go to an internal website and provision a new Linux server.

So for me, and then that was like the easiest way to basically set stuff up.

So both of us have have a lot of experience like running stuff directly on Linux.

And I I don't know, I guess maybe we just find that it's easier.

Andrew Hornstra

Yeah, it's it's very we get a machine, we don't get someone's platform, we don't get uh like the specialty hosting.

We get a machine, I can SSH into it, I can do what I want.

That's to me, that's simpler.

So uh yeah, that's why we stuck with easy term.

Harout Boujakjian

But but let me say that uh, and and I think this happens to us from time to time.

When newer, younger, uh junior engineers say, like, oh, well, how should we go about deploying this?

I never recommend AWS, I never recommend an EC2 instance, I never recommend anything Linux.

I'm like, use a PaaS, it's so much easier.

You have Heroku, you have Fly, there's a bunch of them.

It makes it so, so much easier.

Because I think the unfortunate thing is like it can be really scary.

And when you're new to programming and deployment and you see all the work you have to put in, you're like, oh man, this is what I gotta go through.

Carlton Gibson

Yeah, it's like a cliff of complexity.

It's like, wow, all of that.

So I want to dig into your testing.

So you're testing the Django, your Django application, mainly with kind of with the view test, the API client or the test client and testing sort of the view interface.

Yeah, yeah.

Yep.

Is that right?

Yeah.

And then I imagine you've got, you know, if you've got special model methods or whatever, you might have a particular unit test to cover that because you know, helps you write the thing, if nothing else.

What about testing against the front-end application?

So how do you how do you test your iOS app or your Android Android app?

Andrew Hornstra

Yeah, how do we test our

Harout Boujakjian

app we don't, unfortunately.

The the problem with the front end is it's so dynamic, not in terms like it's dynamic in terms of how frequently things are changing.

And unfortunately, there just this is probably the point where the two-person team breaks down a little bit.

We just don't have the manpower to say, all right, let's go through and do the same amount of testing for our front end.

Andrew Hornstra

We're we spend so much time learning new ways to do things and mistakes that we were making that we would have to rewrite our tests so frequently.

More frequently than I think we'd catch anything breaking, because things haven't really been breaking too much.

Harout Boujakjian

Well, fingers crossed.

Carlton Gibson

Don't notice

you get off the show.

Yeah, exactly.

Harout Boujakjian

The I I will say the one thing that's actually useful here is that both Swift and Kotlin are type languages.

And coming, both of us have written, uh obviously use Python and JavaScript, which are super dynamic, but the type languages can actually save you from a lot of these really little mistakes.

Andrew Hornstra

I did not appreciate what you get from that kind of strict typing and explicit typing with these languages.

And man, I really like it.

Harout Boujakjian

Yeah.

Andrew Hornstra

It's not a necessity for me going for I'm still very happy with Python.

I still enjoy writing that uh more, but it's it has not been an impediment for writing Kotlin.

It it's forced me to think more about what I'm uh what I'm writing and and code reusability.

Uh, but yeah, I've it's been very a very nice feature, not in my way at all, surprisingly.

Carlton Gibson

It's like if it runs, there's a there's a reasonable chance it runs right.

Yeah.

Harout Boujakjian

Yeah, surprisingly, actually.

Andrew Hornstra

Who would have thought?

Will Vincent

Well, that's one of the the the open questions, I guess, in the Django community is you know whether to mandate or support typing.

And so far they haven't weighed in, which because there is obviously the trade-off for beginners if you say, okay, it just raises the bar a bit more.

And yet I would say the majority of projects at scale seem to use some s sort of typing with with Python because yeah, it saves you time in the long run.

Harout Boujakjian

Can I just say that I'm very pro type hints for Django as well?

And I I I follow the issue and I'm like, oh my god, I really hope to get to this soon, but I don't know.

But we do we actually use type hints for everything that's not Django in Python.

Will Vincent

Okay.

Andrew Hornstra

Yeah.

Everything we've written, I think.

Yeah, like

Harout Boujakjian

all of our utility methods and stuff we we we type into.

Carlton Gibson

And do you using um like a type checker with that as well?

Like you do in the channel.

Harout Boujakjian

We're just using uh built-in PyCharm.

The problem is I installed MyPy and then it complained that all of the Django stuff isn't type, so it's yeah.

Carlton Gibson

Yeah, that's I know that if you read the MyPy docs in some depth, it talks about how to progressively type your project, but it's like it's really hard to get anything going at all.

It's like I'm here for a day and I'm I'm still getting a thousand errors, and I maybe I'm not clever enough to work out all the config options, but uh surely there might there should be a MyPy progressive command that just sort of says, look, we'll start off with this one.

Can you fix this one?

Carlton Gibson

Okay, you fix that one, can you fix this one now?

But that doesn't exist.

Will Vincent

Um so we we've mentioned performance, but I'm curious as you've gone from prototype to production, have there been some notable big performance issues that cropped up and um and how did you deal with them?

I mean, I'm sure there are, but you know, just like speeding up your tests or caching, like are there anything that come to mind?

Because I find those are always interesting to hear what what what pops up as you scale?

Andrew Hornstra

One of the one of the testing speed ups we actually it it was an issue that we ran into at first where we had we were still sending our images because you can upload images for your places, and we have some sample images, and we we mock the the upload because we have a lot of custom stuff in that uh they were still getting sent to uh S3 th

rough tests, and I think S3 right now is littered with a bunch of test images.

Harout Boujakjian

Yeah, test underscore one, test underscore two.

A million of those.

Andrew Hornstra

Uh so finding finding the right testing configurations, overriding your storage's uh config, which was with the new 4.2 update for a while, it was tough for us to it was tough to get the storage pointed towards a local towards storing locally.

Harout Boujakjian

Yeah.

We couldn't get file system storage to work in testing after the 4.2 upgrade.

And we followed the issue, and some people had very similar issues, but not exactly.

And then I don't know what we did.

It works now.

Andrew Hornstra

4.2.4.

Harout Boujakjian

Oh 4.2.4, I guess maybe had had a fix for it.

Andrew Hornstra

There was there's a small line in the in the patch notes about uh something.

I think it's like prioritizing how it gets storage, it gets the the proper storage.

I don't recall exactly what it was, but it it it fixed it, it works now.

Uh but we talked about earlier for performance for testing.

We tried parallelizing it, which worked really well until we needed to load in all that OSM uh coastline data.

Harout Boujakjian

Oh, actually, you know what's a really good performance thing that uh I'll I'll start it, but Andrew will finish it.

For our Explore page, when you first click it open and you get all of the people's pins, uh we have a monster uh SQL query for that.

Uh we don't have any, there's no machine learning just yet.

We had considered putting it in, but uh again, perks of a two-person team, it's it's a little too much effort.

Um but that was taking multiple seconds.

It was taking maybe one or two seconds in dev.

And then I ran it in prod and it was like multiple seconds, and then I told Andrew, I was like, okay, we have we have an issue, and then

Andrew Hornstra

yeah, that was so we have we we have this ranking of all of our places, ranking with noise, and it looked at all 10,000 of our pins, and it did a lot of it did a lot of operations, a lot of coun

ts, a lot of over windows and partition.

This is all ORM by the way, which has been very been very nice.

Uh and we managed to cut it down to what like 150-200 milliseconds?

Harout Boujakjian

So yeah, roughly, something like that.

Andrew Hornstra

Just by excluding ones that we knew we wouldn't we wouldn't use.

So the simplest solution cut out a ton of our actual query time where we just went in and we're not gonna want to present, you know, in the explorer things without images.

Right?

It's gonna be a boring thing to look at, and they're not gonna get to it anyway.

No one's gonna scroll to 4,000 uh.

Harout Boujakjian

Uh and this is like a crazy six-way, seven-way join.

Like there's so much data is coming.

We basically aggregate our entire database, and we're wondering why, like, oh man, why is this so slow?

Yeah, good.

It's like when you cut that.

Carlton Gibson

I mean, what's what's nice is that you've you've got multi-second query, bit of brain work comes down to you know, quick enough.

It's often the case, like people are like, oh, why is it or Django slow?

Or no, your query is slow.

Let's fix your query and we fix the problem, right?

Will Vincent

Carlton, was it was it um Matias's Django image field that we just highlighted in the newsletter, right?

I think you was that Yes, yeah,

Carlton Gibson

yeah, last year.

I haven't I was using I'm using that on a on a project.

Um I wanted a I it's just a little field that lets you um pick um upload an image but and pick a point of interest, uh you know, a place in the image to sort of be the focal point if you in case it gets cropped.

And I wanted that for avatar images.

You know, you upload an image, you want to crop it round, and you want to say, look, that's this that's that's the bridge of my nose there.

So that's the point of my nose.

Um and there are various options, and but I I wanted for for various reasons I wanted to use that one because it's mainly because it's less code.

Harout Boujakjian

Um that's cool, actually.

I don't I don't think I've I haven't heard of that one.

Yeah, well, we can look into that.

Well, you just uh to talk a little bit.

Will Vincent

You don't subscribe to the Django News newsletter because it was featured in there.

Andrew Hornstra

Uh you know, I I read every single one of those one.

Will Vincent

Me too.

Me too, sometimes.

Yeah, yeah.

Harout Boujakjian

I don't know what it is.

Maybe I prefer the podcast over over reading.

I don't I don't know what it is.

Every time I see a podcast episode, I'm like, oh boy, here we go.

Oh, but that's how I that's how I stay up to date with all the stuff in in Django.

For real though, people are surprised, like, like, how do you know all this stuff about Django?

And I'm like, there's an amazing podcast.

You know, and it it really does help.

Andrew Hornstra

I just spend too much time on Twitter.

Yeah.

Yeah.

Will Vincent

Okay, well, I feel a little bit better because sometimes I feel like I'm repeating myself because you know, if it's like in the newsletter, we mentioned it on the podcast, maybe I write something about it.

But I know that not everyone is following every single thing that I do.

So um, I need to that's good to hear.

Harout Boujakjian

I will say uh just one comment about the the images.

Uh our problems with images actually weren't even in Django, they were client side because when you are uploading images straight from your phone, we're talking, I mean, nowadays, like five to ten megapixel images are not it's not out of the norm.

Multiply that by potentially 10, 20, 30.

Like if you add photo dump images to your place, plus you add images to each of your spots.

That's like I remember the first time I had Anna pin something, it took over a minute and she had like five or six images.

And I thought, that's a problem.

So we actually have to handle compression on the front end and resizing before we can even send it.

Carlton Gibson

Brilliant.

And so you you will actually crop the image on the client before send uploading or yeah.

Harout Boujakjian

Yeah.

We we so we don't crop, but we do we do resize and we add a very light amount of compression to bring it around 500 kb, and then that makes the request significantly faster.

Andrew Hornstra

We know what dimensions we're gonna present to the user.

Carlton Gibson

Yeah, right.

So you'd no point having outside of that.

Andrew Hornstra

Yeah, that's that's been the nice part about developing for mobile.

Yeah, you've got a bunch of different screen sizes, but versus you know, if you're developing for desktop web, I don't have to support and care about a 34-inch monitor.

Yeah, and and the 21-inch monitor at the same time.

Carlton Gibson

Yeah.

And the the the angry user who uploaded that panoramic page show that

Andrew Hornstra

why can't this be full quality, 100 meg?

Yeah, yeah, yeah.

Yeah.

Will Vincent

Um, well, we're we're coming up a little on time.

Are there can you tell us um like what's next for Pin Planet, right?

Like you have obviously an Android app coming.

Are there any new new things you're excited about uh working on related to it?

Harout Boujakjian

So I I think the Android app is is the biggest one.

We have tons and tons of people that are asking about asking about it on Android.

And uh I I guess now hopefully I'm not sure when the podcast will come out, but I imagine the Android app will be out uh either before then or very close.

Uh the other kind of cool thing that we're we're doing is uh we're building a version of Pin Planet for the Vision Pro, the Apple Vision Pro.

And hopefully that will be coming out.

We put a video out, uh like a short snippet out on YouTube and we post it on our socials and stuff, and and people seem to there seems to be a little bit of interest there.

I can't afford the Vision Pro goggles, but I can build for them.

Carlton Gibson

I got four kids, I can't afford them.

Andrew Hornstra

I've seen that in the simulator.

It would you show that to me.

It looks it looks really cool.

Yeah.

Oh, we're on iPad too.

Harout Boujakjian

Oh yeah, yeah.

Pin Planet does actually also work on iPad.

Oh.

Will Vincent

How is it is that a recent thing or is that that also supporting iPads?

Harout Boujakjian

Back that was back in October.

Uh most of the work was figuring out how to automatically resize images based on the width.

And then once I figured that out, it actually turned out to be not super difficult to do.

Will Vincent

So well there's I mean, there's there's so many different sizes of iPads these days, but I guess on your end it wasn't like three times as much work to support three different sizes with like the mini, the air, and the pro.

Harout Boujakjian

Surprisingly not, no.

No, once once we figured out how to resize images automatically, that that was like the big thing.

And then iPad handles uh you can do uh iPhone does it as well, but on iPad it's a bigger deal for dynamic type.

And once we kind of constrained our dynamic type to not be like super gigantic text, like one letter is the size of like half the screen.

If you constrain it a little bit, then you have you have an app that works on iPod pretty easily.

Andrew Hornstra

So Android, I'm worried about though.

Some devices won't even honor uh your contracts for certain events, like if you tell them you can only pick this many images, some devices just will say, we'll pick as many as we want.

So that that I'm worried about.

But we'll cross the website.

Will Vincent

There must be a hierarchy of you know, the top two or three Android support devices have or I think have the lion's share.

Or maybe not.

I don't actually I don't know.

Andrew Hornstra

Yeah.

Well, from whatever publicly available data we've got.

Yeah, and and that's what we're targeting.

Right.

Yeah.

Yeah.

Will Vincent

If it's that's a thing.

If it's it doesn't sound it's a big enough issue, so I want to let you know.

Yeah.

Yeah.

Carlton Gibson

It does it it doesn't sound as if it's changed too much from my day.

It was like very much like you know, on the i the iOS devices, so it was not too hard to customize them, and then there was a w a sea of different Android options, and you had to just pick the ones you had the sort of capacity to support, basically.

Harout Boujakjian

Yeah, yeah.

So like when you have like pixels are amazing, Samsung, higher-end Samsung devices are amazing, like those are the easiest to support, but then you have these random uh I actually I guess not random, they're probably hugely uh popular devices in countries like India or uh China or Bangladesh.

And it's like all right, these these are a little bit hard to support because they're they're a lot less expensive, but they're way less powerful.

So you need an app that can also work hopefully 80% as well on on the lower end devices, you know, the ones that aren't quite as powerful.

So it's it's tricky to that's a tricky portion to balance, in my opinion.

Carlton Gibson

But that's also a cool engineering challenge.

And can I make this can I make the app efficient so that it will run on a lower end device?

I think we have the same problem with websites, right?

If you load all the JavaScript in the world, your your website won't run on a lot of people's phones.

Well, okay, let's see if we can keep it a bit lighter so we're more open to everybody.

That's cool.

If you had a magic wand, and you don't have to just say Django, but if you had a magic wand, what would you fix?

I'll let you both have an answer if you want.

Harout Boujakjian

Uh okay.

I I have I have two answers.

The first one would be I'd love to have typing in Django.

That would be one.

Harout Boujakjian

And then second, I I feel like this one maybe is a little bit less of a selfish one.

I would want um rest framework and channels to be a part of core because, in my opinion, I think this is hurting the marketing of Django.

And this is coming from someone who has done a lot of like JavaScript.

I love JavaScript, I do a lot of front-end work.

And I also love Django.

It's like my go-to framework of choice for anything I do in the back end.

But unfortunately, like we as a community are competing with VC-backed JavaScript frameworks like Next.

And we we need to, I think not having like API support at the very least in core makes it look like Django is a framework that only does, you know, uh like old server-rendered HTML templates.

When actually you can build very robust, stable APIs with with Django and also WebSocket support.

I so that would that would be mine.

I think more for the benefit of the community.

Okay.

Carlton Gibson

Interesting.

Good.

Carlton Gibson

Andrew, if you go on.

Andrew Hornstra

The easiest one is to just say throttling.

Uh I I ran into some issues with like the granularity of throttling.

Uh and you know, we wanted to restrict more of our writes versus our reads, um, and kind of ran into some we had to we had to make a more custom solution for that.

Uh but the the the biggest thing that's actually cost me the most time had been the ORM is very nice.

I use it a lot.

I almost exclusively use the ORM in in uh Pen Planet, some exceptions for our analytics dashboard.

Uh but and I I understand that it's trying to be SQL backend agnostic with the language that it uses for some of its methods.

But man sometimes I feel like there's such a disconnect between the operations you do on the in the ORM and what's actually happening in the sequel.

And I'm very much a SQL person.

I have a lot of experience with it and I can appreciate not wanting to require that kind of experience for uh you know the new developer.

But sometimes it feels like there's there's gotta be some middle ground where you can more closely reflect the SQL standard versus an abstract ORM of its own design without sacrificing the accessibility to new developers.

It makes it easier to come back to after a while if you're working on Kotlin for a bit and you've written SQL and you come back to Django and you're like, all right, what what do these keywords mean?

What's actually happening?

When does it allow me to not get the ID in this instance versus requiring me to include the ID.

Yeah.

Yeah yeah yeah

yeah yeah yeah no I get you.

Will Vincent

Well I think we're we're we're gonna have uh Simon Sherrette on in the future who who uh is that right Carlton I believe he agreed yeah

Carlton Gibson

yeah yeah he's he said yes I'm not

Will Vincent

he's uh he's very very in the weeds on the Django or um um so we can we can pose that to him I'm sure he has a take oh no we can say Andrew wanted to know

Carlton Gibson

right go on well you were good you were gonna also

Will Vincent

is there anything we didn't we didn't bring up

um in our discussion um so obviously people can go in the app store and maybe the Android store we'll put a link if by the time it comes out for Pin Planet um are there other ways people should stay in touch?

Harout Boujakjian

Uh I don't I don't think anything I don't think anything else really comes to mind.

You know if you if you use the app leave us a leave us a rating of the apps for that does actually help out significantly yeah and then other than that I I don't think there's anything else.

I mean it's been a really fun journey uh I just want to emphasize again that like Django is a it is just a phenomenal back end framework and it is boring and that's amazing.

It's mature it's stable it stays out of the way you know that it's working it you know when you have to deal with all the other complexities of of building an app it's nice when you don't have to pour it about one portion of it.

You know that okay this just works and and that's that's awesome.

Will Vincent

Good well we agree obviously but yeah I think it's also yeah for the two of for the two of you I mean it's it's quite a complex mature feeling app and so the fact that you know you can build it in a relatively short period of time um you should feel proud of that and it also speaks to the power of Django.

Harout Boujakjian

So yeah

thank you thank you very much yeah

Carlton Gibson

Rude Andrew thank you for coming on that was I've really enjoyed the chat it's been absolutely super um thanks for joining us folks with DjangoChat com and we'll see you next time bye bye