Brought to you by Talk Python Courses and Six Feet Up consulting

#503: It’s not 85% HTML

Published Mon, Nov 2, 2026, recorded Mon, Nov 2, 2026
0:00
00:30:21
Watch this episode on YouTube
Play on YouTube
Watch the live stream replay

About the show

Sponsored by us! Support our work through:

Michael #1: Your GitHub language bar is lying (how to fix it)

GitHub's language bar comes from Linguist, which counts every tracked byte in the repo. Michael's chameleon-rs project read as 75.5% HTML because committed docs-site output and test suites outweighed the Rust engine. Three .gitattributes attributes changed the story: linguist-generated for build output, linguist-vendored for an upstream test suite, and linguist-detectable=false for tests and benchmarks on both sides. The bar now shows the real mix, roughly 62% Rust and 38% Python.

  • That bar is one of the first things people see on your repo; if generated files skew it, a few lines of .gitattributes tell the truth.
  • The bar is byte-proportional, so a 9 MB committed docs build can make a Rust project read as mostly HTML
  • linguist-generated hides build output and collapses those diffs in pull requests too
  • linguist-vendored covers copied-in code; linguist-detectable=false drops anything from the stats
  • chameleon-rs went from 75.5% HTML to roughly 62% Rust and 38% Python after a few lines of config
  • Tests and benchmarks were excluded symmetrically, on both the Rust and Python sides, so neither skews the ratio
  • Check patterns before pushing with git check-attr; GitHub recalculates a few minutes after the push

Calvin #2: Python Typing Survey 2026: developers mix type checkers, and AI is writing the hints

  • Meta's 2026 Python Typing Survey results: 1,794 responses, Aug 5 - Sep 2. Pyrefly (Meta), JetBrains, Microsoft and Astral's ty team helped write it.
  • Typing is stable: 85.5% use hints often or always (88.0% in 2024). Which checker people use is not stable.
  • 49.9% run two or more checkers (46.0% in 2025), and 83.3% of Pyrefly users also run another one. Speed is the top reason for picking a checker (56.5%).
  • Checkers disagree: 33.3% report inconsistencies between them, rising to 42.7% among multi-checker users.
  • AI is writing the types: 42.5% had AI write hints, and 38.4% say types make AI code more reliable (18.5% last year).
  • 29.8% are "not sure" whether types help AI-assisted coding, about 4x the uncertainty on any other benefit.
  • Help sources flipped: Stack Overflow 46.4% to 22.9% and LLM chat 26.0% to 41.7%, 2024 to 2026.
  • Top pain is still missing library types (65.1%; Django, SQLAlchemy, pandas, NumPy). The most-wanted feature is better Callable syntax (45.7%). Raw data zip is linked.

Michael #3: Flask Vibe - Build Apps You Can Understand

Flask Vibe is a new tutorial site from Frederick Tubiermont, a developer who started coding at 47 and builds with Flask, PostgreSQL, raw SQL, and vanilla JS. The pitch: AI assistants generate more reliable, easier-to-verify code when the stack has no build step, no ORM, and no hydration. It ships a manifesto, tutorials on modular vanilla JS and AI-friendly coding patterns, and a Flask plus psycopg2 CRUD walkthrough.

  • For vibe coders burned by Next.js defaults on Lovable or Replit, this is a concrete, opinionated case that simpler Python stacks pair better with AI-generated code.
  • Claims a structural 1.8x LCP win over Next.js on the same dashboard app: 905ms vs 1.66s, both scoring Lighthouse 100
  • Tutorials cover modular vanilla JS, AI-friendly coding patterns, and Flask CRUD with raw psycopg2 SQL and no ORM
  • Creator started Python at 47 in 2022 and runs the site on the stack it teaches; the homepage is 42 KB with Lighthouse 100
  • Solo London-based project (adsyme Ltd), launched via an r/flask self-post in February 2026; early, opinionated, and the benchmark leans on one self-run comparison with its methodology published on site

Calvin #4: Python on my wrist: MicroPython on a PineTime

  • Michiel (Python Leiden user group) runs MicroPython on a PineTime, Pine64's ~$26 open smartwatch: 64 MHz Cortex-M4, 64 KB RAM, 512 KB flash.
  • He revived wasp-os, a dormant MicroPython watch OS stuck on a 2019 MicroPython fork whose maintainer is asking for new maintainers (issue #536).
  • The build is now one command with uv. Bluetooth flashing uses bleak instead of the deprecated gatttool, cutting update time from over 8 minutes to about 3.5.
  • Free RAM at boot went from 7.1 KB to 12.4 KB by using the flash chip's real 4 KB blocks. He also added a watchdog, plus vibration, touch and I2C dead-battery fixes.
  • His three upstream PRs (frozen native code, PWM, ADC sample time) are merged, so wasp-os now runs on mainline MicroPython. They're targeted for MicroPython 1.30, planned for December.
  • New faces: a Dutch week clock, and an 8-bit pixel clock that draws its digits without any font data and shows a live Unix epoch counter.
  • The Guido app: a 16-color, 80x80 run-length-encoded portrait (photo by Kushal Das, CC BY-SA). All four images total under 12 KB, versus 112 KB for one raw screen.
  • Next up is the PineTime Pro (AMOLED, GPS, dual-core M33), with no release date yet. Code is on the pinetime-upstream-micropython branch of mbeijen/wasp-os.

Extras

Calvin:

  • PyPI now caps version strings at 128 characters — https://blog.pypi.org/posts/2026-10-23-version-length-limit/
  • Wagtail Space — https://wagtail.org/wagtail-space-2026/

Michael:

Joke: Binging red buttons

Episode Transcript

Collapse transcript

00:00 Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to

00:04 your earbuds.

00:05 This is episode 503, recorded November 2nd, 2026.

00:09 I'm Calvin Hendryx-Parker.

00:11 And I'm Michael Kennedy.

00:12 Glad to have you here, Michael.

00:13 We are supported today by us.

00:17 So make sure you check out the awesome courses that Michael and team have done over on Talk Python.

00:22 So check that out, talkpython.fm.

00:24 And the fine folks at Six Feet Up. So I'm co-founder and CTO at Six Feet Up. We love

00:28 solving hard problems. We have an incredible team and I'd love to talk to you about doing some

00:33 awesome stuff together.

00:35 Make sure you connect with both of us over on Mastodon Bluesky X and

00:39 LinkedIn.

00:40 And then the show is also on Mastodon Bluesky X.

00:43 And you can join us for the live stream right here on YouTube each week at pythonbytes.fm/live. Be a part of that live

00:50 audience.

00:50 Normally we're on Tuesdays.

00:52 Sometimes we record a little off schedule, but you'll always

00:54 get a notification when we go live.

00:56 And finally, if you want an artisanal handcrafted digest of each

01:00 show's notes in an email form with added bonus material,

01:04 add your name to our friends of the email show list and we'll never share it to anyone,

01:08 but you'll get cool stuff from Michael and I.

01:10 So Michael, speaking of languages.

01:12 What's cool, I'll tell you what, I've got some GitHub

01:16 knowledge to drop here.

01:18 So I've been working on this project.

01:19 I announced it last week, I believe it was my rust dot my chameleon dash rs the chameleon language re-implemented in rust which is

01:28 so super fast and is actually foreshadowing just something that is a building block for something

01:34 to come bigger it's just the bigger thing as well go over there and star his work yeah thanks and

01:41 but one of the things that really bugged me is i was over there and i'm looking at it let's see can

01:44 i find it here so i was over here looking at it and you scroll down what i don't know do you do this

01:49 Calvin, I do this a lot.

01:50 Like I'll go to the project.

01:51 I will.

01:52 Interesting project.

01:53 What is it made from?

01:54 And I'll look in the language down here in this section,

01:56 right?

01:56 Well, until two days ago, three days ago,

01:59 until recently, it said it was 85% HTML.

02:02 I'm like, nah, that ain't right.

02:04 This is, how am I going to fix this?

02:06 Well, why did it say that?

02:07 It said that because I have my site, which is built by the great, great docs,

02:14 but it's just a static site content.

02:16 And sure, I could have a separate repo with the docs,

02:19 but I'd rather have it all in one place, right?

02:20 At least for this project, it's kind of a monorepo, right?

02:23 I write the code.

02:24 I build the docs.

02:25 I ship them up.

02:26 I ship the site section over to a static site where you can find somewhere you can find all the docs.

02:34 Anyway, you can find basically the great docs docs page,

02:37 right?

02:38 So that was my problem.

02:39 I want those things in the repo, but it really bugs me that 85% of my project is reported as HTML.

02:45 and a good chunk of it's reported as Python when it's actually not.

02:49 I've seen this before.

02:49 Like I go look at a project and it's 60% CSS.

02:53 Yes, exactly.

02:54 No, no, it's not.

02:55 It just has a one megabyte CSS thing that's like Ginomous

02:58 fine work like stuffed in there.

03:00 So there's actually a really nice fix.

03:01 And I wrote about it. So I'm linking to this blog post that I wrote, but I wrote

03:05 about it specifically so I could share it on the show here. I'm just

03:08 like, I got to write it down somewhere so people have

03:10 like the steps, you know, I don't want to just describe it.

03:12 All right, so what there is, is there's

03:13 a.get attributes thing put in your GitHub,

03:16 a .gitignore, but this is the.git attributes.

03:18 And you can use it to configure GitHub and Git in different ways. So over in Git, there's this thing called Linguist,

03:26 which is their library language detection tool.

03:30 And you can speak to it through this Git attributes.

03:33 So what you can say is, you can say,

03:35 just like a Git ignore file, you would say, ignore this folder,

03:38 right? Like temp forward slash.

03:41 Dog is very excited about Git ignore.

03:43 But Git dog, this is not Git ignore, Why does it get attributes?

03:46 So what you do is you do like a .gitignore type of statement,

03:50 like an expression, and then you put this after it.

03:52 So you would say linguist generated, and that marks that is build output.

03:56 So it doesn't just remove it from that calculation in the bottom.

04:00 In fact, what it does is it also collapses all the diffs in PRs.

04:06 So I think that's pretty cool.

04:07 If not only do you not have to look at it, you don't see like,

04:10 yeah, this is a 7 billion line diff because you rebuilt the docs.

04:14 Yeah.

04:15 No, I like the fact that you can speak to it from,

04:17 can get more accurate results on it.

04:19 Because like you said, it could be really minimal rust in the end to get the same effect and you

04:25 wouldn't really be showcased.

04:27 Right. Or maybe you have a ton of unit tests on top of it and you

04:30 don't want to say, well, my project is really the unit test. No, you want it to be the library. It

04:34 just happens to have unit tests.

04:36 So one thing I did for Chameleon is I wanted to make sure that

04:38 the Chameleon RS is identical to what, if somebody adopts it, it's identical to what they used before.

04:44 We're not similar.

04:46 Byte for byte, identical.

04:47 That means the unit tests.

04:48 That means the bytes that come out.

04:50 And so on.

04:50 So what I did is I vendored into the repo, not the library, but the repo,

04:54 all the tests that came with Chameleon originally.

04:57 But guess what?

04:58 That means, oh, you got a whole ton of Python tests.

05:00 Like, well, yes, but I can say linguist vendored.

05:04 And that also makes it stay out of the stats.

05:06 But it tells it like, this is actually,

05:08 you might want to see this in a Git diff, but it's

05:11 brought in from something else and it doesn't count.

05:13 Like that might apply to your CSS example.

05:15 You know what I mean?

05:16 Well, every time.

05:17 You can also do docs.

05:18 Like in my example, there's a docs folder that is at the source for great docs.

05:23 And then there's the compiled output, which is the great doc site.

05:26 So I should probably put this on documentation to say like, this is actually not HTML that

05:31 counts.

05:31 This is HTML just for documentation.

05:33 And you can also just say, don't count this,

05:35 right?

05:36 Detectable is false.

05:37 So I put some examples like site slash star star is linguist generated and test upstream

05:42 star stars linguist vendor.

05:44 Isn't that cool?

05:45 Yeah, it's really cool. But can you get those stats

05:47 separate now from the ones about your actual project?

05:51 Or did it just completely ignored?

05:52 That's an interesting question. There is a CLI you can run to actually get it to tell you what

05:56 linguist thinks. I'm pretty sure playing with that.

05:59 But I think, yeah, yeah,

06:01 here it is actually.

06:02 Git check adder, linguist generated,

06:05 linguist detectable.

06:06 So you could probably put the flags in here.

06:09 And then you can report on it.

06:10 Yeah, see what it says.

06:11 Nice.

06:11 So now my project is 61% Rust and 40,

06:16 sorry, 30% Python.

06:18 I like that.

06:19 And it's kind of more of a truth in advertising.

06:21 It's actually a Rust project.

06:22 Yeah.

06:23 I think it's a little bit more Python than it. I think the bar,

06:26 the language bar is a little bit over reporting still.

06:29 There might be like some utilities and stuff that really don't count, but you know what? It's close enough. It's not 85% HTML.

06:34 Right. That's the important part.

06:37 That was what I'm going for.

06:38 And it's in the ballpark.

06:40 HTML is a programming language.

06:41 I know. And CSS is as well.

06:44 I cannot stand these developer surveys that are like,

06:48 guess what the three most popular languages are?

06:51 It's JavaScript, C++, and CSS.

06:55 You're like, CSS is not a...

06:57 It may be Turing complete, but no one is shipping a dedicated standalone app in CSS.

07:01 So no, it's out.

07:02 Right.

07:03 Yeah, I don't know.

07:04 I mean, I guess that makes sense.

07:05 It appears, but still.

07:06 Anyway, this is a kind of a cool trick that you can find.

07:08 So I wrote this up and gave people details so they can just follow along.

07:11 Nice.

07:11 We'll go update your metadata and that I'll put into your repositories.

07:15 That's super cool.

07:16 Yeah.

07:16 Speaking of metadata and tooling, the Python typing survey for 2026

07:23 has released its findings.

07:24 So the groups involved here were Meta, JetBrains,

07:29 Microsoft, and Astral were behind getting this.

07:33 they had about 18, almost 1800 results, responses to the survey itself.

07:38 And so you can come here to the Facebook or the meta engineering page.

07:42 They've got a breakdown of what they saw.

07:44 What's interesting is that the typing for the last three years that they've done the survey

07:50 has stayed pretty stable, you know, between kind of 88% and 85.5% of folks are basically

07:57 who responded are using type checkers, type hints in their code.

08:01 The thing that's not stable is actually checker they're using that has been changing.

08:05 So there's some obvious new folks on the scene,

08:08 like a Ty from Astral.

08:10 And then there's some folks who've been around a while,

08:12 quite a while, like the Microsoft ones

08:14 and the JetBrains groups too.

08:17 So there's also the thing is that a lot of people

08:20 are running more than one type checker at a time.

08:24 So a lot of times it depends on what framework they're using at what time,

08:27 what's what's used in CI versus what's used in their IDE.

08:30 And if two people are using two different IDEs,

08:32 One of them might have the one that just kind of comes out

08:34 of the box with a VS Code and other people might be using

08:37 the one that they're, you know, their preferences.

08:39 And another one that happens to here is people who are

08:41 getting the checker run automatically because they're

08:45 using some kind of agentic harness to run the code too.

08:49 So there's a lot going on there.

08:50 And so in 2025, 46% had two or more checkers.

08:54 And now that's up to like, I think 56% or no 49%.

08:59 So it's just bumped up almost to 50% at this point

09:02 who are running more or one checker at a time.

09:05 What else got reported here?

09:07 If you read through the report,

09:09 there's a lot of sections where people had kind of freeform typed in what they thought

09:13 their responses or what their responses were to these pieces.

09:16 A lot of folks I think are upset with AI.

09:19 You've used AI before to write some code.

09:22 Sometimes AI can be a little lazy.

09:23 It can be a little overly broad with its type hints that may put on to some of the... So that's a problem that

09:30 people complained about.

09:32 The AI writing types basically, they've got about 43% are writing

09:36 the type hints, but 38% says the AI makes the code more readable.

09:41 But they're not sure whether the AI is actually helping because sometimes they're just overly broad.

09:46 So I think if you can get good skills in your stack, make sure you tell it to write better type hints for your use cases.

09:55 There was another one in here, let's see here, gap,

09:59 because basically, oh, they got some graphs at the bottom.

10:02 Here it is.

10:03 Depending on how you use or how often you use types,

10:05 depending on how you felt about them.

10:07 Maybe that's not shocking to some people, but if you were rarely using types

10:11 and you were using them, you would think that they were too complex or too verbose.

10:16 And the opposite was kind of true.

10:17 If you rarely use types, you thought that the missing type information

10:20 from third party libraries maybe wasn't actually frustration,

10:23 where people who were very senior in using it, obviously that was a big frustration for folks.

10:27 So big thing to get basically discovered or surfaced through this report

10:32 was the fact that a lot of third-party libraries

10:34 either don't have hints on them at all, or it's kind of poorly implemented.

10:38 Maybe the AI threw overly broad ones in there.

10:40 So it's a lot, it again gets pretty broad and pretty hard to use

10:44 if you don't have good type hints available to you.

10:47 There's new ones on them, like I mentioned before,

10:49 Astral's Tie.

10:51 You'll see here, this graph is the 2026 is the 2025 results,

10:55 the 2026 in blue, the mypy and PyLance Pyrite usage has dropped slightly,

11:01 but you can see here, Ty has started to take a much more commanding position.

11:06 Last year it was 16%, this year is 37% compared to mypy and PyLance being like around 46% each.

11:14 So those three very commonly used, and you still got Pyrefly down in here and a couple other ones in the mix.

11:23 So Kind of cool.

11:24 Folks who are interested in checking it out.

11:25 I think, again, a lot of frustration comes down to the third-party libraries.

11:28 If you're a seasoned Python coder and you're trying to use these tools for real,

11:33 it can get frustrating.

11:34 So if you're a maintainer of a library, I think the message is get out there and make sure

11:39 you tighten up your type hints game.

11:41 Definitely tighten up your type hints and particular attention to the stuff that is your public

11:46 interface.

11:47 Like if it's some internal thing, who cares?

11:49 But if 100,000 people are going to be using it, put a little effort in that.

11:53 Yeah.

11:53 And so, I mean, there's some major projects that are guilty of this.

11:57 I think the frustration and the ones that were listed were things like SQLAlchemy,

12:01 Pandas, NumPy, and Django.

12:03 Yeah.

12:04 Those are big projects.

12:05 They've been around a long time.

12:06 I have heard of them.

12:08 You've heard of them.

12:09 I have heard of them.

12:10 Yes, I have.

12:10 That's good, Michael.

12:12 I got a quick follow-up, by the way.

12:15 Are you familiar with TypeShed?

12:17 Where you have these, like, if there's not actual types that people can work with.

12:21 No.

12:21 There's, like, all these stubs.

12:23 So different things can either install these or whatever.

12:26 So you're like, all right, PySox doesn't actually have types because why not, people?

12:30 I don't know.

12:30 But you can install this thing that just defines the signatures in a type way and put that

12:36 alongside your project.

12:37 And so I thought that this was for projects that did not have types,

12:41 period.

12:42 But what I learned earlier this year, I think it was, even if you do have really nice type

12:47 signatures and stuff in your library, Python doesn't necessarily trust it.

12:52 And the official type checkers don't trust it unless you put in pytyped.

12:57 Are you familiar with this?

12:58 P-Y dot typed.

12:59 Basically, if you ship this file, it can be an empty file.

13:03 But if you put this in your package, then the Python type checkers say this package has declared it actually cares about types and have set them explicitly.

13:12 And we will use this type information authoritatively rather than just maybe.

13:17 So anyway, a follow up to your comments.

13:20 package maintainers out there, please read about this, this py.type thing. And just,

13:25 it's no work.

13:26 You just put a file in there.

13:27 And long as you have typed, this now makes the type checkers trust it.

13:30 Yeah.

13:30 And another thing they mentioned in the survey results were the developer experience.

13:34 A lot of times, maybe if you had good type hints, even on the code,

13:38 you didn't have good annotations about maybe a friendly message saying what was wrong when there's an error, when that type

13:44 is incorrect, for example, it was a thing that people wished for.

13:48 Yeah, for sure.

13:50 Okay.

13:50 Well, let's keep building some maps,

13:52 Michael.

13:52 Let's vibe it up a little bit here.

13:54 All right.

13:55 So I want to talk about this place built by, the guy was on Talk Python a while ago,

14:01 Frederick Tubermont.

14:03 Fred.

14:04 So he put together this site that's kind of a manifesto.

14:07 I mean, you've heard of manifestos before.

14:09 Often they're kind of weird by people and like they've disconnected.

14:13 But there also can be things like the Agile Manifesto.

14:16 The Agile Manifesto comes to mind.

14:18 That's not a bunch of weird people.

14:19 They're nice and short and concise.

14:21 Not Unabomber.

14:22 But there's this place called flaskvibe.com that he put together.

14:26 And I don't, I think it's just for the heck of it.

14:28 I'm not really sure what the, if there's any more to it,

14:31 but it has a manifesto.

14:32 And the idea, like the H2 or whatever,

14:34 is build apps you can understand.

14:37 Flask, Postgres, Plain, SQL, plus Vanilla JS.

14:40 Like don't overcomplicate it.

14:42 I think this resonates a lot with me.

14:44 And I just wanted to bring this up as kind of an example to give to people.

14:47 Because I've been building my apps this way the last couple of years, and it's been pretty amazing.

14:51 What do you think?

14:51 I like this approach that kind of first principles don't throw on every fancy framework under the sun because it's kind of even more complex the deeper you go with those frameworks.

15:02 As opposed to this approach where it's, like you said, SQL,

15:04 vanilla JavaScript.

15:06 Like the AIs will write, if you're using this for the vibe coding, it'll write clearer code you can understand.

15:12 Yeah.

15:12 And a lot of times you use these frameworks, like you called out SQLAlchemy.

15:16 It'll appear here in a second.

15:17 like SQLAlchemy, they're there to hide the complexity from you,

15:21 but they themselves kind of obscure things a little bit.

15:24 The AIs are really good at all the little details.

15:27 And if they're going to write it, like you might be getting in their way more than helping them, you know?

15:32 Yeah.

15:32 So there's some examples that says like, look, let's compare this to Next.js versus Flask.

15:38 You got node modules, 300 megs. You got your package.json,

15:41 50 dependencies.

15:42 You got your next.config.js, your tsconfig.json,

15:47 your eslintrc, your.next build cache,

15:49 your webpack, your babble, et cetera, et cetera.

15:51 And that's like five minutes to build and install.

15:54 Do you have all the tools and the trans?

15:56 Versus app.py, 15 lines, requirements.txt,

15:59 three dependencies, templates, static.

16:01 We're done.

16:02 Let's roll.

16:02 You know what I mean?

16:03 You probably make it even smaller with just uv and pipeproject.toml.

16:07 Yeah.

16:07 Or I'm sure someone's done this.

16:10 build a flask app where it's actually that, that PEP where you just put the dependencies at the top and you just my

16:16 favorite one.

16:17 Yeah.

16:17 I forgot the number like seven 23, seven 38,

16:19 I think seven.

16:20 Yeah.

16:21 So you, you know better than I do.

16:22 so this is pretty neat.

16:24 And if you go look through, it's got some tutorials.

16:26 Now the tutorials are interesting, but like,

16:29 let me see if I can find an example here.

16:33 I don't know.

16:34 I like, I like the big end,

16:35 the first principles, especially if you're new,

16:37 this is going to help you understand actually what's being written and you,

16:40 you will become a better developer through this process too,

16:42 I imagine.

16:43 I would definitely think so.

16:44 So the examples are great, but some of them I found there to be very light on architectural guidance.

16:49 Like it'll have a flask view and a SQL query with a SQL.

16:53 It is by coding, Michael.

16:56 It's true. It is. It totally is.

16:58 But yeah, you can check out the manifesto and it's got some really nice, nice bits in here.

17:02 You know, like we prefer transparency over magic.

17:06 Yeah.

17:07 It's almost Python tenants there from like Xenopython.

17:09 It's very Python inspired.

17:11 I don't know where the SQL, do they talk about SQLAlchemy in this one?

17:15 I don't know.

17:16 In the manifesto, we don't know.

17:17 Yeah, like here.

17:18 So like user equals user.query.filterby, email equal this.first.

17:22 Like, oh, like exactly.

17:24 Like what is all this doing versus just, you know,

17:26 select star from, like you can see exactly.

17:28 These are the parameters.

17:29 Yeah, but when, when I grew up not as a SQL person,

17:33 as a object-oriented database person.

17:35 And so SQL, when it gets big and long and hairy,

17:39 but it's definitely not human readable anymore.

17:41 I am 100% with you.

17:43 And I love ORMs.

17:45 Yeah.

17:46 But if something else is right in it and it's better at this

17:50 and it's faster and it's lower memory and I don't have to read it.

17:53 Like if I'm not going to read it either way.

17:54 Have good tests.

17:55 I should stop defaulting.

17:58 Yeah, it's true.

17:58 But I should also stop defaulting to things that benefit.

18:01 Yeah, the human.

18:02 Me, but hurt like runtime, hurt memory,

18:06 hurt like the AI's capability, right?

18:08 Like at least it's worth considering the trade-off.

18:09 So anyway, I present to you a probably vibe-coded build apps

18:13 you can understand in Flask by sight.

18:16 Anyway, it's worth looking at.

18:17 I bet you can swap out like FastAPI in here for Flask.

18:19 But maybe that's against his manifesto.

18:21 Like I don't want to mess with his vibe.

18:23 I'll make a new one.

18:24 Fred's an interesting character.

18:25 He learned to code, started learning at 47,

18:29 and has like released a couple of SaaS apps that are like semi-successful or something.

18:35 It's never too late.

18:35 He's an interesting character.

18:36 It's never too late.

18:37 It's never too late.

18:38 I love that.

18:38 I mean, it's all about getting the timing right, wouldn't you say?

18:41 I would say it's about getting Python on your wrist.

18:44 Have you ever wanted to wear Python on you, like on your wristwatch,

18:48 for example?

18:48 Yes.

18:49 This is really cool.

18:50 So I found this one out there.

18:52 It's a guy from the Netherlands who had basically a Pine Time,

18:58 which if you've ever been to pine64.os or they make a bunch of open hardware.

19:04 If you look at a picture of it, what kind of watch does that look like?

19:07 I mean, it looks like an Apple Watch.

19:09 Apple?

19:09 It does look like an Apple Watch.

19:10 It does look like an Apple Watch.

19:13 It does look like an Apple Watch.

19:14 It's not an Apple Watch.

19:15 Apple Watches are like $700 starting range for a watch.

19:20 Guess how much this one costs?

19:21 Gosh, I don't know.

19:22 Is it from Adafruit?

19:23 $25, like $26 I think.

19:25 Oh my goodness.

19:26 So it's around $26 and you get an open smartwatch.

19:30 But the issue is, it runs the bottom of the box.

19:34 it comes with a C++ framework running in the embedded OS on it.

19:38 So there was a MicroPython out there that getting a little long in the tooth.

19:43 From 2019, it was a fork called Wasp OS.

19:46 So it's like a wearable Python OS for your smartwatch.

19:51 And Michael decided he would update it for today's version of MicroPython.

19:55 So he's gone through and forked the Wasp OS into his own version of that over here.

20:01 You can see this.

20:02 And it's got docs.

20:04 It's up to date with some new bits and stuff in here.

20:07 It's cool.

20:08 It's interesting 'cause now it works with uv.

20:12 Bluetooth flashing is actually a lot faster than it was prior.

20:15 I mean, he bought this watch that it looks like,

20:16 I think back in 2023 is what it says on the post.

20:19 And it was just sitting in a drawer.

20:21 And so he pulled it back out, went and looked at the Wasp OS,

20:23 decided I'm gonna bring this up to date.

20:25 So he forked it and noticed, note that the Wasp OS notes it's looking for new maintainers.

20:30 I think they might've found one here.

20:32 Hopefully Michael continues with the work he's been doing on it.

20:35 It's all done with uv and Bluetooth.

20:36 Like you basically flash it with a newer version

20:39 of the Bluetooth tool.

20:41 The free RAM at boot.

20:44 So this watch doesn't have much memory on it.

20:46 I can't remember what the exact, oh yeah, it's 64 kilobytes of RAM, bytes of RAM.

20:51 It has 512 kilobytes of flash for storage and it's a 64 megahertz.

20:58 I am not in this speaking, those,

21:00 if you catch the stats there, it's very, very small.

21:06 Basically, as he redid the project,

21:09 your free booted RAM went from only seven kilobytes free

21:12 to 12 kilobytes free, which is a considerable amount

21:15 considering how little is there to start with.

21:16 He's told it.

21:18 Yeah, so you've got room for apps now

21:20 and you can write the apps in Python.

21:23 He also added in things like watchdog and some vibration stuff and touch controls

21:28 some battery fixes.

21:30 So it's quite a few upstreamed or new features into the OS itself.

21:36 Now it runs the mainline MicroPython.

21:39 So the new version for MicroPython 1.3 is targeted for December.

21:43 There's also on the app itself, if you go back into the tier,

21:47 you get a nice kind of story about all the new things you put in there. It's like swiping works and you don't have to do buzzing

21:54 only the vibration stuff works and he added some apps so some new faces so you got watch faces you

21:59 can program in how you want it to display the time you can also have he wrote a guido app and it shows

22:06 the creator of python we're doing awesome here on the on the first swipe you swipe it again it gets

22:10 the python logo swipe it a third time the micro python logo and he swipe it a fourth time and is

22:15 the logo for his meetup in the netherlands uh which i can't remember the name of it exactly but

22:20 But yeah, you've got an app that you can run and it runs in the,

22:24 what was it?

22:24 I say 12K of free memory available on the watch.

22:28 Pretty cool.

22:29 Maybe you could load some of it into high mem and get it to run a little better.

22:31 Yeah.

22:32 Yeah.

22:32 So yeah, here's the device over here, pine64.org.

22:36 You can actually go buy the open watch for like I said,

22:39 26 bucks.

22:40 It's crazy.

22:42 They are working.

22:43 Apparently there's rumors of a Pine Time Pro, which will have an AMOLED screen,

22:48 GPS.

22:49 So the current one has heart rate and what's the other thing that was on there?

22:54 It's not super capable other than it has like a heart rate monitor on it.

22:58 So you can step, step counting.

22:59 That's what it was.

23:00 The new one will have GPS and an AMOLED screen and a dual core M33 processor,

23:05 obviously with probably more memory, more storage, more flash.

23:08 But the idea that it is open and inexpensive means there's potential to hack and play with it.

23:13 Another cool thing, I kind of do a little digging,

23:15 went down the rabbit hole in the Pine64.

23:18 They have a voice, open voice module

23:21 that you can work with a home assistant voice.

23:23 They're Pine Voice. - Oh, that's cool.

23:24 And it's like 50 bucks.

23:26 So very reasonably priced.

23:28 I get the impression though, that they are meant for the hacker community,

23:32 probably not meant for putting this on grandma's desk

23:36 for turning the lights on and off with your home assistant just yet.

23:40 But I think it'll get there.

23:41 And so that's pretty cool.

23:43 I don't know if you've ever wanted to have Python

23:45 on your wrist, but you can now using the news for code.

23:48 We like it.

23:48 Pine Time OS for the Wasp.

23:50 That's super neat.

23:51 Yeah.

23:52 Yeah, yeah, that's super neat.

23:52 I like it.

23:53 Yeah, I love wearables, so I had to pick this one and put it up here

23:56 because I would love to get this, have some more attention on the project itself

23:59 because 26 bucks doesn't have to be expensive.

24:03 It's like a Casio watch.

24:04 I think that's how they describe it.

24:06 It's kind of like your old school programmable Casio watch,

24:08 but the screen looks beautiful.

24:10 I mean, it's way better.

24:11 I mean, it's way better, and you can make it do other things.

24:14 Like the watch face you put up here has the Epoch time on it,

24:17 So time since, you know, Jan 1, 1970 on there.

24:21 So in 2038, is that going to be negative?

24:24 I don't know.

24:24 That's a good question.

24:26 I'm going to buy one.

24:27 26 bucks.

24:28 I mean, I think I need to have one of these.

24:31 That's pretty excellent.

24:32 Very cool.

24:32 All right, how about extra?

24:33 While you got your screen up, got anything extra to share?

24:35 Oh, sure.

24:35 Yeah, I do, actually.

24:37 Let me put this up on the screen.

24:40 There's a couple quick announcements.

24:42 Let me grab the link here.

24:43 Here we go.

24:44 PyPI.

24:45 PyPI.

24:46 I'm going to have a hard time with that one still.

24:47 Now limits versions to 128 characters.

24:50 And did you know, Michael, that there are a Python version of a package on PyPI that is 217 characters long?

24:57 Oh, my goodness.

24:59 Does that include like the machine architecture and all that?

25:01 Or is it just the package name itself?

25:04 It's whatever you've got in the version.

25:06 So, I mean, most of them are five characters or fewer.

25:08 Yes, like 1.4.

25:09 The version.

25:10 Yes.

25:10 So your version is now limited to 128 characters.

25:14 So constraining.

25:15 I can't do it.

25:16 Yeah, there were only out of 9.9 million releases on PyPI,

25:19 only two had a version that were near that long.

25:22 So I think we're safe now.

25:24 I think that's just all the work they're doing to get the stuff a little more in line and

25:28 safe for us.

25:29 The other quick extra I wanted to mention was Wagtail Space is coming up.

25:34 So if you are in the Django and the Wagtail CMS world,

25:37 and even if you're not, maybe you're just wanting to toy with it.

25:40 This is a free virtual conference that is November 18th, 20th.

25:45 So later this month and yours truly will be speaking.

25:48 I'm gonna be giving a talk about how to scale Wagtail

25:50 on Kubernetes.

25:51 So it'll be a little bit of a talk about how we use like

25:54 Argo CD and a lot of other cool tools to basically scale

26:00 something that can run a CMS on Wagtail.

26:02 But definitely go, its registration is free.

26:05 You can see the schedule.

26:06 There are a ton of great speakers.

26:07 I mean, I'm the least interesting maybe of the people

26:11 who are on this list.

26:12 There's some really great people who are contributors

26:14 to the Wagtail project who are speaking.

26:16 So come and check it out.

26:18 I'd appreciate more registrations for Wagtail space.

26:21 It's beautiful.

26:22 And they can do it online, right?

26:23 Yeah, it's all online.

26:24 It's all virtual.

26:25 You don't have to go any place for it.

26:27 And you can join the Wagtail folks for a fun day.

26:29 Yeah, cool.

26:30 Or two days.

26:31 All right.

26:31 Is that it for your items?

26:32 Yeah, that's it for me.

26:33 What do you got, Michael?

26:33 All right, I'm stealing the screen.

26:36 So quick shout out to Hugo, release manager.

26:40 Lots of Python releases for Cybersecurity Awareness Month.

26:44 Oh boy, is it definitely cybersecurity awareness.

26:47 Even if it's not officially, there's been so many things.

26:49 And there's like, there's a It's

26:51 more of a moving sliding window of 30 days.

26:53 Yeah, it's like trying to play whack-a-mole, but you're

26:57 the mole and you just got to keep running.

26:59 There's like a new unpatched vulnerability

27:02 in the Linux kernel for in the TCP layer.

27:05 That's going to be fun.

27:06 Have you heard this?

27:07 No.

27:07 Yeah, it's MC,

27:09 the Anthropic found a vulnerability and released it to the folks and so on,

27:16 but they haven't been able to fix it yet.

27:18 And so if you send the right kind of request and you have MPTCP, I think,

27:24 something like that.

27:25 I don't remember the exact protocol, but yeah, that's not good.

27:28 So we're going to see where that goes.

27:29 But so yeah, Cyber Awareness Month.

27:31 Stay on target, everyone.

27:33 Tell your friends.

27:34 Oh, I love the logo is a five and a quarter floppy disk.

27:37 It is.

27:38 Oh my God, it's a true floppy disk.

27:40 Alas, a real floppy disk.

27:41 So it says, hey, I, being Hugo, made seven Python releases

27:46 when I thought there were going to be two in October.

27:49 And so altogether, we made 16 Python releases

27:51 when five were originally planned with X releases,

27:54 da-da-da, not a security release, but a lot of announcements.

27:55 Thank you to that team.

27:56 Yes, huge thanks to Sovereign Tech Agencies Fellowship,

27:59 supporting my own work in all the releases, indeed.

28:02 And all the awesome people like Savannah, Thomas, Pablo,

28:05 Ned, and Seth, and so on.

28:07 So anyway, quick shout-out for that.

28:08 Keeping us all safe.

28:09 Yeah, and Pat sent that over.

28:10 Thanks for sending that in, Pat.

28:11 Also, just really quick, over at the Talk Python membership,

28:15 this week, if you go to the tech meetups, guess what's coming on Wednesday?

28:18 On Wednesday.

28:19 Yeah, the building and maintaining your own infrastructure for Python.

28:23 I'm going to be doing that.

28:23 And I have some surprises I'm not going to really tell anyone

28:27 until that talk.

28:28 You got to be there.

28:29 Got to show up.

28:29 So I'll link to that in the show notes as well.

28:32 And with that, let's close it out with a joke.

28:35 All right.

28:36 So this is a, what would you choose, Calvin?

28:39 I'm going to pose this to you.

28:40 Okay.

28:40 You probably haven't seen this because I just picked this joke five minutes before the show started.

28:45 So here we go.

28:45 It's like the Ren and Stimpy button.

28:48 Like, which would you choose?

28:49 Oh, so stressful.

28:50 Which big red button would you press?

28:52 One is, what code would you rather maintain?

28:55 Fix and maintain your code of choice.

28:57 Fortran code from 1969 or Vibe code from 2025?

29:03 I don't know.

29:04 I'm going to go.

29:07 That's hard.

29:08 Fortran.

29:09 are you going Fortran maybe I'm going vibe code I'm at least it's in like modern tools well if I

29:14 can maintain it with uh modern tools yeah well yeah dude this is do you have to maintain it by hand

29:19 then oh I don't know gosh I still don't know it could be a modern language but it's gonna be

29:25 gnarly it better be a modern language I know I mean that was my first computer science class I ever

29:31 took in college was Fortran mine too I tried to take C++ and I was in an engineering program they

29:37 said you could take that as an elective you have to do fortran first that would be the most important

29:42 right course you will ever take in your life i'm like you guys are so out of touch i cannot believe

29:46 i was like please let me take this please please like nope f77 yeah it was amazing amazingly uh

29:53 something anyway i don't know what i would pick but it is a very stressful red button that is a

29:58 very stressful not stressful was our episode was it no it was really good thank you for joining us

30:05 and we'll see you all.

30:07 Are we recording next week?

30:08 We're a week off in there someplace.

30:10 But perhaps.

30:11 Perhaps.

30:11 Or we'll see you next week.

30:12 Or soon on the air.

30:13 We'll leave a surprise for the listeners.

30:15 Right.

30:16 You just have to go to pythonbytes.fm and check and see.

30:19 That's right.

30:20 All right.

30:20 We'll see you all later.


Want to go deeper? Check our courses




Subscribe to Python Bytes