Podchaser Logo
Home
#368: That episode where we just ship open source

#368: That episode where we just ship open source

Released Tuesday, 23rd January 2024
Good episode? Give it some love!
#368: That episode where we just ship open source

#368: That episode where we just ship open source

#368: That episode where we just ship open source

#368: That episode where we just ship open source

Tuesday, 23rd January 2024
Good episode? Give it some love!
Rate Episode

Episode Transcript

Transcripts are displayed as originally observed. Some content, including advertisements may have changed.

Use Ctrl + F to search

0:00

Hello and welcome to Python bytes where

0:02

we deliver Python news and headlines directly

0:04

to your earbuds. This is episode 368

0:06

recorded January 23rd, 2024. I'm Michael Kennedy.

0:14

And I'm Brian. I can this episode is

0:16

sponsored by us support us by

0:19

checking out our work. We do lots

0:21

of things. We have many, many courses

0:23

over at talk by the on training.

0:25

We have the complete high test course.

0:27

We have patreon supporters, you can become

0:29

one in the show page, the

0:31

episode page and connect with all of

0:33

us, all three of us, Brian, me

0:35

and the show over on faucet on.org.

0:37

And if you want to be part

0:39

of the live episode, it's Python bytes.fm

0:41

slash live, usually Tuesdays at 10am. We've

0:43

changed it. We have a new time,

0:45

Brian. New time. Yes. New time. So

0:47

that's the plan for now until it's

0:50

not the plan, but we love it

0:52

when people show up for the show

0:54

and now let's let's dive right in.

0:56

Go for it, Brian. What you got?

0:59

Well, I wanted to talk about debugging a

1:01

little bit because we've got a

1:04

blog post. Actually, it's a blog

1:06

post and a really a newsletter

1:09

episode from

1:11

Eunice. It's a

1:13

site called Syntax error. And it

1:16

looks like it's a collection.

1:19

It's a newsletter about debugging, which is

1:21

kind of nice. And somehow I missed

1:23

it in the past year.

1:25

It started. It looks like February

1:27

of 2023. But we're

1:29

on episode 11 or issue 11 and

1:31

it's kind of a summary. So it's pretty

1:34

neat. It's talking about debugging Python. I really

1:36

love just the concept, the concept

1:38

of this of the newsletter, but also just

1:41

it's really good content in a small thing.

1:43

So what is he talking about? So if

1:45

you're debugging some code, you, the first thing

1:47

you got to do is you got to

1:49

get in the right mindset and then you,

1:52

then you can use some tools. So I'm

1:54

glad that he starts that with the mindset.

1:56

Just talking about mindset. Take a break. Stop.

1:59

Breathe. I'm in and come

2:01

back to it and this breaking away

2:03

from frustrated with your code to clearing

2:06

your head is really important i don't

2:08

don't skip that i think it's essential

2:10

go grab a cup of coffee or

2:12

something. I'm

2:14

using a step by step process

2:16

don't i'm just i mean it's

2:19

hard to say not to just jump to the thing that

2:21

you think might be broken and try to fix it okay

2:23

after you did that and it didn't work then come back

2:25

to this. And then do a

2:27

step by step methodical process and i

2:30

think it's very helpful. There's

2:32

a little comic here which is great of of grew

2:35

from a forget

2:38

the name of the movie. But

2:41

he says i need to debug an issue

2:43

set a break point to get started the

2:45

break point never hits the break point never

2:47

hits it's pretty funny anyway so

2:49

being methodical about it will help.

2:53

And then i'm glad he brought

2:55

this up talking about rubber ducking

2:57

or talking to ducks and this

2:59

is this is an age old and

3:02

i don't know if it ever actually

3:04

happened in my computer science classes in

3:06

our lab we had a stuffed monkey.

3:09

That if you ask the ask the

3:11

TAs or the the grad

3:14

students that were hanging out in the lab for

3:16

help they would say the ask

3:18

the monkey first. I'm into

3:21

this is just essentially getting a

3:23

description of the bug the situation

3:25

the background information in your

3:27

mind in a way that you can say it out loud will

3:30

sometimes completely solve the problem it's

3:33

incredible incredible tool. I

3:36

want to think that was interesting is

3:38

he talks about brain dump is

3:41

an alternative solution is i'm writing on

3:43

paper if you're not the kind

3:45

of person that verbalizing helps writing on paper

3:47

might help. Okay now let's get into the

3:49

tech that the tools the tools that help

3:52

with debugging and i used

3:54

to feel guilty about this all the time

3:56

but i reach for print all the time

3:58

so or. Or

4:00

some sort of like that don't you don't do

4:02

print come on. So

4:05

his technique is to start with print because

4:07

it's low friction everybody knows how to do

4:09

it plus we have strings now and

4:11

with the with the equal sign if you

4:14

do like curly braces and then the variable

4:16

name with the equal it just says it's

4:19

great it anyway. It's

4:21

really easy to debug print which is good

4:23

and it's a little friction it's easy to

4:25

add snoop is

4:28

a is a interesting cold tool kit

4:30

that he talks about for helping

4:32

to see what's going on within your code

4:34

at each step it's pretty cool tools well

4:36

i'll just quickly go through some of the

4:39

other two that's the two like

4:41

printing logging sort of things there's also ice

4:43

cream that he mentions. And

4:47

there's debuggers so talking about debuggers

4:49

this is not it's your singly

4:51

isn't mentioned like i'd use which

4:53

that's what i usually usually reach

4:55

for is like either a pie

4:57

charm or vs code debugger but.

5:01

Sometimes you don't have access to those if you

5:03

like if you're in to something or whatever so

5:06

invoking being able to use

5:08

pdb i think he talks about pdb

5:10

which is the python debugger i i

5:12

learned how to actually had learned how

5:14

to do this mostly just to talk

5:17

about using pdb with pytast for the

5:19

book and now i use it once

5:21

in a while because sometimes it's it's

5:23

it's even more convenient especially when using

5:25

pdb with talks it's great so. Pdb

5:28

i pdb which is an interactive

5:30

repel sort of thing pudb

5:33

which is kind of like a it

5:35

got panels and stuff it's nice terminal

5:38

ui web pdb which the

5:40

same thing with the browser it's kinda nice

5:42

bird's eye is something i hadn't seen before

5:44

which is kind of cool talking about birds

5:46

eye. It has these

5:49

kind of neat diagrams with

5:51

like boxes around stuff as

5:53

things change it's a interesting

5:56

interface. Yeah yeah

5:58

i don't know if it's for. me

6:00

but if it resonates with you, it's

6:02

great. It might be worth trying on

6:04

a project. Kind of neat.

6:07

Anyway, and then a quick shout

6:09

out to some Django tools. If

6:12

you're debugging Django, there's the debug

6:14

Django tool, the Django debug toolbar

6:16

and an extension for

6:18

VS Code called colo. Anyway,

6:21

some great advice about debugging specifically

6:24

Python but really a lot

6:26

of this advice applies to

6:28

everything. So nice and kind

6:31

of nice that there's a newsletter around that. Yeah,

6:33

it is a nice newsletter. There's something kind of

6:35

good about permanency of written stuff rather than, I

6:37

mean, what we do is great and I think

6:40

it connects with a lot of people but it's

6:42

it's harder to go back to it and like

6:44

search it. Yeah and

6:46

I kind of like the idea of,

6:48

I know that a lot of newsletter

6:50

software like Substack and things like that

6:53

can keep it around for

6:55

you in medium but I like the idea

6:57

of somebody doing newsletter and putting

6:59

the newsletter things on blog posts at the

7:01

same time for people to reach

7:03

out to. So neat. I might have more to say

7:06

about that later but

7:08

I also have something to say about what

7:11

you just pointed out, what you just talked

7:13

about and I have just done

7:15

a new project. I have some things that

7:17

I've been working on and I already talked

7:19

about the Leaving the Cloud and the interview

7:21

with Mark Percentovich and how that inspired me

7:23

to kind of rethink how our infrastructure goes

7:25

and it is just paying so many dividends.

7:27

I'm going to talk about it in some

7:30

interesting ways and as part of that I've had

7:32

to write a little bit in your software and

7:34

I need some logging. I'm going to try

7:36

LogGuru. LogGuru? I know the G is combined

7:39

and wow is this a nice piece of

7:41

logging software. So what I would suggest, Brian,

7:43

if you're feeling the print coming on, if

7:45

you're like, I'm going to print this, I'm

7:47

going to print my way to this bug

7:50

solving this problem, maybe consider LogGuru-ing

7:52

your way. You just create the

7:54

LogGuru thing and you can specify,

7:56

you can say use color and

7:58

all of that. And it will

8:00

also do print statements just to sis out, right?

8:04

But you can see right here on their

8:06

homepage it says how to do color and

8:08

stuff like that. And

8:10

then if you just logger.info or

8:12

whatever, it'll print it out but way

8:14

more structured and with color. And then

8:16

if there's an exception, you're going to

8:19

say printE, or the exception.

8:21

You could just say logger.exception. And

8:24

it will create the traceback showing

8:26

the local variables at every step.

8:28

So instead of having to jump into

8:30

the debugger, you can just print your way to like, oh,

8:32

here's the entire call stack and all the values. That's pretty

8:35

cool. I super, super recommend it.

8:37

I've been using logbook. I'm a log Guru

8:39

fan. I'm resisting the urge to go and

8:41

rewrite all of my logging for all of

8:43

my things. Because it's not

8:45

that productive. But boy, is my logging not cool. All

8:49

right, that's not what I want to talk about. But

8:51

I want to talk about things that were kind

8:53

of inspired by that. So first I want to

8:56

talk about umami. And this has a Python loopback

8:59

really, really quickly here. But let's

9:01

start from the outside in.

9:04

Okay. Okay. So Brian,

9:06

I set up umami at

9:08

umami.is, which is like Google

9:11

Analytics, but not evil. That's

9:13

awesome, right? So the idea

9:15

is it's privacy preserving. It is

9:17

GDPR and CCPA compliant.

9:19

It's open source and

9:22

you can buy it as a service. I can

9:24

go over here and say pricing for nine bucks.

9:28

Some period I will get some number

9:30

of websites and it'll give me analytics

9:33

like Google Analytics for my

9:35

site. Right. That's

9:37

pretty cool. But what's better, the problem with

9:40

that is it's still third party JavaScript.

9:42

Even if they don't use cookies, but

9:44

it's still third party JavaScript. And by way of

9:46

that, it gets blocked a lot. Especially

9:49

by the developer crowd, right? And I'm not,

9:51

that's not a criticism. I'm like on the

9:53

high end of blocking, right? Like I'm like,

9:56

no, no, we're not doing this. No, you

9:58

don't need this kind of stuff. But

10:00

if you run it on your own infrastructure

10:03

under your own domain, the app is doing

10:05

nothing nefarious. It's talking to

10:07

itself for some things and it's going back and talking to itself for other

10:09

forward tracking. So this is

10:11

really, really easy to run under Docker as

10:13

a multi-tiered Docker app on your own domain,

10:16

which is what I'm doing. And so now, it

10:18

can have some really nice insights into what are

10:21

happening on Python Bytes.fm, the

10:23

courses, all that without sharing

10:25

any data with anyone ever and without

10:27

being blocked because it's

10:30

just code running on our own server, just like everything

10:32

else on the website. That's cool. Awesome, right? The problem

10:34

is, if you go over here and you're like, awesome,

10:37

okay, developers, this is me, I'm a developer, let's go,

10:39

let's take me to the docs. And

10:41

cool, look, there's an API section at the end

10:43

down here. Okay, and oh, look, there's

10:45

an API client. I don't want to write code. That's

10:47

great. NPM install API

10:50

client. Oh, crap.

10:54

The only API client for umami

10:56

is JavaScript or TypeScript. I don't

10:58

know. It doesn't matter. It runs

11:00

in JavaScript. It's not Python, right? Actually, TypeScript.

11:02

This whole app is basically TypeScript, right? That

11:04

was until this week. So

11:07

some guy down here named Michael

11:09

released this thing called umami-analytics, put

11:12

it on PyPI, go over to

11:14

the homepage. And

11:17

you can see it talks about how it works.

11:19

Basically, one of the things that's really nice

11:21

about umami over certain other systems, like

11:25

plausible.io is one that has been thrown

11:27

around in the same space and it's

11:29

similar, is that with umami, you

11:31

can send custom events that have nothing

11:34

to do with direct web actions. So

11:36

for an example, suppose somebody signs

11:40

up for an account and then opts into your newsletter.

11:42

You just talked about newsletters. And then that's a double opt-in.

11:45

So they get an email, which then goes

11:47

back to some other place where they actually

11:49

say, yes, I really, really do want to

11:52

get this. It would be cool if you

11:54

could know, okay, that happened, right? And so

11:56

the whole point of this Python

11:58

library is to add PyPI. Python-based

12:01

events to your analytics on top of just what the JavaScript

12:03

is like. You're on this page and then you went to

12:05

that page and you came from this place and you're on

12:07

this browser. It'll let you send in

12:10

things like, somebody bought a course, somebody

12:12

confirmed their email address, somebody logged in

12:14

with the mobile app for the first

12:16

time. Like all of these things that

12:18

have no straight

12:20

HTML JavaScript experience, you can just pump those

12:22

in right alongside all of your other analytics.

12:25

Still all privacy preserving, not sharing

12:27

data with anybody, no retargeting, no

12:30

cookies, none of that crap. Just I

12:32

want to view into what's happening in my app. So this

12:34

thing lets you add a custom event and

12:37

also you can register multiple sites, you can

12:39

list them out. It

12:41

has both synchronous and asynchronous programming

12:44

models based on Pydantic and HCPX

12:47

and yeah, super easy to use. Very cool.

12:49

That name? Yeah. So recommend

12:52

Umami, but one of the problems with Umami is

12:54

there's not really a great client to round that

12:56

out. So check out the one that I created.

12:59

Nice. There's going to be a theme this

13:01

week. So apparently, we

13:03

didn't plan this. Like no. Yeah. If

13:06

we did, we would have both worn blue shirts.

13:08

Oh wait, we're both wearing blue shirts. We are

13:10

wearing blue shirts. Oh, my tent is off though.

13:13

All right, over to you. I had an extra

13:15

from the last one because there was a link

13:18

from Eunice about fstrings.help,

13:20

which I think I've seen before,

13:22

but I kind of forgot about,

13:24

but just looks like a Jupyter

13:26

notebook about fstrings, which

13:28

is okay. Well, I'll have a link in that in

13:31

the show notes. I

13:33

wanted to mention that, so

13:35

I did an open source

13:37

thing also. So I released a thing

13:40

called a- Oh, you did? Okay. Pytest

13:42

suite timeout. And

13:44

there's a little, I guess a

13:47

story around it. So what happened

13:49

was I recorded an episode of

13:51

Python test about repeating tests. And

13:53

I noted that Pytest repeat doesn't

13:55

have a timeout, but Pytest flake finder does have

13:58

a timeout and it'd be kind of neat. if

14:00

repeat had a timeout also. And

14:03

by timeout, I mean, like there's a, like

14:05

the entire suite. So if I want to

14:07

say like, Hey, I want to run like,

14:09

here's, I have an example. I want to

14:11

run the, my suite like a thousand times

14:14

or my test a test thousand times, cause

14:16

I'm looking for flaky behavior or something. But

14:18

I want to make sure that it only runs like 10

14:21

minutes. Um, then I want

14:23

that to be, I wanted like the entire suite,

14:25

not, not individual tests, but the entire suite to

14:27

only be like 10 minutes or an hour or

14:29

whatever, um, that's the behavior I

14:31

want. And I couldn't figure it out.

14:33

And so I wrote this

14:35

now it could have been in, in pytest

14:38

repeat, but while I was

14:40

thinking about it, I thought, well, I

14:42

have other times where like I'm, I've

14:44

got parameterized tests that are like big

14:46

lists, like 20 different waveforms or something

14:48

that I'm passing through something. Um, uh,

14:51

and sometimes I don't really know how long those are

14:53

going to take. Uh, it'd be kind of nice to

14:55

be able to say, Hey, I want to make sure

14:58

that the whole suite isn't longer than so much. So,

15:00

um, so I made it its own

15:02

plugin. So here it is, uh, pytest

15:04

suite timeout. You just pass it a

15:06

flag. It's still, I just sort

15:08

of did this a couple of days ago and, um, I think

15:11

there might be bugs in it. So, um,

15:14

I guess don't put it in production yet.

15:16

Um, that's why I know production. Yeah. It's

15:19

a little lower, uh, lower

15:21

bar for test production rather than I took

15:23

down the website. I just took down CD

15:25

CICD is possibly what you might take down,

15:28

which is still a problem. Yeah. Well,

15:30

I think I, I think I just ran

15:32

across this morning. I was playing with it

15:34

at least one use case. The word doesn't

15:36

actually time out. Um, but so that's, that's

15:39

the behavior when it fails is it won't

15:41

time out. Uh, but we'll, we'll, we'll work

15:43

with it and fix it. Um, super cool.

15:45

Uh, one of the, I announced it on,

15:47

uh, mastodon and Mike Felder, um, uh, said,

15:51

that's pretty cool. But have you tried,

15:53

uh, Python dash timeout, which yeah, there's

15:55

another one called timeout and it seems

15:58

like that should be like. what

16:00

I want. It's just the time out is the,

16:02

the PyTest timeout is per test.

16:05

It just makes sure that individual

16:07

tests themselves don't run longer than

16:09

a certain amount.

16:11

And this is kind of like, you

16:14

should know this, right? Probably about how

16:16

long your tests run. But

16:18

there's, there's, it's Python and software.

16:20

So sometimes infinite loops happen or

16:22

some use case that you never

16:24

break out of. Well,

16:27

also like just

16:29

the fact that it's taking way longer than it should

16:31

might be something

16:33

you want to trigger as an error,

16:35

right? Like if for some reason you

16:38

want to talk to a database or an API directly and

16:40

you're not stubbing it out, if those things are down, it

16:42

could take 20 seconds for them to

16:44

say, nope, every single time. And you might want

16:47

to say, if this ever takes more than five

16:49

seconds, something's wrong and just kill it. You know

16:51

what I mean? Right? Like I

16:53

think that would even be reasonable. Yeah. So that'd

16:55

be, that's the idea around PyTest timeout is if

16:57

it takes longer than a certain amount attempts to

16:59

kill it. And it does, it does

17:01

like SIG events and stuff to try

17:04

to kill the process that's going, taking

17:06

too long. So where's the new one?

17:08

Sweet timeout is nice. It, though it

17:10

won't kill anything. Um, but it also,

17:12

it won't stop something like that, but

17:14

it'll, uh, it'll just, uh, between tests

17:16

say, Hey, this is taking kind of

17:19

too long. Let's stop now. So, okay.

17:22

Well, you might not want to, you

17:24

know, SIG kill either, because what if

17:26

it's going to put something

17:28

in a database, do some stuff and then take

17:30

it back out or make a file change and then clean up

17:32

the temporary files or, you know, whatever, right? Yeah.

17:35

Um, the, the other part of this

17:37

though is I think it's too nice

17:40

so far. It doesn't throw any exceptions

17:42

or errors or anything. It just stops

17:44

the counting. So if you normally, like

17:46

in this example, if I had a

17:48

thousand and I only get through like

17:50

150, it just stops, passes

17:53

everything, but it only ran out in 50

17:55

instead of a thousand. I'm trying to figure

17:57

out a way to like alert the user.

18:00

little bit more that there's something wrong.

18:03

Um, so we'll, we'll see. It'll grow a

18:05

little bit after, after this. Oh, oh, excellent.

18:07

Excellent. This is a crazy episode of where

18:09

it's just, we all created a bunch of

18:11

things. So let's go back to things we

18:13

created. Huh? Okay. This one

18:16

is also a thing I didn't create,

18:18

but outside in again. So I've

18:20

been using MailChimp for years. And when

18:22

I first started using MailChimp, you know,

18:24

MailChimp is I want to let you

18:26

subscribe to my newsletter and put you into groups

18:28

so that if I only want to talk to

18:31

the talk Python people, I can send that message.

18:33

If I only want to talk to the Python

18:35

bytes people, I can send that message. Right. And

18:37

the price has just been going up and up

18:40

and up like hundreds of a hundred dollars this

18:42

month, the next one, then another hundred dollars. And

18:44

like, what is going on with these people? You

18:46

know, Intuit bought it and it used to be

18:49

like kind of a cute little company. And now

18:51

it's just a accounting firm grinding its users. And

18:53

I kind of don't want anything else to do

18:55

with it. And I would much prefer to not

18:58

share all of the people, customers, people who just

19:00

want to subscribe their data with a third party

19:02

either. Right. So I went on, I think I

19:04

talked about this before. Remember I talked about the

19:07

10 different options that people had sent out of

19:09

possible newsletter places. Yeah. I wish I remember who

19:11

told me on Mastodon, but somebody said, well, there's

19:13

these five open source ones like, wait a minute.

19:15

Okay. That's interesting. And so after a bunch of

19:18

research, I decided to turn on a list monk

19:20

and list monk is written in go

19:23

and it's an open source.

19:25

There's not even a SAS version.

19:27

It's just self hosted version of

19:30

basically MailChimp, right? You can have different lists. People can

19:32

subscribe to them. You can put them into groups. You

19:34

send them emails, all that kind of stuff. Right. So

19:37

I, again, cause I have all this cool

19:39

Docker infrastructure stuff set up. Now it was

19:41

super easy to just move that over and

19:43

run that in Docker. Right. Just like you

19:45

mom, you're like, okay, how do I talk

19:47

to it? Go. There's not even an official

19:49

API client. The ones you find are like,

19:51

well, here's one for PHP. There's

19:54

actually several for Python, but they're really

19:56

bad and they don't work. I mean,

19:58

really bad. So some

20:01

of them, for example, are just, they

20:03

look at the Swagger docs, at

20:05

the open API docs and they just auto-generated.

20:07

But somehow it's like stuck in time, auto-generated

20:09

on an old version that doesn't work anymore.

20:11

I don't know, it's like even the auto-generated

20:13

one doesn't work, I'm like, ah man, I

20:15

really need this. Even more than the

20:17

umami thing, I need code to be written. So like

20:19

someone creates an account, when they buy a course and

20:22

they say, yes, I wanna be, you know, I asked

20:24

them, do you wanna be in the middle of this?

20:26

Yes, I wanna be there. How do I make that

20:28

happen, right? Well, Python of course. So

20:30

over the next project,

20:33

listmonkemailappapi, client for Python,

20:36

or just pip install

20:38

listmonke. Okay. So

20:40

over here, this is the next one, super

20:42

nice. You can add a subscriber, get details

20:44

about them. One of the things that's cool

20:47

in listmonke is there's a arbitrary JSON, Python

20:50

dictionary type thing associated with each user. So

20:52

whatever data you wanna put in there, you

20:54

can. And with this thing, you can manage

20:56

it. Like for example, if one

20:58

thing that's common is you have a rating or

21:00

things along those lines or actions, so you

21:03

could put that into the user as part

21:05

of their user record. So you can manage

21:07

it with that. You can search them, check

21:09

the health of your self hosted thing, segment

21:11

on your list. Obviously you gotta unsubscribe and

21:13

delete users. You can even send transactional emails.

21:16

So super, super cool stuff.

21:18

Again, one more nice open source

21:20

thing that's not some

21:23

big, super expensive, privacy

21:25

questionable SaaS service. And

21:27

instead running good over here

21:29

does take a little bit of work. Umami

21:31

is like perfect. This is

21:34

a little clunky in some little

21:36

edge cases, but it's still quite nice.

21:38

So that's the next project. Also available

21:41

on PyPI today. Nice.

21:43

That's it for our items. Cool.

21:47

Between all these things, we can help people write one,

21:49

a little bit better tests. And

21:51

to depend a little bit less

21:53

on just giving up a little

21:55

bit of privacy to trade in

21:57

convenience, like Google Analytics, for example,

21:59

or. to a lesser degree, some of these

22:01

mail platforms. Yeah. Yeah, and save some money while

22:03

you're at it. All right. Well,

22:05

normally we would jump into some

22:07

extras and I don't have

22:09

any extras this week. So do you have any

22:12

extras? I do have extras. Well, let's

22:14

see what have I got here. Yeah,

22:16

okay, so the first one is if I'm

22:18

running, self-hosting these things, I'm running them in

22:20

a Docker cluster. So it's really easy to

22:23

basically just do a Docker pull, restart,

22:26

relaunch the app, off it goes.

22:29

So that's awesome. That's one of the reasons

22:31

I'm willing to run like Umami rather than

22:33

like I have a server and all these

22:35

database things. I get a patch and whatever,

22:37

right? Just literally one command to manage

22:39

like 15 multi-tier apps, it's

22:41

awesome. But how do you know when there's a

22:44

new one? Obviously you could just

22:46

set it up to just do it continuously.

22:48

But what I realized is every GitHub repository,

22:50

this has nothing to do with Umami, just

22:52

an example, every GitHub repository, if they use

22:55

releases, right? If you

22:57

go over here and you say

22:59

like the releases, like I have

23:01

a V01.10 for my Umami thing,

23:03

there's actually two of them. If you have

23:05

that for any project, you can just go to

23:08

the GitHub URL for

23:10

the web, not the .get thing

23:12

and just do slash releases.atom and

23:15

that's an RSS feed for the releases for

23:17

any GitHub project, even if they don't have

23:20

a blog. Wow. That's cool, right? Yeah, I

23:22

can put the feed leave in. Yes,

23:24

I put it in Reader for me and now

23:27

I have Lismock and Umami and a

23:29

few other things that I'm like, if this gets changed,

23:31

I probably wanna just go take a little action on

23:33

that real quick and now it's in my RSS feed.

23:36

That's pretty cool. Yeah, so very simple. Anyone

23:38

can just watch whatever they want. Brian, we

23:40

both tried to do this one. Yeah. Kolo,

23:43

you mentioned that in your article, I ran across this,

23:45

sorry, I don't remember the last name, but I saw

23:48

one of my Mastodon

23:50

followers, Lily. She somehow

23:53

interacted with me and her profile came

23:55

by in my app and I saw

23:57

that she works on this thing called

23:59

Kolo. debugging for Django apps. I'm

24:01

like, oh, that's interesting, what is this?

24:03

So this is a thing that's in

24:05

beta, and it says, see everything happening

24:08

in your running Django app. And they

24:10

have a really nice design of their

24:13

webpage here. So, I'll be best to

24:15

see visually, says, debug your Django app

24:17

10 times faster, get instant access, et

24:19

cetera, et cetera. So this is a

24:21

plugin or extension for VS Code, and

24:23

it just has tons of information all

24:26

available to you. So it has a

24:28

tab, or whatever the thing on the

24:30

left is, you expand extension, the files, and

24:32

it plugs into that thing, a little pain,

24:34

I guess. And it shows

24:36

you the request response, like kind

24:38

of like DevTools in a web browser. So

24:41

you can see headers, HTTP

24:43

requests, responses, as kind of a

24:45

running history of the HTTP exchange

24:47

your browser is having with your

24:49

Django app. That's cool, right? Yeah.

24:51

And I think it's showing you,

24:53

not entirely sure, but I think

24:55

it might be showing you even

24:57

Python code, not just web things,

24:59

right? It has local variables, arguments,

25:02

and it has even like this

25:04

tree thing for visualizing code execution

25:06

paths. So, yeah. Yeah,

25:09

so you click on the, sorry, you click on

25:11

the request, it shows you the code, and then

25:13

it actually shows you the local variables that were

25:15

passed around as well. It's pretty neat. Yeah, I

25:17

don't know that the tree, the

25:19

visual thing is super pretty, but I don't know

25:21

how it is, but I haven't played with it

25:23

yet. It's awesome, wouldn't

25:25

use it. Yeah,

25:30

you can do, what is it? Inspect

25:32

all the outbound HTTP requests made. That's kind

25:35

of neat. And SQL

25:37

queries, it'll track all

25:39

the SQL queries that were made. Really

25:41

good for understanding what's happening. What's up,

25:43

Brian? Good. No, it's just really nice because

25:45

you never know when your queries get out

25:47

of hand and you're making way more than you need

25:49

to. Exactly, especially in

25:52

the ORM space, because

25:54

it's so easy to do lazy loading and say,

25:56

give me all the customers. For each customer, get

25:58

me this thing. them and that's

26:00

a relationship. So every time do

26:03

the loop, it's another database query, the

26:05

so-called n plus one form

26:07

is problem, right? And you would just see like,

26:09

whoa, the SQL thing is full. I thought they

26:11

were like two or three requests and now it's

26:13

just full. What is happening here, right? So that's

26:15

great. Yeah. Anyway, ooh, background

26:17

jobs. Yeah. Even contract your salary background tasks.

26:20

So right now it's in beta. I'm pretty

26:22

sure this is a thing that costs money

26:24

at some point. Yeah.

26:26

So if you VS code, check this

26:28

out. It's kind of interesting. Yeah, definitely

26:31

neat. All right. Another thing that's cool is

26:33

I've talked about warp

26:36

before and I've been using warp at the terminal

26:38

a lot. One of the drawbacks of warp for

26:40

all of its beauty and cool

26:42

features is that it doesn't,

26:44

it only works on Mac for now,

26:46

which is a limitation. Let's call it.

26:49

Not for me. For other people, not

26:52

for me, but for a good chunk.

26:54

Now I say he's only somewhat of

26:56

a limitation. So like on my Mac,

26:58

if I SSH into my Docker cluster

27:00

thing that I've been talking about,

27:03

warp will like inject the warp

27:05

behaviors into the Linux shell

27:07

over there. So I get like end

27:09

to end warp as a Mac user.

27:11

But if I was actually a Linux

27:13

user, I couldn't use warp because it's

27:15

a Mac app until pretty much now.

27:17

Right? So coming soon is warp on

27:20

Linux. So people want to sign up

27:22

for that. I put a link for

27:24

in the Linux terminal signup page to

27:26

get on the wait list and warp

27:28

is just a super neat way to work

27:30

with your terminals. More like an

27:32

editor. It's got AI built in, which most

27:34

AI built in things I hate. They're really

27:37

bad, but you can say things like just

27:39

say hash. And then you'll say something like,

27:41

you know, search this directory for all files

27:43

with this pattern, except that directory. And then

27:45

it'll go, here's the command that you type.

27:48

You know, like that kind of, it's because it's that kind of

27:50

stuff that I'm like, what's the parameter to this? How

27:53

do I grab that again? I don't have no idea. So

27:56

anyway, it's pretty cool. I wonder if it's

27:58

set up. I'm just curious if it. since

28:00

they're doing different platforms, if they've got

28:02

a UI layer and then a warp

28:05

core. Oh my God, they probably

28:07

do have a warp core. And if they didn't name it that,

28:09

they've really lost a chance here,

28:12

right? Yeah, hopefully. So I talked

28:14

about this before. I realized through

28:16

search about two and a half

28:18

years ago, something called B-PY-TOP.

28:20

So B-PY-TOP is an awesome, over, it

28:23

gets too small, it thinks it's gonna

28:25

hide all of its graphics, way to

28:27

look at how your server is going.

28:30

And it is so neat,

28:32

the way that this app works. I

28:34

definitely, let me just, I'll put it

28:37

up. Here's the live running version of

28:40

the one that I've been messing with lately. And

28:43

Brian, you can see you've got your memory. There's

28:45

not a whole lot of action going on right now. So it's

28:47

kind of flat graphs, but like if the memory jumped up, you

28:50

would see it go up. It shows you how much memory is

28:52

free, how much is being

28:54

used, how much of that is being

28:56

cached, disk activity. You can see the

28:59

network traffic, the multiple, it has

29:01

four CPUs and it shows you

29:04

graphs for all four CPUs as

29:06

well as like the combined. And

29:08

I'm not gonna show the processes because they

29:10

might show command arguments that

29:12

I just don't wanna share. But it seems

29:15

like it probably somehow could be a bad idea that I'm

29:17

not aware of, but we'll learn later in a hard way.

29:20

But isn't that an amazing way to

29:22

just, this is over an SSH session.

29:24

Oh, that's pretty cool. That's amazing. Yeah,

29:27

and watch this. So if I

29:30

just hit escape, you get even,

29:32

it's like an old video game

29:34

options with mouse support and everything.

29:36

Oh, that's pretty cool. Yeah, so

29:39

another thing to sort of announce

29:41

here is there's B-PY top, which

29:43

you can pip X install, but they've

29:45

also as part of this released a

29:47

B top rewritten and I think it

29:49

must be C++. So

29:52

anyway, that's cool, right? People

29:54

can, I think that's supposed to be a little bit more

29:56

high performance, although to me they kind

29:58

of seem like the same type of thing. Anyway,

30:00

really cool if you've been using like

30:02

top or something like this, you

30:04

know, there's a really much better way and Glances

30:08

is good, but B top is the new the

30:10

new winner of my world here And

30:12

you know those sort of graphs even if you

30:14

don't need them You can have a second monitor

30:16

and have one of those running everybody in your

30:18

life I'll think you do something cooler than you

30:20

actually do. Oh, you're a hacker aren't you? That's

30:22

a terminal Yeah,

30:25

I am okay. Yeah, don't cross me cross.

30:28

All right Right,

30:31

I think that's our extras Do

30:34

it is Chris Tyler just real quick has a

30:36

recommendation Switch to bottom BTM

30:38

which is similar but written in rust

30:40

and a little more performant also cross-platform

30:43

like be I top Okay.

30:45

Well, maybe maybe that needs

30:47

to be checked out as well. Maybe my time

30:50

with B top was short I'll be over to

30:52

bottom before I know it top and bottom. That's

30:54

just terrible. Yeah, these are funny Thanks

30:57

Christopher. All right. I think I'm ready

30:59

for a joke. Yeah, I got something You know,

31:01

I've been talking about Consolidating

31:03

all these servers and running different things.

31:06

We just talked about the monitor in

31:08

your server and Soccer so

31:10

I thought it might be fun to

31:12

share this Post on info

31:14

sec exchange mastodon from Jeff Hall and

31:16

I've got this you described this for

31:18

us Brian It's just a mess of

31:20

cables coming out of with a back

31:23

of what a bunch of I don't

31:25

know Network equipment. Yeah

31:27

It's just like the world you couldn't imagine a

31:30

worse set of tangled wires and

31:32

they're dirty too, right? It's not just like They're

31:36

covered in those all these routers and

31:38

others They're white,

31:40

but they're most they're significantly brown as well.

31:42

Looks like a whole bunch of hubs hanging

31:44

in between and stuff Yeah, yeah, a lot

31:46

of these pieces are just suspended by the

31:48

wires and it just says the cloud Yeah

31:54

Yeah, very nice. I love it. Yeah,

31:56

that's very cool. So indeed funny. All

31:58

right. Well, that's it for the show, I

32:00

suppose. And we don't normally have

32:03

a final call to action, but go

32:05

check out your new PyTest thing, your

32:07

timeout, and check out some

32:10

of these other self-hosted things. Yeah, it's really

32:12

cool. A lot

32:14

of stuff people can adopt in. Yeah, well, thanks for

32:16

being here. And chat with you all later.

Rate

Join Podchaser to...

  • Rate podcasts and episodes
  • Follow podcasts and creators
  • Create podcast and episode lists
  • & much more

Episode Tags

Do you host or manage this podcast?
Claim and edit this page to your liking.
,

Unlock more with Podchaser Pro

  • Audience Insights
  • Contact Information
  • Demographics
  • Charts
  • Sponsor History
  • and More!
Pro Features