Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.
This is episode 225, recorded March, March 17th.
I'm Brian Okken.
I'm Michael Kennedy.
And I'm Sebastian Bitovsky.
Yay, we have a special guest.
Yay.
Welcome, Sebastian.
Thanks. I'm excited to be here. Huge fan of the show.
Thank you. Thanks so much.
Should we kick it off?
Yeah, yeah. I also want to say thanks to Linode for sponsoring this episode.
And Brian, I've heard of people getting like smaller computers, Raspberry Pis and things like that.
But you've got you're taking it to some crazy extreme here.
Is that what's happening?
Yeah.
What's going on here? What is this thing?
The Pico.
So actually, I saw this announcement on Twitter.
It's actually came out in January, but we haven't covered it yet.
It's kind of exciting.
The Pico is four bucks for and I know they have they have a five dollar little chip also or a little controller.
But this is really like in microcontroller land, which is it's it's really pretty cool.
It doesn't have a lot.
Like there's no Wi-Fi on it.
There's not a lot on it, but there's also not a lot on it.
So it's very low powered.
So really microcontroller size.
One of the exciting things about this is this is I think this is the first the first Raspberry Pi with a chip designed by Raspberry Pi.
So this is a custom Raspberry Pi chip.
And what do they call it?
A oh, I can't remember.
R P 2040 is the chip that goes in means anything to anybody.
But the low power thing is what I think is fascinating.
And I is because there's some there's some things that you can even you can power like LED lights and stuff with it even.
And there's there is enough power to do quite a bit with peripherals.
But you also can sense it's so low power.
This will be good for things like, you know, temperature sensors and other sensors that you leave alone someplace.
And a microcontroller that you can like leave somewhere and then come pick up later.
This is this is some that you can control with Python is something new.
And that's pretty exciting.
Yeah, that's super cool.
And apparently it's coming coming soon.
Also, is the Arduino Nano Connect, which comes with a nine axis.
I'm you and a microphone and microphone, a powerful Wi-Fi and Bluetooth module and crypto chip and stuff like that.
So that'd be kind of cool as well.
Right.
Like put this thing on Wi-Fi and whatnot.
Yeah.
And one of the other things I forgot to mention, this is this is the first Raspberry Pi product that has an ADC on it.
So with that, you can do it isn't just like you.
You can do analog input so you can, you know, more accurately hook up a temperature sensor or something.
Oh, right.
So if you're working with like this is your IoT thing and you want to just work with like plug in a voltage meter or whatever.
Right.
Yeah.
OK.
Yeah.
So that's pretty exciting.
And anything that drives people working with a combination of hardware and hardware and software together in a nice language like Python, very much appreciated.
This is an exciting part of the Python world.
I also want to mention the editor, Mew, that can be found at Code with Mew.
And I don't have this up here, but they they released they're working on the 1.1 version and the beta two is out.
And one of the things that supports is this Pika board along with some of the Lego spike products and a whole bunch of new fixes.
So, oh, wow.
Especially when we're working with microcontrollers and students.
So that's a nice thing to have.
Did you mention the price?
That is $4?
Yes.
Yeah.
That's amazing.
That is so awesome.
Right.
So, yeah, later on in the announcement, they've got like this picture of them like wrapped up like a whole reel of these.
I think they're trying to encourage people to buy like a whole bunch of them at a time.
It's like a candy wrapper, but you get a computer instead.
Yeah.
That's pretty great.
Really good.
I love it.
That's as good as our jokes.
Sebastian, what do you think of this thing?
I never actually got into Raspberry Pi and all this hardware, programming hardware.
I actually bought Raspberry Pi like years ago and it was in my drawer until one day I decided to put a pie hole on it to get rid of the ads.
And it's been working flawlessly since then.
So I have Raspberry Pi somewhere there, but I'm impressed to see how they are dropping the price.
Like $4.
It's like extremely affordable.
Yeah.
That's really, really wild.
That thing.
Pretty awesome.
Also, Brian, a comment.
Paul Sanders in the live stream says, can you use Ubuntu on Pico like a regular Raspberry Pi or is it like its own thing?
I'm pretty sure it's its own thing.
I don't think it has a full operating system on it.
Yeah.
It describes itself as a microcontroller, right?
Yeah.
So it's more like MicroPython, Adafruit, AdacircuitPython, so on.
Yeah.
It would be cool, but I don't know.
It's pretty small.
$4.
Yeah.
I think it is running MicroPython, but I'm not sure.
Yeah.
Very cool.
All right.
Well, I want to talk about something brand new for the next item here, and that is Beanie.
So I came across this yesterday, and actually, I had some other thing I was going to cover.
I'm like, no, no, no.
Beanie is cool.
I want to talk about Beanie.
Yeah.
I'm pretty excited about it because I was recently talking with a friend of mine about,
oh, what would you use with FastAPI and MongoDB?
Well, the traditional ORMs, ODMs, they don't call them ORMs in Mongo because they don't map
relations.
They map documents, so they call them ODMs, object document mappers, but same idea.
I was talking with him and saying, you know, it's like, well, what would you use with FastAPI?
Because you really want to leverage the async and await nature of the views, which is so easy
to do there and whatnot.
But I started looking, all the old standbys that I like, MongoEngine and some of the others,
the ORM, ODM side don't seem to be really supporting the async and await world.
You start looking around, well, there's Motor, which is the official async library from MongoDB,
the company, the organization, to support this.
But the way you program there is I run a query as, you know, sort of almost like SQL syntax,
and I get back a Python dictionary, which is okay, but I don't know, I don't really like that style.
Really like getting a class back, be able to do queries with the class, have the class have like
types and constraints and whatnot.
Because if you're just working with dictionaries, it's so easy to like forget to set it.
I know a field you didn't remember existed or something weird like that and get inconsistent data.
So I ran across this thing called Beanie, which is an async friendly ODM for MongoDB.
And we've talked a lot about Pydantic.
Pydantic's awesome, right?
Yeah.
So with Beanie, it basically takes and uses Pydantic models as the classes that map to the database.
And I think that's just super cool.
Yeah, very cool.
Yeah.
So let me see if I can pull up some examples here.
So the idea is that with, you know, the document databases, you can embed stuff.
So I might have one class that's containing a list of other classes I define, and that just is a record in the database.
So the way it works with Beanie is you create anything that drives from base model.
That means it's a Pydantic model with all the validation and loading and stuff that you get from that world.
And then you have a top level document that drives from this Beanie.document,
which is really just a specialization of a Pydantic model.
So everything you do with Pydantic happens here.
And then you actually just work with the motor async driver, which is the official, in quotes, way to talk to MongoDB asynchronously from Python.
And then you can create a class, embed your objects, hit save.
You can go and just go to your document, just say insert one as a class, insert many.
You can do filters.
You can do like get by ID, or you can say do a find query or something like that.
So yeah, I think it's pretty neat that it allows you to take this sort of blended.
It's like half ORM, ODM, and half sort of just working directly with the MongoDB API.
And yeah, it's pretty neat.
One of the big notable things that I feel like it's kind of missing is it doesn't support creating and managing indexes through this object model.
But I was talking to the guy who created it, Roman Wright, on GitHub.
And he's like, yeah, that's a good idea.
It's like one of the next things I'm thinking about.
So pretty cool.
If you're doing stuff with MongoDB and you're looking and you like Pydantic, here's an exciting new project that people can check out.
It even has capabilities for the aggregation model, which is like map reduce plus sort of that kind of processing, which often doesn't show up in these ODMs.
So people can check it out.
It's growing.
It was almost brand new yesterday.
Now it's up to 25 stars.
So it's not super, super popular, but it's like 25 times more popular than it was yesterday.
So that's pretty cool.
It's on a good track.
I got a question about indexes.
So if you, even if it didn't support it, could you go around and just request them anyway?
Yeah, no problem.
You could go to like motor and do it in Python.
Say create index at this, you know, like it's not create, it's ensure index, like create if does not exist index during app startup.
Or you just literally could go to the database and actually use some management tool and create the indexes there.
So it's not like you can't use indexes.
It's just like if you're defining the whole model, it would be cool if it could just happen as part of the class definition.
As many things do like SQLAlchemy does that.
Mongo Engine does that, right?
It's a pretty standard paradigm here.
So I don't know.
What do you guys think?
I kind of really like the idea of having an ODM be like this hybrid model of like it's not really taking over hiding Mongo because Mongo is actually not that hard to deal with anyway.
It's adding some of these class wrappers and giving you a lot of the power of Mongo at the same time.
Yeah, for sure.
And you can see like actually the document or the blog post that announces this rather than the GitHub repo has a few examples and they're all FastAPI.
Like you have an asynchronous API endpoint and then you await note.create, which saves it.
Or you can await like a query.
Let me see if, yeah.
Anyway, you can await queries and things like that, which is the really cool thing.
So pedantic plus async and await, pretty neat.
Yeah, that's pretty cool.
Especially the list of features that you show.
It's pretty impressive for such a new project.
Yeah, yeah.
This guy Roman apparently, he comments in here like this is something I've been using for myself for a while and it's really awesome.
So now I'm just sort of putting it out there.
Hopefully it grows from that.
So that's pretty cool.
So you work with async more than I have.
Is this something that I could, if you want like to start playing with it, would you have to jump into the async world or could you use Beanie without async stuff?
You know, I hadn't really thought about it.
Looking at it, it looks like it looks like it has to be async.
Okay.
Right.
Because the queries like the find one, create and so on, they all are awaitable.
They're all being awaited.
Okay.
And I don't see a way just quickly glancing at it to say, don't be that.
You know what I mean?
Like I don't see how it's both at the same time.
And if it is, you probably have to use it.
So I'm guessing actually you do have to use it as an async, but I don't know for sure.
I haven't tried it well enough.
It's a good question.
All right.
Well, speaking of good stuff, something I've talked about on Python, but not on Python bytes.
So Sebastian is going to tell you guys about something over there, right?
That we talked about over there.
Yeah.
So I wanted to talk about a tool that I have been using for a long time.
And I know that you, Michael, are familiar with it because you already covered.
I'm a huge fan of like code quality, refactoring, all that kind of stuff.
Like having your editor tell you like, this could be better.
Press this button to make it happen.
Yeah, exactly.
That's why I absolutely love this tool because it's like one level above of, let's say, linters.
Because when you're using PyLind or FlakeAid, you get like some warning saying like, look, this is wrong.
And then there is Sorcery that tries to kind of make your code better.
It gives you like refactoring tooltips just as you type.
So for example, if you scroll a bit down there, there is some GIF showing what it can do.
And for example, if you have like an if statement and both branches have the same statement, you will get a pop-up saying that, look, this can be moved outside.
Or for example, when you have like a for loop, you will get a recommendation saying, hey, this can be turned into a list comprehension.
So I really like it.
And it integrates, I think, with PyCharm and VS Code.
So I don't know about Veeam.
I don't think there is any support right now for stuff like that.
And it's super easy to use because you just got a pop-up and you can click, yes, I want to have this refactoring.
You actually can, yeah, you can see the diff of how it will look after the refactoring.
And yeah, it's also, it's free to use, at least in the code editor.
I think they have like, they have the pricing tab, but I think you can pay to have like analytics for your project and set it up with like continuous integration servers and stuff like that.
But for like VS Code and PyCharm, it's free to use.
Yeah.
It looks like you get a couple of extra refactorings and whole project analysis for money.
Yeah.
But like the basic refactorings that can already help you a lot.
They are there for free.
And at least for me, I just keep getting constant pop-ups saying like this code can be refactored.
So I mean, maybe I'm a terrible programmer, but sometimes I'm like tired and I don't see something.
So it's nice to just click one thing and have like three lines of code turn into one line.
So that's pretty awesome.
I don't know.
Yeah.
Brian, have you used it?
Because I know that Michael have.
I haven't used it yet, but I'm pretty excited.
It looks pretty fun.
Yeah, it looks really neat.
And like I said, I did interview the guys over there on the show about what they're doing.
And I believe that all the like one of the things that some people have worried about is these kinds of tools.
Sometimes, you know, especially the ones that try to use like AI ML to help you.
I don't think that this is one of those.
They'll end up sending your code over.
And I think this is all just local stuff, which is nice.
Yeah, I guess that's one of my questions.
I often run, you know, I often do a lot of coding on my laptop with it with no Wi-Fi connection or anything.
Can I, can I use, does this help at all?
I'm pretty sure.
I don't think it makes any, I don't think it uses the internet to do its magic.
So I think it's all just in the editor and PyCharm.
Yeah, probably.
Yeah, I'm pretty sure that's the case.
But the one thing, so I used this for a while and I liked it.
The one thing that drove me crazy and possibly it's been fixed is there's one or two recommendations.
Like a lot of the recommendations it makes are great.
But there's one or two that I really didn't like.
I think, for example, I was using a guarding clause.
So I would say, coming in method, the very first thing is like, if something's wrong, return and there's an error.
And then go do the thing I was really wanting to do.
So it's not indented.
I really like that style.
And it was suggesting that I like include, like I reverse that if so I don't have as many, as much, not cyclamatic, as many decision points.
Right?
There's not as many branches as going on there.
And that's fine.
I just don't have to accept it.
It doesn't automatically do it.
But it constantly was highlighting that with like squiggles as if something was wrong in my editor.
And other tools like PyCharm do that.
And you could just say, you know what?
For this thing, please don't tell me that this is the fix because I really want this to be here for a reason X, Y, and Z.
I couldn't find a way to do that in Sorcery.
And it was driving me crazy.
I'm like, no, this is not wrong.
Please, like, stop telling me it's wrong.
So I really hope, you know, if they're listening, maybe you could hint, hint, add like a hash ignore Sorcery line type of thing like all the other editors have.
But yeah, no, I do think it's a cool tool.
And people should check it out if it sounds interesting.
Yeah, it would be nice to have this configurable.
Stop complaining about this refactoring.
Right.
Or either I would even be happy to just say, please don't tell me about it.
Because it was like very specific, like one very small suggestion.
Like, just don't suggest that to me ever.
Like, I don't ever want that.
But everything else you do, I love you.
Thank you.
Nice.
Yeah.
John Sheehan has a comment.
Some code efficiency improvements could end up obfuscating intent.
Absolutely.
For sure.
They definitely could.
I feel like a lot of what it's suggesting actually is a clarifying change.
It's like, look, you're duplicating this code.
Or this is overly indented.
Here's how you change it.
So it's not.
So I feel like on that regard, Sorcery is really good.
Yeah.
Same.
I have the same feeling.
Like, it doesn't try to give you, like, very quirky refactorings.
It actually tries to make your code easier by, like, removing redundant lines and stuff like that.
Yeah.
Very good point.
But a tool like this that could make it more obfuscated.
Now, there's something that we find.
There's job security right there, baby.
Yeah.
Command Alt L.
Reformat for...
Reformat for Brian.
Exactly.
No one can work on this project, but so-and-so.
Quickly reformat it to viewable, work on it, and re-encode it.
Perfect.
Yeah.
That'd be cool.
Yeah.
Something else that's awesome is Linode.
Thank you, Linode.
Thank you for sponsoring the episode.
Simplify your infrastructure and cut your cloud bills in half with Linode's Linux virtual machines.
Develop, deploy, and scale your modern applications faster and easier.
Whether you're developing a personal project or managing larger workloads, you deserve simple, affordable, and accessible cloud.
Computing solutions.
As a listener of Python Bytes, you'll get a $100 free credit.
You can find all the details at pythonbytes.fm/Linode.
Linode has data centers around the world with the same simple and consistent pricing regardless of location.
That's cool.
Choose the data center nearest to your users.
You also receive 24-7, 365 human support with no tiers or handoffs regardless of your plan size.
You can choose shared or dedicated compute instances.
Or you can use your $100 credit on an S3 compatible object storage.
Manage Kubernetes and more.
If it runs on Linux, it runs on Linode.
Visit pythonbytes.fm/Linode and click on the create free account button to get started.
Absolutely.
You know what I like about Linode?
It's straightforward and simple.
I go to places like AWS.
I'm like, what is all this stuff?
And why am I so deep in the permissions of AIMs in order to send an email over here?
It's just, ah.
I just want to create a server.
Make it go.
Let's do that.
Nice.
Are we there?
We're there.
Okay.
We're onto your next item, I believe.
Wait.
Cool.
No, we're not.
I'm jumping ahead.
We're onto my next item.
So I'm going to feel back on that.
So I'm on a database kick for some reason this week.
I mean, I love databases, which is weird because when I first learned them, they seemed so challenging
and odd and I struggled with them.
But I don't know.
I just really enjoy thinking about databases because they're like the magic of your application,
right?
A really slow, clunky database will just like bring it down.
But a really nice polished one is like, how is that so fast and smooth?
Like I really like working on this site.
So one that I haven't spoken much about and honestly don't have a ton of experience with,
but I do think is an interesting consideration is another branch of the NoSQL world in graph
databases.
So instead of modeling columns, you're really modeling entities and then their relationships.
Like the relationship thing is first class thing.
You can query by relationships instead of querying by data and then like joining and so on.
So a popular one for this is Neo4j.
And there's some nice ways to talk to it from Python.
And there's this, I don't even know what to call it.
OGM, I guess is the right.
And so I said ODM for object document mapper.
So in the graph world, it's OGM for object graph map.
So there's an object graph mapper called Neo model.
And I ran across this and I'm just like, oh, this is super cool.
So the idea is that you can basically create these classes.
And if you look at how you do it, it's if you've ever used Django ORM or Mongo engine or something like that, it's literally the same thing.
So if you know, if you know Django ORM, you basically can do this, which is powerful because it gives you a whole different way to work with data and a whole different option without rethinking the world.
So I could create, say, for example, a country, which is derived from structured node.
And then just like Django, you would say code equals instead of string column, you would say string property.
And it has an index.
The index is uniqueness.
The field is required.
Boom.
That's it.
Like one line field.
And it's defined.
Then a person.
Person might have a relationship back to a country and so on.
And really, really neat the way you just sort of define this.
And then you can do interesting queries on it.
You can ask, like, give me the nodes where the person nodes where the name is Jim.
And that's pretty simple.
Or you can say, give me the nodes where the age is greater than three or whatever.
But also you can ask things like, give me the country.
All right.
So go Jim.country.
Is that connected to Germany?
Yes or no.
If it is, then Jim is from Germany.
Or you can go to Germany and say, give me all the inhabitants.
And it'll tell you all the people in there.
And you can even say things like, I would like all the people in Germany whose name is Jim.
So Germany.inhabitant.search name equals Jim.
Like an incredibly simple programming model to work with these graph databases.
So if you've got, like, really structured related data, but you want to, like, follow those relationships around, you know, maybe Postgres is not the best option for that kind of data.
And this would be a good one.
Cool, huh?
Takes a bit of a mind bending getting used to it, but pretty neat.
Yeah.
Sebastian, have you ever had to do anything with graph databases?
No, but when I was looking at your code examples, I was thinking why there is Django code.
And then you started saying, yeah, it looks similar to Django.
And I was like, okay.
Yeah, exactly.
Why is there Django code in my graph database?
But I think that's a huge benefit for the Python world, right?
Like, a lot of people know the Django ORM model, or it's also the same as Mongo Engine, which obviously is also inspired by Django's ORM.
And so a really straightforward way.
Like, I think you could get up to speed in an hour if you knew Django working with this thing.
It seems real straightforward.
So it might be kind of cool to see, like, somebody do an example where they did the, I don't know, a toy example in a graph database, a relational and a document to see what the trade-offs and benefits and things that are.
Right, we've got that, like, silly to-do app that everyone has used for JavaScript front-end frameworks to show, like, here's how you build to-do in VueJs.
Here's how you build it in React.
I think having, like, this canonical database represented, like, side by side, like, here's the Postgres version, here's the Neo4j version, all in Python.
That would be an awesome article.
Somebody had a bunch of time in Desire.
Yeah.
Yeah, pretty cool, pretty cool.
Now you can talk about your item.
I didn't mean to shoot you too far ahead there.
No, so I lost my window.
There it is.
So I've been thinking about, I don't mock much.
When I test, I try to test everything whenever I can.
But I've been learning about mocks a little bit and mocking just because in some cases you kind of want to.
So as I got into it, I didn't get very far before I realized that specking was, like, something that people found out about later but sounds sort of magical and I wanted to know more.
And so I asked the Twitterverse, whoever follows me and stuff, if specking is something that you should do always or avoid it, is there downsides?
And then one of the things that I got back was Stargirl Flowers article called my Python testing style guide, which includes this incredible section on mocking.
And her section is called a mock must always have a speck.
And it's just a really, if you've ever wondered about this, it's a really good discussion about mocking because it's not their evil and it's also not go run out and use them.
The recommendations really are use real objects for collaborators whenever possible.
But if you must mock, always use auto spec.
And so the idea around specking or not specking is if I create a mock object, it can be anything.
I can ask it for the date.
I can ask it for the temperature of my coffee.
I can ask it for anything or I can pass it anything and it'll accept it.
That's kind of what mocks do.
But if you say auto spec, you say, I want this thing to mock this other class and have auto spec be true.
It means I can't do anything to that class, that mocked class that I couldn't do to the real thing.
So all the interface is identical.
You can't do, you can't do functions that aren't there.
And that's where I thought, well, that seems like a good thing.
And apparently I, it is.
I think it's a good thing because you would like your test to at least require a thing behaves like the real thing, right?
It might not give the real data back, but you shouldn't be able to call functions that don't exist or access fields that don't exist and so on.
And more importantly, one of the things that's highlighted in this article is even if you could manually get it just right, later you might change the interface.
You might change the API call, add a function or add a parameter that's required or remove a parameter that's not needed anymore.
And your tests that use the mock that are custom built are still passing, but they shouldn't be.
And with auto spec, your test will fail at that point when the interface break happens.
Wait, you run your test more than once?
No, of course.
Obviously, this is why you, you know, one of the main values is this thing is locked down.
I want to be able to make dramatic changes to it and see that it hangs together.
And if things like rename a function has no effect on the test path thing, that that's not so good.
Yeah.
And then there's a whole bunch of other great advice that she gives around mocking talks about consider using stubs and fakes and even gives an example of what those are.
And basically, it's like writing your own little tiny thing to substitute for the real thing.
And spies, which are cool.
Spies are like a mock wrapper around a real object.
So it behaves the same as it always did.
But you can interrogate like how it was called.
That's kind of a neat thing.
And some advice that I didn't really consider before is to the code test code is way cleaner.
If you don't give the mocks special names, like a lot of people, if I wanted to mock foo, I might kind of title it mock foo.
And she says, don't do that.
Just name it foo.
Then your code looks a lot cleaner.
And I tried it out.
And it does really great.
Nice.
It does help out.
Anyway, great advice on mocking.
So if you're considering mocking, go read that.
And if you're doing unit testing and you want to not test all of your dependencies, basically, if you don't want to do integration tests, you probably should be doing something like this.
Yeah.
I mean, I hardly ever use them.
I do things like rerouting my code through like any.
I kind of designed it into my code if I have a chance.
Like, for instance, if I need to have a...
I know anything with a database.
I know I'm going to have to redirect the database during testing.
So that's just built into the design of the system to be able to reroute that somewhere.
Yeah.
Sebastian, what do you think?
Yeah, that's a bunch of good advice.
So that's a very good article.
And I kind of agree with you.
Like, I also prefer to kind of like mock a specific method of a real object, not to create a mock and then add stuff around.
Although I think it's a different word for mocking a method.
It's a stub or one of those words.
I could never remember which one is which.
Yeah, yeah, for sure.
And then Robert Robertson is getting philosophical here.
It says, a mock must always have a spec.
Will they add that to the Xenopython?
I don't know.
In Python 4.0.
Yeah, exactly.
These are two things that are very unlikely.
Xenopython is not extensible.
Yeah, possibly.
Oh, also, Dean was asking if the episode started, the live stream started early today.
Hey, Dean.
Daylight savings mismatched by a few weeks with the rest of the world, at least with Europe.
Yeah, exactly.
That's the story.
All right.
Speaking of time zones and stuff that's challenging, you know, speaking at conferences can be tricky because it's virtual.
You're not actually there.
So when does it really start?
Well, maybe at least we can know which ones are out there and when the call for proposals are done.
Sebastian.
Yeah.
So, yeah, as you said, since the Python call for proposal acceptance emails will be sent this week, I was thinking about conferences.
And since it's 2021, most conferences are moving online, which is really cool because, well, they are cheaper.
Well, first of all, tickets are cheaper.
A lot of them are free.
Then you don't have to pay for the accommodation.
You don't have to pay for the ticket.
You don't have to fly.
So you don't have to take holidays.
So a lot of benefits.
And I was wondering, like, how do you find conferences to attend?
Like there is this list at python.org that lists some conferences, but it doesn't have the smaller local events.
And you also don't have dates.
So you only have links to all the global, well, countrywide conferences, but you don't know when they are starting.
So I found this tool called Conference Radar.
And it's a PyPI package that you can install.
And then you get a command line tool that you can run to get a list of upcoming conferences, which is pretty cool.
Especially that you can have some parameters.
Like you can get a list of conferences that have opened the call for proposals.
So if you want to submit a talk, you can see which conferences are accepting those.
And I really like it that you get this nice ASCII table in the terminal.
Since I love CLI tools, this is really cool for me to use.
Yeah.
I think it needs to integrate some rich, even like fancier tables.
But yeah, it's really nice.
Yeah.
But the downside is that they don't have that many conferences because it's using only a few data sources.
So when I was running it today, I couldn't find that many conferences.
And actually, there was no call for proposal open.
Like no date was there.
So I hope it will improve.
But so far, this is my best tool to like find upcoming conferences.
Yeah.
And if people are out there listening, they have a conference, they want to get the word out about it.
You know, might as well go add it to the data source that these things are using.
Yeah.
Yeah, that would be awesome.
Yeah.
This thing's cool.
I checked it out.
One bit of confusion for me is if you look at the description, it says installation, you can simply use pip to install Conrad for conference radar.
So you can use pip to install Conrad, but you cannot pip install Conrad.
That will not work.
It may work.
If it does, you should maybe be concerned because someone heard the show and put something in.
You have to pip installed conference dash radar.
So I don't know.
Maybe just a little clarification for people who wanted to check this out.
But the command, the CLI is Conrad show, Conrad refresh, Conrad call for proposals, things like that.
You can even set reminders, right?
It'll like remind you when the call for proposal is closing.
Oh, cool.
I didn't see that.
That's nice.
I think there's a remind feature in here.
I can't remember exactly how it works.
But yeah, yeah, pretty cool.
I'm glad that you mentioned that because I just tried to pip install Conrad and I'm like, it didn't work, man.
It's broken.
What is this thing?
Yeah, I just think the documentation is like a little unclear because the CLI and the package name are not the same.
At least you didn't get some malicious package.
Exactly.
Mining bitcoins right now.
Exactly.
Why is my computer hot?
That's weird.
Oh, well.
Suddenly my camera turned on.
Oh, no, we're doing a live stream.
That's why.
Yep.
Oh, and also Dean has a quick comment for you there, Sebastian.
Oh, this is perfect.
And I think I maintain a Google calendar for conferences.
Oh, cool.
Yeah.
That's a good idea.
Yeah.
I was looking for different sources where to get the conference information.
And so far, the most reliable one is my friend Miro on Twitter, who is submitting and speaking at a lot of conferences.
So I'm just following him and he's always speaking.
He's always tweeting.
So that's my best bet so far.
I met him at PyCon Slovakia.
So, yeah, I know he's at conferences often.
Yeah.
Awesome.
Brian, is that it?
That's it for me.
Do you have anything you want to share?
Oh, yeah.
I almost have an extra, extra, extra, extra here all about it section to share, but not quite.
So I'll keep it a little bit quick here, but I'll go through some things.
First of all, quick announcement.
Sebastian and I have been working for, as he hinted at, I don't know if this was on the recording or before we started,
but for like six months on a project called Modern Python Projects,
which is a follow-on sort of course version of the Modern Python Developers Toolkit thing we did over at Talk Python, episode 279, I think.
So we've got this awesome course out at talkpython.fm/modern-python-projects, or just click the link in the show notes and you can check it out.
That's been out for an hour and 10 minutes.
So not very long.
This looks really cool.
I am excited about this.
Yeah, a lot of neat stuff that Sebastian, this is all Sebastian's work that he put into it here.
So it's really cool.
Oh, you help a lot as well.
Thanks.
What would you like to, maybe, what do you think, quick thing to share, tell people about this course that you built?
Yeah, so basically my idea was to give you an overview of everything you need to know,
even if you don't have Python installed on your computer,
all the way up to actually building and publishing your project.
So basically we start by installing Python.
I show you how to manage dependencies.
I also show you how to set up VS Code for programming with Python.
Then we add tests, then we add tools like linters, formatters, some static code analysis.
Then we add the test documentation, obviously.
We talk about continuous integration.
There are like three sections where we build different projects,
and actually each of them is done in a different manner.
So for one, I use Poetry.
For the other one, I don't use Poetry.
So we have a comparison.
And all the way up to deploying, where I show you how to deploy, for example, to Heroku,
and how to create a Docker image.
And yeah, all Spectrum.
Yeah, that's cool.
I definitely like it.
So people can check that out.
That's a quick item there, just that we launched that recently.
And also, Brian, our pythonbytes.fm looks very bright right now.
What do you think?
Yeah, neat.
So one thing I wanted to do, you know, people have been contacting us and saying,
hey, I heard you mentioned like, oh, we just mentioned Dean's name on the live stream.
What is this live stream?
When is it?
How do I find it?
So what I've done is I've updated the Python Bytes website and Talk Python for its live stream.
But for Python Bytes, if you go to pythonbytes.fm, if we're live streaming at that very moment,
there's like a big red banner across the top.
Like we're live streaming right now.
Come be part of the show.
And then there's also a live stream menu item that'll take you over and show you like the
live stuff that's happening.
And it'll basically show you the live playing stream.
But you can open that up on YouTube to be part of the live chat and so on.
So live stream now on the podcast page.
If it's a podcast site, if you visit it and it's all bright, you know, and you got a moment,
go check out the live stream.
Yeah.
And then also, if Michael's up to date on it, which he does all the work on this, I appreciate
that.
We announced when the next one's going to be.
So if you're not sure, you can just check it out anyway.
And there should be a link there to say when.
Yeah, that's right.
So normally what I try to do is schedule the next one when we're done with this one.
So if people go there, they'll see the like, here's the next live streaming and YouTube as
a button to say, set a reminder.
Tell me what's happening.
Yeah.
Last time, I think I said, is Python on Mars?
Question mark.
Because that F plane, F that that flight overview system, it was using Python to train the models,
but I think it's using C++ to fly the little helicopter thing.
And I just mentioned, if anybody knows Python's on Mars, that would be awesome because this
this is really cool and related, but it's not the same as Python on Mars.
So Bojack Norseman sent a tweet over and said, hey, Python Bytes, you guys asked for a confirmation.
Linux Unplugged, the Linux podcast, has an interview with Tim Canham at JPL, where he
talks about running various machines and mentions Python.
So the thing that he talks about is, remember when the thing was landing and there was the
sky crane that like lowered Perseverance and there were all these different camera views.
You could see the bottom flying away.
You could see it like shooting off dust and coming down.
There's all these views like these onboard cameras.
Apparently all those were controlled and collected and like processed with Python on Mars.
So yes, Python is on Mars.
That's sweet.
Nice.
Following up on your item, Sebastian Gita Van Rossum has sent out, it said that signups
for the Python Language Summit at PyCon online only are now open.
If you represent a third party package and want to have a say in Python's future, please sign
up.
So if you have a third party package and you want to be part of this, please sign up.
I'll put the link in the show notes.
Oh, wait.
Does a single developer package qualify as a third party package?
Do you want to have a say in Python's future?
They might not listen to you.
They're like, well, I'm going to talk to the guys that do Flask and Django.
You can go get a seat in the corner.
I don't think people should listen to me.
Robert Robertson has a very nice meme.
The snake has landed.
Instead of the eagle.
Right.
The snake has landed.
Beautiful.
For the Python thing.
All right.
Sebastian, anything else you want to throw out there real quick?
Yeah.
I have a kind of a curiosity because I started using VS Code in a browser recently.
I started a new project and everyone on the team is using VS Code in the browser.
And it's working surprisingly well.
I would never try to use a code editor in a browser.
Like, out of myself, never.
Because I need to have everything installed locally.
But now that I have to use it, I'm like super impressed.
Everything works smoothly.
And my experience is amazing.
So it made me think, like, well, is this the future of programming?
It's definitely nice to have everything on the same page because it's, like, super easy to set up the same plugins, the same configuration for the whole team.
People don't have to install anything.
So, yeah, I'm wondering to see in which direction it will go.
Yeah, it's super interesting.
You know, I haven't done a lot of it, but it's probably using that thing where they said, well, this is an Electron app.
Let's take the UI bit and just move the backend farther away and put that in a Docker container or something.
I'm guessing that's how it ran, right?
It wasn't pure all JavaScript.
Yeah, I think so.
But I was expecting some latency and nothing like that.
I mean, my only concern is that the browser is interrupting some keyboard shortcuts.
So whenever I want to close a tab in the VS Code, I'm closing the browser window because that's the same combination.
That drives me crazy about the browser editors.
It's like, I'm editing, I'm editing.
I want to make this tab go away.
Why is the whole thing gone again?
Yeah.
Yeah, I didn't know what to do about that.
Yeah, I know that's really cool.
And, you know, it's really applicable for, like, if you've got a class full of students and they have Chromebooks,
they can't install Python and VS Code on their Chromebook, but they have Chrome.
They're good.
They're good to go, right?
Or things like that.
Or an iPad that doesn't allow it.
So you really need possibilities there.
Exactly.
We have some custom libraries and they are already available on those virtual machines with VS Code.
So that's super easy to use.
Yeah, absolutely.
So, Brian, I put together a joke for us, but we'll have to clean it up just a little bit for the air.
Okay.
I'm not reading it.
I'll read it.
So I'll put it up here.
So it's a picture of some birds on a power line, right?
And, you know, they sort of often sit together in little groups.
Like, I don't know why.
They're hanging out on the power line.
They've got, like, incredible balance.
And they're all just sitting there.
And there's one bird that's, like, outside of the power line.
It's like where the power line stops and goes down.
The bird's just sitting there floating in midair.
And the other birds are looking at each other like, how is he just, his wings aren't flapping.
How is he just sitting there in midair?
And they go, oh, he has Wi-Fi.
But then the bird comes crashing down.
And he goes, the falling bird screams, oh, darn router.
I love it.
I thought it was good.
It might not be totally safe at work, but it's good.
Yeah, there's a lot of routers that aren't properly tested with Rurion Schwartz equipment.
Yeah.
I mean, if you were floating suspended in midair by your Wi-Fi, then it stops.
That's a little risky.
That's good.
Well, thanks, Sebastian, for stopping by and doing the show with us.
Thank you for having me.
Quite a lot of fun.
Yeah.
It was fun.
Thanks for coming.
Thanks, Brian.
Thanks for being here.
Thank you.
Bye, everyone.