Learn Python with Talk Python's 270 hours of courses

#434: Building Mobile Apps Backed with Python Transcript

Recorded on Saturday, Sep 9, 2023.

00:00 Are you building a mobile app and wondering where Python fits in in the mix?

00:04 Are you supporting others building these apps with back-end APIs written in Python?

00:09 Can you write your entire app end-to-end in Python?

00:12 Well, I have a great panel put together to discuss exactly this, and they all have a different and unique take on the options.

00:19 Welcome to Loren Aguey, Harout Boujakjian, Andreas Kuhn, Jeyfrin, and Joshua.

00:25 This is Talk Python to Me, episode 434, recorded September 9th, 2023.

00:44 Welcome to Talk Python to Me, a weekly podcast on Python.

00:48 This is your host, Michael Kennedy.

00:50 Follow me on Mastodon, where I'm @mkennedy, and follow the podcast using @talkpython.

00:55 Both on mastodon.org.

00:57 Keep up with the show and listen to over seven years of past episodes at Talkpython.fm.

01:02 We've started streaming most of our episodes live on YouTube.

01:06 Subscribe to our YouTube channel over at Talkpython.fm/YouTube to get notified about upcoming shows and be part of that episode.

01:14 This episode is sponsored by Sentry.

01:16 Don't let those errors go unnoticed.

01:18 Use Sentry.

01:19 Get started at talkpython.fm/Sentry.

01:23 And it's also brought to you by us over at Talk Python Training.

01:27 Did you know that we have over 250 hours of Python courses?

01:31 Yeah, that's right.

01:32 Check them out at talkpython.fm/courses.

01:35 Hey everyone, Andreas, Harout, Loren, Jeyfrin, and Joshua, all of you, welcome to the show.

01:42 So exciting to have you here.

01:43 Thank you so much.

01:44 I'm really happy to be here.

01:45 Yeah, great to be here.

01:46 Sam, yeah, it's great to be here.

01:47 This is going to be a really fun topic.

01:49 And I think it's one that puts Python into an interesting space.

01:54 Python's really popular, as everyone listening knows.

01:57 Its growth has been super, super high since 2012.

02:01 And yet it really doesn't play a huge part in mobile apps.

02:06 Although we do have some folks representing Kivi here via their app, which is pretty awesome.

02:11 So I'm very excited about that.

02:13 But it's not the first language you might pick for writing mobile apps.

02:17 If you just say, all I care about is mobile apps, I just want to get started.

02:20 But I think there's a lot of things that Python plays a part in, right?

02:25 Backend services.

02:26 And I'm really excited to hear about the Kivi experience as well.

02:29 So there's a ton of Python people out there who either are building or want to build some kind of mobile app.

02:35 It's obviously one of the most important computing platforms.

02:37 So I think everyone's going to learn from everyone's experience here.

02:41 So I think let's just, I guess I'll go around by app.

02:46 That's the best way I can kind of know to do this.

02:48 And have you all introduce yourself.

02:50 And then actually, let's just have you introduce yourself, then we'll talk about the app.

02:53 So Andreas, we'll go around the Brady Bunch circle of pictures we got on the screen here.

02:58 Andreas, go first.

02:59 Yeah, my name is Andreas.

03:01 I live and work in Stockholm, Sweden.

03:03 And I've been working with Python for about 10 years now.

03:07 And have been working with, I used to work for an online tailor-made suit company, where we developed the platform ourselves.

03:16 And now I'm working with a membership management company, which is a Django app that we are running in the background.

03:23 Nice.

03:24 Very exciting.

03:25 Looking forward to hearing about it.

03:26 Harut.

03:27 Hey, guys, my name is Harut.

03:28 I have been working in Python for like, let's say a decade on and off.

03:33 My background is in applied and computational math.

03:36 So I did a lot of MATLAB in college, and then found my way kind of over into Python, did some data analytics, some data science.

03:44 And then for the past few years, found that building tools for people is actually what I really enjoy.

03:48 So I do a lot of work with data visualization, a lot of JavaScript.

03:52 But if there's one thing that's been consistent in the past 10 years, it's been my Python usage overall.

03:56 Awesome.

03:57 That's kind of how I started as well, building scientific tools and stuff.

03:59 Lauren.

04:00 Hi, everyone.

04:01 Yeah, my name is Lauren.

04:02 I've been programming since 2020.

04:03 Prior to that, it was basically a direct result of COVID.

04:05 Prior to that, I was a live sound engineer.

04:07 So setting up for concerts and corporate events, all that.

04:09 All that went away pretty much overnight in March 2020.

04:12 So yeah, I started learning programming, landed on Flutter.

04:15 That's my main thing.

04:16 Fast forward a couple years, I had finished up a contract with a company called T-Vision Insights.

04:20 Luckily for me, most of their services are written in Python.

04:23 One of the lead engineers there is a fan of both your podcasts, Michael, and gave me a tip that you're looking for a Flutter developer, which brings me here.

04:30 So I was involved in building the Talk Python mobile app.

04:32 Yeah, now I'm on the Flutter team for an insurance company.

04:35 I did not write any Python until I had finished the mobile app.

04:39 I had sat through a lot of those courses throughout the development process, kind of landed on FastAPI for my backend services.

04:44 Really like it, was really impressed with how easy it was to get started and all that.

04:47 So yeah, that's where I'm at.

04:48 Yeah, awesome.

04:49 I'm really looking forward to talking to you, sort of the interplay of how we work together to build that mobile app.

04:54 And it's just so well-received.

04:55 It's such a solid app.

04:56 The only people who don't seem to receive it well is the app store people.

04:59 We'll save that for later.

05:02 If anyone wants to see me cry, there's a good chance at the end of this episode, I will just be in tears.

05:08 But we'll save that for later.

05:09 But I do want to ask, I mean, I think that's a really interesting background and people, a lot of people listen to this show and they feel like, they hear from guests who are like, yeah, I got my computer science degree.

05:19 I was like an accelerated student.

05:21 So I got it when I was 16.

05:23 And then, you know, like, they're like, well, I admire this person and they're doing awesome stuff.

05:27 But I didn't get my computer science degree at 16.

05:29 Like I was still in high school and I didn't start programming until I was 30 or, you know, and is there still a place for me?

05:35 And I think you've super excelled at that in honestly, with Flutter and Dart, which is not one of the simpler beginner, more beginner friendly language.

05:44 Like it's a pretty seriously structured language.

05:48 So maybe just, you know, give people your thoughts of your three year journey, I guess at this point.

05:52 First of all, thank you for saying that.

05:53 And yeah, I listened to your podcast.

05:54 You have some very impressive people on your show.

05:57 My first line of code till 36, right?

05:59 It was weird, a weird time 2020, obviously.

06:02 But to be fair, I did have a lot of time on my hands, like many of us did, you know, very abruptly.

06:07 So I kind of went all in, you know, that's just I got hooked fast.

06:11 And I had a lot of fun.

06:13 You know, it's kind of thing not everybody gravitates towards programming, they try it, they don't like it.

06:17 It's not for everybody, to be fair.

06:18 But all it is, is consistency and putting in the time.

06:20 If you don't have a degree, it's fine.

06:22 I even chose Flutter is not like if you're looking for a job, there are better technologies to choose if you're just trying to, you know, land a job, right?

06:30 Python obviously way more ubiquitous in terms of finding a job, even on the front end, learning something like React, way more jobs.

06:37 But all that to say, it's still possible.

06:38 I didn't go to college for audio or programming.

06:41 But again, putting the time consistency, the job hunting process was not particularly fun.

06:46 It's pretty grueling.

06:47 But sooner or later, you just keep at it and you can get there.

06:49 So it's never too late to get started.

06:51 Awesome.

06:52 Yeah, I know you're doing good stuff these days.

06:54 That's great.

06:55 Thanks, Jeffrey and Joshua.

06:56 First of all, my name is Joshua.

06:57 His name is Jeffrey and Jeffrey and Julian.

07:01 We are from Colombia and he is a Spanish speaker.

07:04 So he doesn't know to speak English.

07:07 So I'm here to help.

07:08 Sure, sure.

07:09 Yes.

07:10 Oh, wonderful.

07:11 Well, welcome to both of you.

07:12 Okay, thank you.

07:13 Tell us a bit about yourselves.

07:14 Okay.

07:15 Julian, who is the main programmer or designer of his app, started like 15 years ago when he was playing some video games and he wanted to know how did they work.

07:28 So he started to look for it and started programming, you know, like self-taught people.

07:35 And that's it.

07:37 He started a career, a university career, and he's a very talented designer.

07:42 And also, you know, as a friend.

07:44 So he is a very close friend of mine.

07:48 And I can say you, I can say, I can tell you that I think maybe the right place to start our conversation.

07:53 Now everybody knows all of you is just a quick introduction to your apps.

07:58 And then we'll dive into maybe the first thing is everyone here has chosen a different framework, a different language.

08:04 I think that is in and of itself is pretty interesting that we're all here as fans of Python or with some kind of Python roots or interests.

08:13 And yet that is not, you know, it's not necessarily what we chose to write the apps in.

08:18 So I think that's going to be a real interesting conversation, but let's jump over and maybe start with this one.

08:23 So PinPlanet, I forgot which app goes with which person or group.

08:28 So we'll have to just jump in.

08:29 Who's PinPlanet?

08:30 I'm the creator of PinPlanet.

08:32 The idea started from, actually started from my girlfriend in December 2020 or October 2021.

08:38 I'm sorry.

08:39 She's a big traveler.

08:40 She's always wanted a way to kind of curate all of her travels, kind of keep them in one place.

08:44 And the thing that she told me at the time that really sold me was, I want to be able to show all my friends, like my place I've traveled to with pins on a 3D globe that spins, which is actually the second screenshot on the screen for, I guess, for people who are watching the live stream.

08:59 And then from there I was just, I was sold.

09:01 So I started, I started building this.

09:03 I will say that the original version of this was actually a web app, a progressive web app, and I was a huge proponent of it at the time.

09:10 But for anybody who's used PWAs, they know the experience on both Apple and Google.

09:14 Somehow both of them are just not that great.

09:18 You just cannot seem to win.

09:20 And we've trained users for what, like a decade to look for apps in the app store.

09:24 So that's also kind of a pain.

09:26 Yeah.

09:27 And you can't really list your progressive web app in the app store.

09:28 Right.

09:29 I think actually progressive web apps might be passable because there's a lot of bad frameworks out there that it would, they would compete with, but the discoverability is, is the killer, right?

09:38 It's quite tough.

09:39 So I ended up building, building this app about three or four months into it.

09:42 I brought my friend Andrew as well.

09:44 I'm actually sitting in his office right now.

09:46 He does quite a lot of Python as well.

09:47 More Python than I do.

09:48 He's the person that I kind of look up to when it comes to, to writing.

09:52 I can't forget the, I forgot the word for it now.

09:54 Not Pythonista, but it'll, it'll come to me.

09:57 Oh, writing more Pythonic code.

09:59 Yes.

10:00 And then from there, some, I think somewhere around the summer I decided, okay, you know what, this is the app is gaining a lot of traction, but people want a native experience.

10:08 So I kind of took the plunge, learned Swift and SwiftUI, which is a really awesome framework released by Apple.

10:14 And then we, we released the, the native version, which focuses on like, you can pin all your places.

10:19 You can add your spots, your reviews, your photos.

10:21 You can add travel buddies.

10:22 You guys can collaborate on trips together.

10:24 There's a really cool explore page where you can see kind of the best pins that other people have put up.

10:29 And we're just, you know, adding more features over time.

10:32 It's gaining traction.

10:33 It's a lot of fun.

10:34 It's really exciting.

10:35 Awesome.

10:36 Congratulations.

10:37 Thank you.

10:38 I see that it's a, well, first of all, it has five star, a five star review out of a bunch of ratings, which is pretty ridiculous.

10:42 That's awesome.

10:43 Also that it's free though.

10:44 Is it just free free?

10:45 Is there in-app purchases or what's the story?

10:48 It's completely free.

10:49 Just looking for growth and traction and you'll figure it out.

10:52 Yeah.

10:53 Oh, actually, since you're on the screenshots, Michael, I do want to say thank you for the tip, the screenshots pro website or web app.

10:58 Oh yeah.

10:59 That helped out quite a bit.

11:00 Yeah.

11:02 Really appreciate it.

11:03 Well, it's a pay it forward because Lauren suggested that to me from his app.

11:07 So it goes.

11:08 And on, on it goes.

11:09 Yeah.

11:10 So I think it was screenshot, I believe was screenshots pro.

11:14 Let me screenshots.pro is the app that I use.

11:17 Yeah.

11:18 You can come up with really fantastic looking screenshots.

11:20 I'm super happy with how that came out.

11:22 All right.

11:23 My club.

11:24 That's mine.

11:25 Yeah.

11:26 And my club is, like I said, previously, this is a membership management program.

11:30 We've previously been working with progressive web apps as well, but we had a Ruby on Rails developer who did those, and we are a Django backend in where most of the information was.

11:40 So we had a lot of different servers connecting to our backend and doing all of these strange things instead of just having one.

11:48 And exactly like Harut talked about, you need to have your app on the app store because there's a lot of people asking, where is your app?

11:55 Even though we did have like progressive web apps and you were able to see everything.

11:59 But what we have now is we've developed so that all of our users can handle the members with their invoices, their memberships in various groups and so on to handle if they're going to certain trainings or going to certain meetups and just answer to that in the app.

12:19 And we also have like push notifications and all of that as well.

12:23 Yeah.

12:24 I think one of the main reasons people might want to create an app as a business is for the notifications because that's an interesting way to reach out for sure.

12:31 It really has helped a lot as well.

12:33 I mean, just being on the app store, regardless if you're on Android or on iOS, just being there actually means that things start to happen with the usage and so on.

12:44 We have about, I think in total about 8,000 installs on these apps, which from going from nothing about half a year ago is rather good for us.

12:55 We're a rather small company, so it's...

12:57 Yeah, that's really good.

12:58 We are, everything's in Swedish.

12:59 We are a Swedish company and we don't have anything translated into English yet.

13:04 The screenshots are awesome.

13:05 And I think it's, it makes perfect sense, right?

13:08 Like not everything needs to be in English, even though it does seem like it some of the times I suppose.

13:13 All right.

13:14 V3D.

13:15 Let's talk about that guys.

13:17 Jeffrey is going to talk in Spanish and I'm going to translate.

13:21 Yeah.

13:22 Thanks.

13:23 V3D es una aplicación que inicié en el año 2020.

13:28 V3D es una aplicación que comenzó a diseñar en la pandemia de 2020.

13:36 Inicialmente era para mostrar gráficos 3D, ya que como hobby soy modelador 3D en el software de Blender.

13:45 It was initially just to show graphics on 3D because he is a developer for this.

13:53 Poco a poco vinieron más ideas y quise seguir la programación, llevándolas al punto en el que está hoy, donde soporta texturizado, creación de materiales, también soporta mando de control Xbox y tiene un módulo de realidad virtual.

14:13 And by step I came up with some ideas to implement to the app, like featuring and modeling.

14:21 We can use an Xbox controller.

14:24 Yes, it has a lot of features.

14:27 That's pretty cool to use the Xbox controller with the mobile devices.

14:30 Yeah.

14:31 Actualmente estoy trabajando en una actualización que involucra texturizado con imágenes en movimiento.

14:37 Sigo trabajando en ella y próximamente será lanzada.

14:42 I'm currently working on animated textures, features.

14:46 Yes, I'm working on it and very soon it's going to be ready.

14:50 Yeah, this looks like an amazing app.

14:52 This is built in Kivy, yeah?

14:54 Exactly.

14:55 Awesome.

14:56 This portion of Talk Python to Me is brought to you by Sentry.

15:00 Is your Python application fast or does it sometimes suffer from slowdowns and unexpected latency?

15:07 Does this usually only happen in production?

15:09 It's really tough to track down the problems at that point, isn't it?

15:13 If you've looked at APM, application performance monitoring products before, they may have felt out of place for software teams.

15:19 Many of them are more focused on legacy problems made for ops and infrastructure teams to keep their infrastructure and services up and running.

15:27 Sentry has just launched their new APM service.

15:31 In Sentry's approach to application monitoring is focused on being actionable, affordable and actually built for developers, whether it's a slow running query or latent payment endpoint that's at risk of timing out and causing sales to tank.

15:44 Sentry removes the complexity and does the analysis for you, surfacing the most critical performance issues so you can address them immediately.

15:52 Most legacy APM tools focus on an ingest everything approach, resulting in high storage costs, noisy environments and an enormous amount of telemetry data most developers will never need to analyze.

16:05 Sentry has taken a different approach, building the most affordable APM solution in the market.

16:10 They remove the noise and extract the maximum value out of your performance data while passing the savings directly on to you, especially for Talk Python listeners who use the code Talk Python.

16:21 So get started at Talkpython.fm/Sentry and be sure to use their code talkpython, all lowercase, so you let them know that you heard about them from us.

16:31 My thanks to Sentry for keeping this podcast going strong.

16:34 Now, Lauren, I was going to pull up, I will pull up the Talk Python app that we built together, the mobile app that you built and the backend stuff that I built.

16:44 You also have an app that you recently built just straight in Flutter.

16:48 Maybe just pull that up real quick as well.

16:49 I have it installed and I like it, but I don't remember exactly what to search for.

16:53 Oh, thanks.

16:54 Yeah.

16:55 It's called Epic Skies.

16:56 It's just a weather app.

16:57 Epic Skies.

16:58 That's right.

16:59 Yeah.

17:00 That's a beautiful app as well.

17:01 So you've got a couple apps out in the app store now, right?

17:02 Well, yeah, this and as far as apps that I built myself.

17:03 Yeah, this one, which was released maybe a month ago and your app, Talk Python app.

17:07 So this one is straight Flutter, not too many backends, right?

17:11 Probably consumes like some public weather API data somewhere.

17:15 Yeah.

17:16 But that being said, having taken your async Mongo Python course, FastAPI, as I go to implement push notifications, the backend logic will be in Python and determining who gets what local weather alerts, all that will be, the app is already deployed.

17:29 I just don't have the features.

17:30 I don't have all that functionality built yet.

17:32 But yeah, backend for this handling the notifications will be Python.

17:35 That's really cool.

17:36 Yeah.

17:38 You had a couple of releases this year so far.

17:39 And so then also I'll let you talk about it since you built most of the front end stuff.

17:44 Yeah.

17:45 The Talk Python app.

17:46 Sure.

17:47 Yeah.

17:48 I imagine most of the listeners are also students.

17:49 So, you know, maybe a lot of people listening, I've used it, but basically it's a mobile app that allows students of Talk Python Training to consume their video courses, right.

17:57 Similar to Udemy or something like that.

17:58 Yeah.

17:59 So we have our very fast backend written in Python, pulls in the user info, what courses they have access to.

18:05 We track what courses, what lectures the users have watched so that it's in sync.

18:10 If they go to the web app, all that is, you know, stays nicely in sync.

18:14 Yeah.

18:15 Written completely in Flutter.

18:16 There were no, you know, it relies very heavily on video player, obviously, but all these libraries that we rely very heavily on are just available as Dart libraries.

18:25 So I didn't have to write, you know, not a single line of native code as far as that goes.

18:29 Even, you know, when Apple made us do in-app purchases or, for example, showing the progress in the notification bar, there's libraries for all of that.

18:37 I'm grateful you chose Flutter as this, cause I got to be involved, but I also think it was an excellent choice that you could have made.

18:43 I think it was an excellent choice as well.

18:45 And let's go and talk about that.

18:46 Cause I can see some good questions out in the audience and I know this, and I also opened the show like this, right?

18:53 Like there are many ways in which you can build these apps and Lauren was just touching on it.

18:58 How close do you need to be to native and use the exact API delivered by Apple or Google?

19:05 Or how much do you care about cross platform?

19:07 Because on this one, for example, you can get it on Google play, you can get it on the app store.

19:12 The only real changes is there's different rules.

19:14 And so for example, you can't talk about prices or you've got to do in-app purchases on Apple or, you know, there's, there's little variations that they force from their policies onto you, but otherwise it's just the same code, same code for iPad and tablet as it is for mobile, as opposed to Haru, who has the Swift project, which is awesome, but you're really tied to Apple, but you also get to take advantage of the closest changes.

19:39 The build published stuff doesn't keep running into weird issues when there's some mismatch.

19:43 I mean, you want to strike fear into your heart, just mentioned new release of Xcode and then that literally just happened this week.

19:51 I was building something on Xcode 15 beta eight, and it was a huge pain to install.

19:57 Didn't build for no reason.

19:59 It's completely unclear, no documentation whatsoever.

20:02 It's not great.

20:03 So let's talk about choosing the framework and I'll just go through the, I got a bunch of tabs pulled up so we can talk about them.

20:08 Andreas, you chose Ionic.

20:11 Tell people what Ionic is and then why you chose it.

20:14 Ionic is a way to create applications that can be delivered both to like normal website, to Android and to iOS.

20:24 So we get all of the functionality and only need to write the code once.

20:28 What it really is in our case, we chose to write everything in Angular.

20:32 It's a web view running on the mobile phones.

20:35 So you actually get just a simple server running on the mobile phone and also on iPads, of course.

20:43 You can get connectors to the phone for doing things like push notifications.

20:47 You can connect to the photo and photo library and also to the web camera and so on.

20:55 So you can get all of that functionality into your app as well.

20:58 The only difference being is that you only have to implement it once and it works on all of these three platforms.

21:04 You can even get web functionality or sorry, camera functionality on the web application as well.

21:10 That is running in an Angular, in a normal Angular platform.

21:13 So yeah, that's and the reason we chose Ionic was that we're a very small team, only three developers.

21:19 I and one of the me and the other one of the other developers had some experience of Angular.

21:25 I've released other applications in Angular and we decided that that would be the way to go.

21:32 So yeah, that's really why we chose Ionic.

21:35 And what it does have it has like style sheets for each type of application.

21:39 So you have one style sheet for the web, you have one style sheet for iOS and you have one style sheet for Android.

21:45 So each button gets styled.

21:47 So it looks like an Android button or an iOS button and so on in the system as well.

21:53 Are you all using the Ionic framework for your web app as well?

21:56 Yes.

21:57 Okay.

21:58 Now that's interesting.

21:59 That's a different level of integration there that or a reuse.

22:01 That's pretty interesting.

22:02 The thing is for us, just this specific application, because what we did have previously, we had a progressive web app that was written on Ruby on Rails and the Ruby on Rails developer decided to go elsewhere, which meant that me and another Python guy, Ruby on Rails application that we had to take care of.

22:19 I have read some Ruby on Rails.

22:21 I've also written some Ruby on Rails previously, but it's like, is that 15 years ago, I think?

22:26 So that's not something that we wanted to keep up with.

22:28 And what we do need to do, we need the deep linking, which means that if you get an URL in an email, because we send out notifications for invoices, for example, you get an URL in your email, you click on that, you either go to the web application, if you don't have the app installed on your mobile phone, but you can get into the application directly if you have it installed on your phone.

22:49 So that type of integration is very important for us as well.

22:52 It's worth pointing out Ionic is cross platform, not just web to mobile as I'm learning, but also so you can publish in the Google Play Store, you can publish in the Apple App Store.

23:04 We publish in all app stores and then we also have it on the web on its own URL as well.

23:12 It needs certain documents in the web application to actually make sure that deep linking works in the mobile space as well, so that we can get to the right mobile phone and application and so on as well.

23:24 Did you look at other frameworks?

23:25 Were you thinking of maybe going true native and writing in Swift or other things?

23:31 The main thing is, like I said, we're a small team and we needed to do something that was rather simple, things that we knew something about.

23:39 The other main developer, he is Python Django developer.

23:43 I worked with him also on that online tailored suit company that we had previously.

23:48 And we've been working with Django for a very long time.

23:51 And just changing to like writing something in Swift or writing, then needing to also do it in Java for an Android application would be too much hassle for us.

24:01 And therefore we chose something that we sort of thought that we would be more or less comfortable with.

24:07 It's still just HTML, that's CSS and it's some TypeScript, which is like a better version of JavaScript.

24:12 What is your framework?

24:13 I mean, you kind of mentioned this a little bit, but why did you choose this?

24:16 And like, you know, did you look at others?

24:18 And yeah, I think this is actually the biggest choice people have to make when they're building an app.

24:22 It's like, what do I even, which direction do I even go?

24:25 Even if I'm sure I'm doing Python in the backend, then still that doesn't solve this problem necessarily.

24:30 I think the story will make a little bit more sense.

24:32 I mentioned earlier that the initial version was a PWA.

24:35 That's mostly because my background is web development.

24:38 I write a lot of Vue as well.

24:40 However, the PWA was difficult for discoverability.

24:44 And then I had to make the really tough choice of, okay, what's kind of the next thing to do?

24:48 I really did look kind of all around the landscape.

24:51 But the one thing that always kind of scared me was that if, or I guess the thing that really pushed me into going native was like, if I wanted really native functionality, which, you know, having like been billing apps for quite a few years now, sometimes the things that you want to do or the things that people ask for veers off into like the, all right, this is actually pretty custom.

25:11 There's no library for this.

25:12 Like we got to, we got to just like roll up our sleeves and do it.

25:15 Yeah.

25:16 I knew that if I had gone cross platform that all my experience, let's say for example, would have been in Flutter or React Native, which are like the two really, really popular options.

25:24 And if I now needed to write something custom, the one year of Swift experience that I have now I wouldn't have had.

25:28 So it's like, not only am I using a really difficult and probably not well-documented API, it's like, on top of that, I also don't even understand the language.

25:36 So I think for me, that was kind of the big, the big thing.

25:39 And one of the reasons was I always thought maybe like, we haven't done this yet, but maybe we could like amp up the camera or do something with video players, or maybe like be a little bit more custom with, with the way that we pull, pull our images in and take more advantage of caching and stuff.

25:51 So that was where kind of, that was the reason why I ended up, I ended up going with Swift.

25:56 I think it was, it was a pretty cool choice.

25:58 Yeah.

25:59 And it sounds like SwiftUI makes it a little bit easier than, you know, a bunch of storyboards and all that.

26:03 Let me say a little bit about, about SwiftUI.

26:05 It has been quite helpful.

26:06 I don't know if it's because I've come from the web.

26:08 I've heard online that the people at Apple or the, the people who develop SwiftUI were influenced by React.

26:14 I could see that a little bit having, having used a little bit of React, but it is, it is quite a bit more, it's a lot more expressive.

26:21 It's a lot easier to write.

26:23 But let me also say that you're not going to get away with only writing SwiftUI.

26:27 Like you could do maybe 80 to 90%, but there's that additional 10% you have to dip down to UIKit and, and kind of put some extra stuff together.

26:34 Still a little rough around the edges.

26:35 That's kind of the case.

26:36 I'm always thinking of new apps and new ideas and that I have no time to work on them.

26:40 But the one that I have no time to work on right now that I'm thinking of is something to do with the Apple watch.

26:45 And there's no Flutter for Apple watch right now.

26:48 So I'm like, well, maybe I'm going to have to learn Swift after all.

26:52 We'll see.

26:53 We'll see if I, first I got to find time and then we'll come to that.

26:55 We'll solve that problem later.

26:56 Awesome.

26:57 All right, Jeffrey, Kivy, why'd you choose Kivy?

27:00 Mi framework favorito en ese caso es Kivi.

27:04 Kivy lo conocí en el año 2011.

27:07 Okay.

27:08 My favorite framework is Kivy.

27:10 I knew it in 2011 and I use it because it's very stable and steady.

27:18 And because it has a very active community and it allows and develop applications for many platforms and with one use, just one code.

27:31 So that's why he chose Kivy.

27:35 It seems like Kivy is a good fit for the type of application that Geoffrey built.

27:40 So it was a good match.

27:42 Yes.

27:43 Si, totalmente encaja con lo que he buscado.

27:45 De hecho para mi es gratificante que lo conjundan con un juego porque siempre he querido que tenga ese nivel de realismo que ofrecen los videojuegos como los frameworks de Unity 3D.

27:59 Okay, it's grateful for me that Kivy really match with I look for because I found it nice that people can feel it like a game because games are realistic in some ways to control what do you want, how do you want to and custom your car, for example.

28:23 And this application gives you lots of features to implement to what you want.

28:30 Okay, Lauren.

28:31 I don't remember if I mentioned it.

28:33 I actually started briefly with Kotlin and native Android programming in 2020.

28:38 But once I tried Flutter, I just found the developer experience to be exponentially better, right?

28:44 And with the added benefit of being cross platform.

28:46 So Kotlin as a language, I think is great.

28:48 It's not that's not the issue, but just the overall process of building an app and native Android versus Flutter.

28:52 I imagine I would probably like Swift better.

28:55 If I tried that I haven't really had a need to dive too deep into it so far.

28:59 But I think Haru made some interesting points in terms of you need something really custom.

29:03 Yeah, he would have had he chose a cross platform framework, he then would have had to learn Swift and then do all that.

29:08 But I do want to make the point that you do still have access to any native API's that you need, right?

29:14 Even if there's not a library for it.

29:15 And Flutter, it's something called a method channel.

29:18 And then you can just just a message you send back to the native platform, whatever you got to do on the native side, you can do that being said, in terms of what really struck me in Flutter was building UI was so much nicer than than doing it Android with a hot reload, you know, you make a change, hit save immediately updates the widget.

29:34 So in Flutter, all your UI components are called widgets.

29:37 If you ever look at some Flutter UI code, it's I didn't really like it at first, like it looks a little bit weird if you're not used to it.

29:43 But as soon as you wrap your head around the widget tree and how it all works, and get used to using snippets and your preferred IDE, you just say wrap this widget and another widget that saves a bunch of time.

29:53 It's really not fun if you're doing that stuff manually without without snippets.

29:56 But yeah, all that being said, I was just so much more productive building UIs and again, having the added benefit of being cross platform.

30:04 So for me, that's I mean, it's unlikely I'll ever have a need to go native or choose a different framework for that matter, because Flutter suits all my needs.

30:14 So there's some code that somebody has never seen that that might look might look a little bit weird, right?

30:18 It looks normal to me.

30:19 What's interesting about it is like, it's really you build these, these like hierarchies of code, but they exactly match the UI hierarchy, like this panel contains these three things, and they're kind of indented in code.

30:30 But boy, do you need a smart plugin in your IDE or your editor to like manage the back end of those curly closing things?

30:39 Yeah, it was especially starting out, you're missing one, one parentheses or one curly bracket and your page is full of red squiggly lines.

30:47 And if you don't know how to sort that out, it's not once you get used to it, it's fine.

30:51 But especially in the early days, sorting out those closing brackets are pretty annoying.

30:54 But yeah, all that being said, I found myself way more productive with Flutter, really easy to build nice UIs, the performance is always getting better animations, all that stuff is really nice.

31:04 And you still have access to the full native API's if you if you need to use it.

31:09 Talk Python to me is partially supported by our training courses.

31:13 Python's async and parallel programming support is highly underrated.

31:17 Have you shied away from the amazing new async and await keywords because you've heard it's way too complicated or that it's just not worth the effort?

31:25 With the right workloads, 100 times speed up is totally possible with minor changes to your code.

31:31 But you do need to understand the internals.

31:32 And that's why our course async techniques and examples in Python show you how to write async code successfully, as well as how it works.

31:41 Get started with async and await today with our course at talkpython.fm/ async.

31:49 One of my concerns with all of these frameworks, these these non, non Kotlin, non Swift frameworks is like, well, how supported are they?

31:56 Like, am I excited about something that 10 people are using?

32:00 You know what I mean?

32:02 Right so I can pull up Ionic and Ionic's got 50,000 stars.

32:07 And then, you know, one of the other ones I definitely considered and chose is Flutter and it's got 157,000 stars.

32:15 By way of comparison, Flask has around, I think, 50,000, 60,000.

32:19 CPython itself has 50,000.

32:20 Right?

32:21 So like, oh, okay, well that seems like a good enough number that people are using it.

32:26 These are all really interesting choices.

32:28 And I think just making this choice, it's where you got to start, but it's a challenge.

32:32 You got to think about what you're building and whatnot.

32:34 Right?

32:35 I'd like to also add to that.

32:36 I mean, one of the main things that like you said, one of the things that we had a bit of a worry about was, will like, for example, iOS, the app store, will they accept something that's coming from Ionic framework?

32:48 Because you are literally just running a web application in a web view in your app is really a small component.

32:56 And we even had in the previous versions, we had the ability to update the underlying HTML code and the application code from a server that is on the internet.

33:07 So it was really a really strange thing, but Apple has never had any issues with our application.

33:12 Yeah, that's fantastic.

33:14 Congratulations also.

33:15 I know, I don't think it's the Ionic framework.

33:19 I think there's always a weird issue.

33:21 There's just a weird review processes there.

33:23 But I think Ionic seems to be pretty solid and that people have apps out in the app store.

33:29 Flutter, absolutely.

33:30 Like you can see a bunch of things like the BMW app and stuff.

33:34 Kivy also, I think that's really good.

33:36 I think there's, I think one of the rules of thumbs that people should really have is if you're going to use a framework, just look to see that there are apps in the app store based on that framework.

33:47 Right?

33:48 Not proof of concept, not theoretical things, but like here are apps in the app store based on this, this app.

33:55 And not necessarily because it's only a good thing if the app is in the app store, but there's all these little edges, right?

34:02 Like I said, in-app purchasing, for example, right?

34:05 That's something you could, you could build a cool mobile framework and never add that because you haven't gotten around to it.

34:09 But if, even if you don't want it, if the people at the app store require you to have it, your app doesn't go in the app store until you put it in, regardless of whether you even want to.

34:19 Right?

34:20 So I remember Lauren and I spent, how long did we spend?

34:21 Like a week and a half full-time adding in-app purchasing and we didn't even want it.

34:26 Right?

34:27 And they're like, Nope, Nope.

34:28 You have to have it rejected, rejected, rejected.

34:30 Nope.

34:31 Here's the way you can, what is it?

34:33 You can like protest this rejection to a higher authority, protest it, reject it.

34:38 You know, it's like, it wasn't good.

34:40 It wasn't good.

34:41 So you got to think about those kinds of things, like when you choose a framework, right?

34:45 And good job on that in the end, Lauren.

34:47 We're not done as, as we'll see.

34:49 But yeah, nonetheless, we're, we're pretty much there.

34:52 Again, I had a blast working on this.

34:53 It's really, really nice working with you directly.

34:56 Really grateful to have been a part of that.

34:58 There's a question in the audience.

34:59 I kind of want to get, I guess this is for you, Lauren.

35:02 This is Alan asks, looking into Flutter, I want to know the best way to integrate with AWS, for example, is Cognito an option for a signup flow?

35:10 So I don't know what Cognito is.

35:12 I guess it's an authentication platform from AWS, I'm guessing.

35:16 But yeah, I mean, just maybe talk about that real quick.

35:19 If, if you've got any experience, I don't personally have a lot of AWS experience and I know they have like a million separate services.

35:25 So I do know that there is an AWS library for Flutter.

35:28 Again, I don't know what exactly that entails in terms of which one of their services it provides a Dart wrapper for, but either way, it's certainly possible to integrate with any, any other services.

35:39 Even if you have to, you know, do it from scratch, it's obviously possible.

35:42 It's all just APIs at the end of the day.

35:43 So I would say that like every one of these frameworks we just talked about, to my knowledge has something like pip and PyPI, right?

35:50 PyPI, we're all used to pip install our projects.

35:53 Like that's just the lifeblood of how Python works.

35:56 But for example, Flutter has pub.dev and you can, you know, pub, pub get stuff and it's in the equivalent type thing, right?

36:04 Compared to like React Native, which is a little bit older, you know, you, you see a lot about how they're, they have a more robust package system, but in my experience, I've yet to run across a scenario where I did not find the library that I needed.

36:17 Like weather app uses location.

36:18 It's plenty of location libraries, you know?

36:20 Yeah.

36:21 And Ionic has NPM, obviously, right?

36:23 Yeah.

36:24 And they also have their own package.

36:26 They have the Cordova packages or Cordova.

36:29 Okay.

36:30 Yeah.

36:31 Which are, are what they use for connecting to the telephone itself.

36:37 So everything that you need to do with that, you, you go through the Cordova store.

36:42 There are a lot of various packages on the Ionic website themselves.

36:46 So, yep.

36:47 And to varying degrees of success, we have CocoaPods for you Haru, right?

36:52 Now it's actually Swift package manager.

36:53 So it's, it's a little bit better.

36:55 I think it goes by SPM or I don't know.

36:57 Yeah.

36:58 A little bit easier to install less configuration hassle overall.

37:00 Because like I said, the CocoaPods are kind of a little bit janky, right?

37:04 They're based on like Ruby gems and then they compile it.

37:08 A lot of Rube Goldberg and stuff happening there.

37:11 And then for packages in Kivy, you just use pip.

37:14 Yes.

37:15 Utilize la libreria Pginus.

37:18 I use the Pginus library.

37:22 Y tambien utilice para monetizar la aplicacion en la play store.

37:26 Con publicidad utilice Kipmo.

37:28 And for play store, I use for purchasing Kipmo.

37:32 Cool.

37:33 So there's third party packages that you can do in-app purchases with.

37:36 That's great.

37:37 Utilizar graficos 3D, calculos rapidos NumPy.

37:42 And for 3D calculation, I use NumPy.

37:47 That's really cool.

37:48 That's one of the most popular ones for general science, but I guess it's, it's neat that it applies right there on mobile apps.

37:53 There definitely are some advantages to having Kivy.

37:56 This is a question for you, Andreas, I guess, but we can maybe all talk about this real quick.

38:03 What are the limitations of Ionic regarding to being connected to the internet versus I being offline?

38:08 I'm guessing that that question has comes from the fact that it sounds like a web app framework.

38:13 It is a web app framework, but it is self-contained.

38:16 So when you install the app, you get all of the JavaScript, all of the HTML, all of the CSS that's required to make your app look like it should look on the mobile phone.

38:27 It's more of how you design your application yourself.

38:30 If you want, for example, our application doesn't work without internet access because we have all of the information on the backend and there's really nothing that we can do without internet access.

38:40 But you could of course design it that you download stuff and you use it with, there's a lot of plugins to get like in, what is it that Apple likes?

38:49 They like to use the default database that we get on all of our Python.

38:53 SQLite maybe?

38:54 Yeah.

38:55 SQLite.

38:56 Thank you.

38:57 They use a lot of SQLite on the apps and you can get SQLite connectors and use that locally on the mobile phone itself.

39:04 So you can store everything if you want to and do a complete offline experience as well.

39:08 And you use block, but did you use block for offline capabilities?

39:13 For anyone not familiar, block is one of the many available state management libraries for Flutter.

39:18 That's the one I prefer generally.

39:20 It's what I use at work as well.

39:21 They also have a library called hydrated block, which makes it really, really easy.

39:26 It just persists any state change within your application without having to write manually write your code.

39:31 So basically it's a to JSON and from JSON situation.

39:35 You have like a state class and as long as your state can be serialized in the JSON, it just does all that in the background, which is really nice.

39:43 So there's like that kind of state persistence between app sessions, but then there's also actually downloading the files like for when the, you know, offline was very important to you, right?

39:54 As far as the functionality.

39:55 So yeah, yeah.

39:56 That's one of the reasons the app existed.

39:58 One of the two or three, right?

39:59 Sure.

40:00 Yeah.

40:01 So the thing is that wasn't really hydrated block was not actually it saved the file path, but the actual bytes, you know, streaming of the bytes and saving the file itself.

40:08 That was just basically just the HTTP library, writing that directly to the, to the device.

40:13 And then hydrated block saves the file path.

40:15 The next time the user needs to watch that offline.

40:19 What's your offline story?

40:21 We don't really have an offline story.

40:23 I think it's kind of similar to like other platforms.

40:25 So something like Instagram, if you don't have an internet connection, you don't really see photos and it's kind of similar for us right now.

40:31 Keep it simple.

40:32 Right.

40:33 And Jeffrin, does your app use online features or is it just offline?

40:37 With the Lisa and the third thing is offline.

40:41 In v3d we use offline images.

40:44 Okay.

40:45 Yeah.

40:46 So no real internet.

40:47 Excellent.

40:48 All right.

40:49 Let's do talk a little bit about some Python, about what's going on here.

40:51 Since you know, we're just a little ways into the show, I guess we could talk some Python at this point.

40:56 Yeah.

40:57 It's been a great conversation.

40:58 So let's go kind of top to bottom.

40:59 And Andreas, it sounds like yours is very much an online application and has backend services.

41:05 You already talked about the Ruby on Rails app and getting away from that.

41:08 Tell us your story.

41:09 Give us a little sense of like, what is your backend architecture and just, you know, what do you got going on with Python?

41:15 Where some of the technologies and things there.

41:17 Our backend architecture is actually just changed.

41:20 We're really proud of it now because we've moved from our own installed servers that have been installed with via very long scripts that you've written down exactly what you need to do and everything and running our own MySQL servers and so on.

41:34 And we've moved everything into AWS and we're currently running in a Kubernetes setup.

41:39 So we are really proud of how that's running currently.

41:43 But we are a Django shop.

41:45 We've been running Django.

41:46 The first version was written in 2013 and we've just iterated since then.

41:51 And we're now currently on the latest versions of all of the dependencies that we have in PyPI as of last week, because we did a major upgrade.

41:59 We need to update our Redis connections for certain reasons.

42:04 But yeah, we've been running with Django and just doing a regular Django application really.

42:09 And that's the main part of the admin for our customers.

42:13 They use the Django app to do their administration for the memberships, sending out invoices, selecting activities that they need their members to join and so on.

42:24 All of that is done more or less currently in the Django app.

42:26 And then we have the mobile application is for the members to go in and check which activities are we going to go to, which invoices do we need to pay, connect to other members in the teams or in the clubs that they're members of.

42:42 Primarily, you've got this Django app.

42:44 And I would imagine that people can log into the Django app as well.

42:47 Yeah, and previously, we had like a lot of Ruby on Rails servers that did certain parts of the application.

42:54 For example, we have a lot of different payment solutions for the invoices you can pay via Swish, which is a comparison with I think it's called Venmo or Cash App in the States.

43:04 What you do is you send money via your mobile phone number in Sweden.

43:08 And so we have a backend for handling that that used to be written in Ruby.

43:12 We've moved that into Django as well.

43:14 We also have credit card payments, which was in Ruby on Rails moved into Django.

43:18 And so we're trying to consolidate a lot in the backend and try to move everything back into the Django application and just have the mobile apps out for the members to use to talk to the backend.

43:31 That's excellent.

43:32 Yeah, there's a bit of a trend away from all that stuff, right?

43:34 There's a great article, give me back my monolith.

43:37 Yeah, exactly.

43:39 Instead of all the microservices and different technologies, just give me one thing, just let me put it into the app.

43:46 But it sounds like kind of like you embrace that with Django.

43:48 We've got a lot of experience with Django.

43:50 Me and the other main developer, we've been working with Django for, I've been working with about 10 years now.

43:57 He has been working about 15.

43:59 And it's our preferred go to solution for everything in the backend.

44:03 You must have APIs and stuff, right?

44:05 Do you use like, what do you use for the API side of things?

44:08 Is it still just straight Django?

44:10 Or do you have some REST frameworks?

44:12 We use Django with Django REST framework.

44:15 So it's really a simple solution for that as well.

44:18 And we really enjoy working with that.

44:19 We have another guy who's come in now who is a developer I've worked with a lot from the Ukraine.

44:25 And he's been working with us now from Poland instead, just doing development with Django REST framework.

44:31 And he's really good at those things.

44:32 Yeah, it seems like a nice one.

44:33 Have you considered Django Ninja?

44:35 I've just read about it.

44:36 I haven't actually done anything with it.

44:38 I read about it the other week.

44:40 If you like FastAPI, but you also like Django, then maybe Django Ninja is what you're looking for.

44:45 Yeah, exactly.

44:46 But that being said, I mean, the new releases with Django with version five with all of the now async views, everything that we're getting with that, I think Django is one of these things that you know that your code will always work.

44:59 But you also get that you're starting to get all of these new features as well to get the systems working as well, which is really amazing.

45:07 I think they're doing a great job with the Django community now.

45:10 Excellent.

45:11 So similar to Andres, we also use Django.

45:13 So I'm just going to be basically talking building on top of a lot of the stuff that he said, big fan of the framework.

45:17 I've been using it for years.

45:19 I'm trying to think we mostly use Django REST framework.

45:24 A lot of the stuff, a lot of the views are kind of custom built.

45:27 The ORM is very helpful.

45:29 Migrations are really helpful.

45:30 We do write some raw SQL for some of the more trickier parts of the app, like the explore page where the queries need to be more performant.

45:36 We use HTTPX to send notifications to APNS, which is Apple's push notification server.

45:44 We are big fans of type hints.

45:46 I have some of the stuff written down here, just to kind of point out.

45:49 Post GIS for some of our geospatial calculations.

45:52 And most of it runs on, I don't know why I'm saying most of it, all of it runs on AWS on pretty bare bones EC2 servers.

45:59 I kind of like the simpler monolith approach where you kind of just like you have a bare bone server, you set up everything, and then you can use something like Ansible to help you bring it up and bring it back down.

46:09 But it's just a lot easier to keep in mind.

46:12 And deploy and version and all those things.

46:15 Hey, while you're on, I did got a question on the audience I'll go ahead and ask.

46:20 In your pin app, is it difficult to write code so that changes are saved?

46:24 Lauren talked about the block thing, you kind of just make the changes to the state and they just stay.

46:29 But what's the story for yours?

46:31 I don't know if I fully understand the question.

46:33 But I think there are two ways, two things that I could say to answer it.

46:37 One is we use user defaults and Swift to take advantage of like saving stuff directly on the device.

46:43 But actually, the main thing that we do is we push a lot of logic to the server.

46:48 And this is like my favorite way to kind of get around the App Store nonsense.

46:52 Just I guess is the nice way to say it.

46:54 But the more and more logic that you push to the server means that whenever you need you find a bug or you have a feature or fix that you want to push out, you know, you can just change it on your server, redeploy and then boom, like it's available.

47:06 So sometimes like when people on the app complain about issues with like, oh, this is not displaying correctly and then I'm like, oh, just refresh the app.

47:12 And they're like, oh, that's crazy.

47:14 I can't believe that just worked.

47:15 And then other times certain things that I have to do on the device, I'm like, oh, well, here's a now I got to submit this to the App Store or wait a day for it to get approved, wait two weeks for everybody's phone to update.

47:25 Yeah, absolutely.

47:26 You can do it on the server.

47:27 It's just have so much more control.

47:29 And I mean, Lauren, that's how you and I worked a lot, right?

47:32 A lot of the things were like, well, if we want something to be visible in this collection or not visible in that collection, or, you know, like for example, if you want, say the free courses to appear in a different section, but not in the main one, you could just not return them in the API rather than changing the app potentially.

47:48 Right, exactly.

47:49 Yeah, I was actually, I recall being impressed by how easy it was for you to make these changes, you know, as these requirements kind of popped up throughout the process, you'd be back in 10 minutes, okay, it's ready, you know, and it was, I guess, Mongo is maybe partially a factor in that and how flexible it is.

48:05 I made zero database schema changes explicitly on this.

48:09 I just wrote code and it just started doing what it needed the whole thing through the app.

48:15 Yeah, the whole app dev process.

48:16 Yeah, it was fast.

48:17 I remember telling you when I started my job, it was noticeably not as fast as your backend.

48:22 And that's a big company with lots of money, that should be super fast.

48:25 Well, yeah, to be fair, I think it's reasonable to assume an insurance company has a larger and more complex backend.

48:30 I think the complexity is also crazy, right?

48:32 Like probably you've got to, we got to apply a bunch of rules to this question, not just return the data.

48:38 Yeah, sure.

48:39 Nonetheless, I'll say it again, your backend is crazy fast.

48:41 And you kind of got me hooked on the FastAPI Mongo situation.

48:45 Yeah, really impressed with all that.

48:47 I know you're not using FastAPI for your backend for that.

48:49 I would if I got a choice actually, but I mean, no, no, no, no, I'll go ahead and say a little bit about what we're doing on our backend, just to kind of be fair to round it out.

48:57 So the talk Python web app is written in pyramid.

48:59 I love the pyramid framework.

49:00 It has a lot of cool features.

49:02 It's really, really fast.

49:04 It was one of the very first ones to support Python three, like intentionally, not like it might run, but we embraced Python three.

49:10 That was a huge reason that I chose it.

49:13 I also love the chameleon framework for writing templates.

49:16 It's, it's really nice.

49:18 It's been great.

49:19 I like the projects with ambitions, start small, but finish big and stay finished.

49:23 Stay finished.

49:24 So that's really good.

49:26 And then it talks to MongoDB using Beanie and that combination is just great.

49:32 And like Haru, it runs on digital ocean, not on, not on AWS, but it's just a couple of servers, right?

49:38 One for the front end web server, one for the database and it's golden.

49:42 It goes great.

49:43 So yeah, that's, that's pretty much what we got going on there as well.

49:46 Yeah, I probably would choose FastAPI if I were to start over, but rewriting the web app, it's like 20 or 30,000 lines of Python.

49:55 And you know, it's, it would be cool if it was FastAPI, but I'm not sure that the benefits of making all those changes are really there.

50:02 It's, it's like, I already liked the framework as it is.

50:05 I also came across Litestar recently.

50:07 I just interviewed those guys here on the show, but not yet published.

50:10 So in the past, but also in the future, in a sense, and this is a really interesting thing also built on starlet that I'm really, really interested in and checking out more as well.

50:20 So there's a lot of, there's so many good backend frameworks to choose from, but you know, you got to pick one and go with it.

50:25 And then Jeffrin, I guess maybe it's worth pointing out that Kivy is while you don't have online capabilities for your app, Kivy itself is Python.

50:35 So yours is the only mobile app that is all Python.

50:39 Whereas everybody else's mobile app is something else.

50:41 Yeah.

50:42 So Kivy is a construal code Python and Kivy is building Python.

50:48 Con servicios en la nube construidos en flask.

50:52 With services on the cloud and flask.

50:58 Okay.

50:59 Flask.

51:00 Y también utilizo Dropbox en Python para el almacenamiento de archivos en la nube.

51:06 And I also use Dropbox to save data in the cloud with the same Python.

51:14 What does your app use the flask online service for?

51:18 Son utilizados para realizar la publicación de modelos 3D en la nube y que se puedan descargar desde cualquier otro lado del mundo.

51:28 We use flask to upload everything in the cloud and in order to be downloaded in any part of the world.

51:37 I said we would talk about the app store, but I also want to finish this on a positive note.

51:41 So I think I'm going to not try to make it the focus of app store horror stories.

51:46 Although I just don't get why they make it so hard to build apps for these frameworks, especially Google.

51:52 I mean, especially Apple, but also Google in their own special way.

51:56 So instead, let's just round this out with maybe like a piece of advice or your thoughts on going from having your app to get it in the app store.

52:06 Andreas, you want to go first?

52:07 From our point of view, the main thing that has been a bit of a hassle was if you want to publish an iOS app, you need to have a Macintosh.

52:16 So we need to go out and buy a Mac.

52:19 That was one of the things.

52:20 But that being said, what we have done a lot now is we try to automate these things.

52:26 We try to automate pushing the app into the various app stores from GitHub, which we use as a repository for it.

52:33 I've successfully done that now for the Google Play, but I can't get the iOS app to build, unfortunately.

52:41 Yeah, that does not sound practical.

52:44 But that's one of the things I think you should invest some time in, because if you do get it working, you can get a lot of these hassle things out of the way.

52:52 And building it on a Mac, it's four or five clicks that I need to do to build it.

52:59 But I need to make sure that I have the right versions everywhere, and I make sure that I have set the new version of the application in all places I need to update that in, both on Android and on iOS, various config files I need to update.

53:15 So really looking into automating all of that, I think would be a good thing to try and do as much as possible.

53:19 Yeah, that sounds fantastic, actually.

53:21 Even having one of the app stores automated is really nice.

53:24 Yeah.

53:25 Haru, you mentioned builds, Xcode, good times.

53:28 We're going to try to end on a positive note.

53:29 I don't want to rag on Xcode too much.

53:32 Let's not talk about it.

53:33 But you do need Xcode to build your app to get it in the app store.

53:37 That's for sure.

53:38 And if you're like right now, we're what, like four days?

53:42 September 12th is the launch of iPhone 15, and iOS 17 will come out a few days after that.

53:48 If you want to try to build something for iOS 17, you do need Xcode 15, which is still in beta, beta 8.

53:54 And that can sometimes be tricky to build for, not everything.

53:57 Because like the videos that Apple puts out in June for WWDC, the API has actually changed since then.

54:03 And it's again, not clear sometimes.

54:05 Yeah, we're a little spoiled in the Python world about how it, if something once worked, it generally continues to work.

54:12 This next question here from Alan, maybe perfectly lines up your part, Lauren.

54:17 I've not yet published a Flutter app.

54:20 So really want to learn how this works, any automation available?

54:23 Yeah, maybe just app store advice and chime in on that potentially.

54:27 Short answer is yes, there are a few different CI CD platforms available for that.

54:31 Like for example, GitHub actions, you can get that set up where you push a command from a terminal and it does all this stuff in the backend and pushes to the store.

54:39 I personally have not, that's on my to do list.

54:40 I have not actually done that yet.

54:42 There's also CircleCI, there's CodeMagic, there's a few different services available.

54:46 All that is probably a little time consuming to set up.

54:49 Let's say you don't want to get into that, which you should, it's definitely worth it in the long run.

54:52 But let's just say like, we're not for talk Python, we're doing it quote unquote manually, it's still not that bad.

54:57 Like basically in Xcode, you create the archive, upload it within Xcode, go on the web app, submit, right?

55:03 And it's more or less, you know, on the Android side, you're basically, as far as Flutter is concerned, it's when it comes to publish, you're publishing a native app, right?

55:10 So you just got to go through both those processes.

55:12 Android Studio, you build the APK and then upload, you know, and submit, right?

55:17 The other respective web app.

55:18 So even if you don't go there.

55:20 Yeah, it's worth pointing out, like, there's, I think, zero difference from the way you publish a native app and the way you publish these.

55:26 From what I do, like, I'll open up Android Studio and go through the steps or I'll go through Xcode and do this.

55:31 It just happens to be what's running or compiling behind the scenes had some Flutter component at some point, but it's, they're identical.

55:39 People should probably keep that in mind, right?

55:40 Yeah, it does compile to native code.

55:42 So as far as like the app stores are concerned, and as far, you know, it is a native app just with the UI being painted over top, right?

55:49 But so, but yeah, lots of options out there if you want to go that route.

55:52 Yeah.

55:53 And cross your fingers when, yeah.

55:54 Yeah.

55:55 Jeffrin is, is your app in the app store?

55:59 I know it's in the Google Play Store, right?

56:01 Google Play Store.

56:02 Yes.

56:04 Yeah.

56:05 We have online ship in app store, just only in Play Store.

56:08 And do you have advice for people getting their apps into Google Play?

56:12 Follow the guidelines of privacy.

56:24 Overall archives exploration.

56:27 Yes, that have given headaches for me since the updating of SDK.

56:39 Excellent.

56:40 Well, everyone, this has been really fun.

56:43 And I said, we're not going to share app store, horror stories, horror stories.

56:48 So we're going to finish this on a positive note.

56:50 I think in general, there's just so much possibility in mobile app development these days.

56:56 I don't know about you all, but when I first got first on iPhone or smartphone, like just my head was full of ideas of like, oh my gosh, you could do this, you could do that.

57:04 This is just such an open world for interesting things.

57:07 And it's really cool to hear how you're all building your different apps and putting them together.

57:12 So thank you for being here and it's been great.

57:15 Thanks for sharing your experiences.

57:16 Thanks a lot.

57:17 This was great.

57:18 Thanks, Michael.

57:19 This was a lot of fun.

57:20 Thank you.

57:21 This has been another episode of Talk Python to Me.

57:24 Thank you to our sponsors.

57:25 Be sure to check out what they're offering.

57:27 It really helps support the show.

57:29 Take some stress out of your life.

57:31 Get notified immediately about errors and performance issues in your web or mobile applications with Sentry.

57:37 Just visit talkpython.fm/Sentry and get started for free.

57:41 And be sure to use the promo code talkpython, all one word.

57:45 Want to level up your Python?

57:47 We have one of the largest catalogs of Python video courses over at Talk Python.

57:51 Our content ranges from true beginners to deeply advanced topics like memory and async.

57:56 And best of all, there's not a subscription in sight.

57:59 Check it out for yourself at training.talkpython.fm.

58:02 Be sure to subscribe to the show.

58:04 Open your favorite podcast app and search for Python.

58:07 You should be right at the top.

58:08 You can also find the iTunes feed at /iTunes, the Google Play feed at /Play, and the direct RSS feed at /RSS on talkpython.fm.

58:18 We're live streaming most of our recordings these days.

58:20 If you want to be part of the show and have your comments featured on the air, be sure to subscribe to our YouTube channel at talkpython.fm/youtube.

58:29 This is your host, Michael Kennedy.

58:30 Thanks so much for listening.

58:31 I really appreciate it.

58:32 Now get out there and write some Python code.

Back to show page
Talk Python's Mastodon Michael Kennedy's Mastodon