The Nobel Prize in Economics recently went to Paul Romer, a convert from proprietary software
like MATLAB, over to Python and the SciPy stack. Paul said, the more I learn about proprietary
software, the more I worry that objective truth might perish from the earth. That's quite a
statement, but what if your organization is deeply committed to proprietary software such as MATLAB?
Well, don't despair, because Peter Karzarnoff, a professor at Portland Community College,
is here to share his experience converting his courses over to Python and JupyterHub.
This is Talk Python to Me, episode 201, recorded January 23rd, 2019.
Welcome to Talk Python to Me, a weekly podcast on Python, the language, the libraries, the
ecosystem, and the personalities. This is your host, Michael Kennedy. Follow me on Twitter,
where I'm @mkennedy. Keep up with the show and listen to past episodes at talkpython.fm,
and follow the show on Twitter via at Talk Python. This episode is brought to you by Linode and
Stellar S. Please check out what they're offering during their segments. It really helps support the
show. Peter, welcome to Talk Python.
Thanks, Michael. I'm so excited to be here.
Yeah, it's really excellent to have you on the show. You and I have spoken throughout the years
over Twitter and other mediums, and it's great to finally get to talk to you in more depth.
Yeah, it's great to connect. I can't wait to tell my story about choosing Python over MATLAB
and using JupyterHub in my classroom.
Yeah, absolutely. I think that is such a good choice, and it's happening more and more. There's
some really interesting quotes from the guy who won the Nobel Prize in economics.
I think that was Mathematica, Python over Mathematica. But basically, the knowledge of the free world was
in danger because of these proprietary systems, and Python and open source was the thing that would
keep it free and keep sharing the knowledge, which is pretty interesting. So definitely a trend you're
seeing around a lot of data science teams I worked with and stuff as well. All right, so we'll get to
that, and we'll dig into that, and it'll be fun. But let's start with your story. How did you get into
programming in Python?
I got involved in programming kind of late. I'm an adult, and I didn't get started until about three
years ago. Growing up, I wasn't a gamer, and at age eight, I wasn't like pounding away at like a
Commodore 64 in order to like write new programs. My dad, he was a biochemist. He wasn't a programmer,
and my mom, she did art stuff for the school district, and she wasn't a programmer either.
And like there were some kids in high school who like programmed their calculators to play games,
but I wasn't that kid. I played soccer, and I went camping and stuff like that.
That's cool. You know, that's probably a good way to grow up, honestly.
Yeah.
I was always kind of blown away with those people that would program like their HP calculators and
stuff because they didn't have a proper keyboard. It was like texting. Like remember when you'd have to
hit like one or two, maybe it was two, three times to get a C to come out. Like who could program that
way? But they did, right?
Yeah, but they like did it. But that wasn't me. So I did my graduate work at UW, and I worked on making
plastic transistors and plastic solar cells. It was really cool research, and that was kind of the
first time that I did some programming, and I used LabVIEW. Have you heard of LabVIEW before?
I've heard of LabVIEW. It's like this graphical programming interface, but it's...
Yeah.
Is it hardware focused?
Yeah, it's really just focused on hardware, and you kind of drag these wires like around the screen
in order to connect components. So I was just using that to interface with hardware and like measure
devices and collect data and stuff.
Cool. Tell me about this plastic hardware stuff that you were doing. Like,
did you find a way to make plastic that was conductive, or was it like wrapping chips, or what
was it?
We were in graduate school making N-type semiconductor plastic. So regular chips that are in your computer
or your phone, they have both P-type and N-type silicon in there, and that's what helps the
transistors shuttle electrons across. And we were making these specialty plastics that would shuttle
electrons when you applied what was called a gate voltage. So we were basically making like
these little transistors just out of plastic. It was really, really neat.
Wow, that's crazy. Could you 3D print those these days?
Probably. And we were thinking about maybe you could roll-to-roll print them, like you print a
newspaper. Maybe you could inkjet print them, like you're printing out a regular piece of paper.
But the research was just very fundamental, like trying to measure core electrical properties of
these plastics.
That's pretty excellent.
Yeah.
Okay, cool. So you had to learn this LabVIEW draggy-droppy programming language so that you could work on this
hardware, right? And I find a lot of people actually get into programming along these lines. They're like,
well, I didn't really think I'd be a programmer, but this thing I thought was really cool required this
step to like basically make it go. And maybe it's pretty small, but you know, there it was, right?
Right. Then I started working at Portland Community College, where I work now.
And I was digging through these things. They're called course content outline guides. They're kind
of like course descriptions that are up on the web. And I noticed that this course content outline guide,
this course description had the word his in it. And the phrase was, the student may work at his desk.
And I was like, this is not good. Like I've got two daughters. Like I want them to go into engineering.
I really like it. We shouldn't have like his in this description. So I started looking through all of the
other course pages that were up. And I quickly realized that there are way, way too many to do
by hand, right? Like we have over 1300 classes and I can't click on every single one and read through
every single one. So I was telling one of my colleagues about this and he was like, oh, you should,
you know, learn Python, like try this Python thing. And you could like write a little program that could
do it. And I was like, okay, I'll give it a try.
It sounds really hard, but okay.
It sounds hard, but I'll try. And so like, I found this package, beautiful soup. And like, I wrote this
little script and, it was probably about a week. And I got this thing where I scraped every single
one of these content guides, about 1300 classes and found like any time that there was a his,
he, or like him in them. And it was just like amazing that this thing that I was clicking through
individual links and like reading all the texts. Like I could just like type Python and then my
script.py. And then like, it all just came out into one CSV. It was like amazing.
Wow. That's pretty interesting. A couple of thoughts. One, I think that's definitely a noble effort
because we already have enough barriers to folks who are underrepresented getting to,
into STEM fields, into programming and stuff. Like we don't need to, to make it less comfortable.
Right. Right. So I think that's good. Is this thing open source? Like if somebody worked at
Johnson County community college or whatever, right? Like, like, could they borrow your thing
and turn it loose on theirs? Yeah. I mean, the code is up on GitHub. If somebody wants to try,
like this is my first Python project. So I hard coded in a lot of the URLs and stuff like that.
So it's not totally transferable right now, but all of those like gooey kicks that the Python
ecosystem has been talking about. Maybe I could turn it into one of those gooeyes and somebody
in another community college could just like click it and make it work for them. That would be pretty
cool. Yeah. That'd be totally cool. Like you put some gooey on a little CLI on it or like if somebody
wants, they could create a web app and then you just give it like the base URL of your college and
it'll go through and it'll do it. Right. Right. Give it, give it a little CSV download. That'd be sweet.
So my other non-technical question here though, it's like, I definitely agree that this is a good
thing to be aware of and to try to eliminate, but how do you eliminate it? I mean, like replacing every
him with a her seems like a step that is in like, it's the idea of it is, is right, but it also doesn't
seem right. Like, so to me, I don't know, this is an English question. Like this just bothers me in
English. There's not a way to speak about a person in a non-gendered way really. So I don't know. I
try to use they, them, their, but like obviously they're singular, but you know, like what would
you propose here? Like as part of this? For those, you could say at the student's desk or at their desk
or at a person's desk. You don't at all need to use any of those like gendered pronouns. Right. As long
as there's more than one student and there always will be, it'll be fine. Right. It's just like,
it's when it's singular. I'm like, man, I'm going to say they, and I know it's singular and
it's probably wrong, but to me it feels better than he, when it's a her or her, when it's a he.
And you know, it's just like, I don't know. It's just weird. We need a better bit of English here.
All right. So great. So that's how you got into programming. As you saw in the Python is how you
saw this problem. You're like, your friends, like, you know what? Like a little bit of requests,
a few foreign loops and some beautiful soup. And you got this problem solved. Actually,
you said you teach at Portland Community College here in lovely Portland, Oregon.
What do you do day to day? Like what kind of classes do you teach? Things like that.
I teach engineering at Portland Community College and we're a community college. So we teach the
first two years of a four-year engineering program. And we also teach two years of a two-year degree
in engineering. So some of the students go on to jobs and some of the students go on to four-year
universities. So I teach some of the intro classes. We call that ENGR 101. And I also teach the engineering
programming class. And then in the second year for engineering students, I teach some of the mechanical
classes like material science, manufacturing, and machine design.
Cool. Those sound interesting. First of all, maybe we should just define what a community college
is for folks who are not in the United States. I feel like this is kind of a U.S. type of thing.
Like in the U.S. we have four-year colleges and we have super expensive four-year colleges.
And then we have high school. And high school is especially bad in the U.S. in terms of preparing
people for a job. Like in Europe, I feel like maybe what they learn is not necessarily better. But
in the end, they either have a vocational track that they can sort of follow on, especially in Germany,
or like they go a little bit farther in high school so that they actually have a little more skills
when they come out. So in the U.S., like having a high school degree almost is like not having a
degree at all, right? So maybe just talk about that so people who are not familiar with this idea know
what it is. Yeah. So in the U.S., after high school, you could go to a regular four-year school,
you know, like the University of Michigan or Stanford or something. But they're also these community
colleges. And they're usually two-year programs. And they kind of have two separate aims.
So one of them is as a vocational school. So you could go after high school and we have,
say, an automotive department. You learn how to be an auto mechanic. Or we have a welding program.
You learn how to be a welder. Or we have like a pre-nursing program. So you learn how to be a
medical assistant. And then the other function that the community college is served here in the U.S.
is to prepare students and get them doing their first two years of college. And then they'll finish
their third and fourth year of college at a regular school. So it's both that kind of vocational school
as well as kind of like the first two years of what you consider regular college.
Yeah. Okay. Great. And it's also typically much, much cheaper than a four-year school.
Even a state four-year school. But like especially the other ones. So folks who go here,
maybe they're not academically ready for a four-year school. Maybe they're not entirely sure that that's
for them. So they're going to take a less intensive route to like find their way. The reason I'm bringing
this up is it's sort of relevant to the conversation later around like expensive proprietor software and
so on. Yeah. Yeah, exactly. So at PCC right now, I think our credit costs $111 a credit. So that's
kind of $1,500 a quarter or so. And if you look at private four-year colleges, you know,
they're at least $45,000 for a year now. So community colleges are much, much cheaper.
It's like a 30X difference or something. Yeah. Yeah. Yeah. Yeah. Just for people listening,
I actually went to a community college for my first couple of years out of high school and just thought
it was a fabulous experience. It went out to do well in other colleges afterwards. Right. So it's
definitely a nice place to be. I think it's got the right sort of low-key start. And the other thing,
I guess, that's interesting to me is that you're teaching engineering courses. When I knew about
community college, it was like you could take calculus and differential equations and chemistry
and physics, but there was not like a full-on engineer that was like to prepare you for other
engineering courses. These directly transfer to Portland State or to Oregon State. Some of the students
go to the University of Washington. So you take engineering classes, but our students also take
things like calculus and chemistry and physics and those courses too. Sure. Sounds fun. Kind of makes
me wish I was back in college, sort of. I love it. Like this is honestly like my dream job. Every day I
walk in, I'm like, oh, I love this place. I love this place. How cool. All right. So let's talk about
the computing software that you have for your class. So you're teaching these engineering and
engineering programming classes and programming labs and stuff. So traditionally, this is the realm of
things like MATLAB and Mathematica, which are super expensive things. They only exist on the computer labs
at the school because like no student is going to go, yeah, 1500 bucks for like a license. That seems like
a good idea. Oh, and then you've got to buy all the other add-ons, right? Like, yeah, it's really
the use of these tools while they're pretty good at solving engineering problems really means
like you're, you're sort of stuck there, right? Yeah. Yeah. So our college has taught MATLAB in this
programming course for about four years and it would cost students either $50 or $100 for the license.
And then it also costs the college. It's like an academic license or something they can get.
Yeah. Yeah. They get a student license and it says, I think, EDU, like at your command prompt in MATLAB,
just to let you know that you're still a student. And, another problem with that is after two years,
your license would expire and some students stay a little bit longer than two years. And so
they'd come to me before they go to four year and they're like, ah, Peter, like I got to reinstall
this new license. Can you get me another license to MATLAB? And it just felt like, like we were
choosing certain students to succeed because there's not MATLAB installed in the multicultural center or
MATLAB installed in the veterans resource center. Like it's just installed in these two computer labs and
then our engineering lab. And for $50, like that might not seem like a big deal if you're a big
programmer and you've got, you know, this big job at Google or Facebook, but for some community college
students where food security is an issue, $50, that can be a really, really big deal.
That can definitely be a big deal. I remember the shock of just the price of books.
Oh yeah.
Yeah. And the, and, and books in the course were over a hundred dollars. The book was awesome. It was
really, really good, but it was super expensive. And then after the course, what are you going to do
with that textbook again?
Try to sell it. You just try to sell it.
Right.
It's the whole college books thing, but I'm just blown away how expensive those are. Right. But that's one possible path. The other path is maybe something that's really good at computation. That's kind of like MATLAB.
Right.
That's free and more accessible, right?
Right. That's free, more accessible. So that's why we started investigating Python because we were like, okay, we can do these arrays in MATLAB, but Python has NumPy. We can do numerical computing.
Or okay, MATLAB, we can build these plots in MATLAB, but Python, we have matplotlib. Or in MATLAB, there's this serial module where you can talk to hardware. Oh, well, in Python, we've got PySerial.
Exactly.
So I sort of started investigating like each time I was doing something in MATLAB, like, can I do this in Python? And the answer was always yes. And sometimes, especially when we were doing like HTTP requests or like trying to get data from like a web
API for like tie data or something you're going to plot, it is just so much easier in Python to do that than it was in MATLAB. Like it just felt like we were having to do these backflips whenever we were trying to like read anything that was external to like the MATLAB sort of ecosystem. And so we decided to make the jump to teach Python in the course instead of teaching MATLAB.
That's really cool. Now, all those reasons make tons of sense to me. But I can just see, you know, the 59 year old, almost retired engineering professor going, you know, MATLAB's worked pretty well. And I've got six years left, and I'm not a programmer.
Right.
As a department, we're not doing this. How did that go?
There's still like some open disagreement, I'd say about it. And there's some are some benefits to MATLAB, like the installation story is really clear. And there's only one IDE, like you use MATLAB, and that's it. And there's only one way to write the code, run the code, which is use MATLAB. Like those are good arguments. But I don't know, community colleges are about like innovation.
And doing quick iteration on courses, like we can change the way that we teach courses so much faster than four year universities can. So I just felt like it was an opportunity for the community college to like, lead in this area instead of just follow what other courses were doing. And now maybe down the line, when the students go in, they'll be like, yeah, we can do all of this in Python. Like, can I do my third year, like numerical methods class in Python? Like, maybe it'll bleed over the other way.
Yeah, I bet that it will actually, I bet that you'll have these experiences where people learn Python here. And then they're like, you really want me to use that other thing? Like, I know, we could do it so much better with x, y, and z package, right? Like, right, it's probably gonna, you know, plant some interesting seeds. But there's some other things to consider, I guess, like, what were some of the things you did to decide on Python?
I mean, obviously, you're personally a fan of Python, you know, is pretty well, but there's some other academic examples, right?
I wanted to make sure that it would not only be useful for students, but that like real engineers use Python. So like the Large Hadron Collider, like they use Python, or like the Allen Brain Science Institute, they use Python, or Instagram, or YouTube, Facebook, like they use Python. So like real engineers are using Python.
And I actually just went and toured a company last week, that makes pacemakers here in Portland. And that company uses Python, too.
Oh, how interesting.
There are real engineers out there using Python, like every day. So I think it is quite applicable. Plus, not every single engineer is going to end up and every student student in engineering doesn't always end up being an engineer, you know, they might be a teacher, they might end up working in a medical office, I don't know. And having a general purpose language like Python, is a lot more useful than having, you know, MATLAB, like if you work in a medical office, what are you going to do with that? I don't know.
Exactly. I do think it's interesting to consider like what you do outside of this discipline. If you have the skills to write something in Python, that in and of itself is a very marketable thing. You know what I mean? Like if you're like, man, I can crush it in LabVIEW. People are like, great, you know, Excel, right? Like, it's not going to really translate, right? Unless you're working in hardware or something like that, right? Like if it's, if you want to move out, I think it's really, really interesting.
This portion of Talk Python to me is brought to you by Linode. Are you looking for hosting that's fast, simple, and incredibly affordable? Well, look past that bookstore and check out Linode at talkpython.fm/Linode. That's L-I-N-O-D-E. Plans start at just $5 a month for a dedicated server with a gig of RAM.
They have 10 data centers across the globe. So no matter where you are or where your users are, there's a data center for you. Whether you want to run a Python web app, host a private Git server, or just a file server, you'll get native SSDs on all the machines, a newly upgraded 200 gigabit network, 24-7 friendly support, even on holidays, and a seven-day money-back guarantee.
Need a little help with your infrastructure? They even offer professional services to help you with architecture, migrations, and more. Do you want a dedicated server for free for the next four months? Just visit talkpython.fm/Linode.
Yeah, and of course, Paul Romer and his collaborator won the Nobel Prize in economics using Jupyter notebooks and stuff, which is pretty trick. So that's awesome. And then also, this is partly why I opened the conversation this way. It's like, when you think of how much that costs, right? Maybe it doesn't cost an insane amount of money to run MATLAB.
But when you look at trying to keep tuition as low as possible to make community colleges for the community, right? Things like that. So the price of not paying for MATLAB, it can't hurt, right?
Yeah, and it can't hurt the colleges' bottom line either. They've got to pay for MATLAB. And then also then the textbooks for MATLAB, those are closed source too. So if you can move to Python, an open source free language, you can move to an open education resources textbook, like a free textbook. And then the college doesn't have to pay for the MATLAB license.
Like we calculated, that's about $30,000 in one year of savings just by moving to Python if we do that in the first year course and then this engineering programming course. So it's like little bits, but like those little bits really do add up.
They do. That's cool. I mean, maybe you could almost offer like another course that pay an instructor to offer a course that otherwise wouldn't be available rather than sending that over to MATLAB, right?
Right. Or how many students could you give scholarships for that at a community college? That's a lot of students, right?
That'd be actually excellent. Yeah, that's great. Maybe talk about some of the road bumps. Like what were some of the challenges?
There were a lot of road bumps. So initially installation, that was a big road bump because we work at a big institution. So Portland Community College is actually the biggest college in Oregon. There are around 70,000 students, depending on how you count.
So that's bigger than the U of O, University of Oregon, bigger than Oregon State. And so doing things like changing infrastructure, that's something that happens fairly slowly.
And we wanted to make sure that we had Python installed when the quarter starts so that the students could use it. So that was one of the big roadblocks.
Yeah, yeah, that's a huge challenge.
When you're talking about those instructors, like you've been doing it for so many years and they only have a little bit to retire, like that is a huge barrier.
Like telling the administration or like the IT people, you need to install this piece of software on every computer on campus.
Like that can be a real non-starter at some places.
Yeah, I can imagine.
What kind of hardware and OSs do you use? Is it mostly Windows? Do you have like Mac machines? What do you got?
We got all Windows machines and...
Windows 10?
Yeah, Windows 10 at the college. And the student machines, students, I've like done surveys and students overwhelmingly use Windows. There might be one student that uses a Mac or there might be zero students who use a Mac.
How interesting.
In the class, yeah.
I mean, you look at the price of a Mac versus like a decent Windows laptop, though. It's like three to four times the price, right? So it makes sense.
Right. And also some students use either Chromebooks because they're even cheaper or they use tablets. And so the installation story of Python on a Chromebook or Python on a tablet, that's not great right now either.
Hey, I saw the Apple ad. It told me my iPad can replace my computer. I got this keyboard. Let's go. It's like, oh, you're an engineering student. What are you thinking, man?
Right, right, right. I'll probably write a little blog post about it. I got Python going like on my Chromebook, but it's not super easy.
And if you're like a student starting out learning programming, that's not going to be something that you can do.
No, that's definitely a challenge. Yeah.
Yeah. And then like the other challenge just was textbook. So in the course with MATLAB, we had a textbook from a regular big textbook manufacturer and it had end of review problems, you know, and it had example questions and stuff like that.
Everything an instructor would want in a textbook.
And there are awesome, like great Python books out there, but very few of them have homework questions at the end.
That was like something big that we were missing.
And also we wanted to make sure that if we were moving to this free programming language, that the textbook would also be free, that we wouldn't like offset the cost of the software by like having a $300 book.
Yeah. Now Wiley's rich instead of MATLAB, whatever.
Right, right. Exactly.
I would say like installation and then figuring out like textbook and then course content.
Those were kind of like the big roadblocks to adopting Python here at the community college.
That makes a lot of sense.
So we're going to talk about JupyterHub, which is a solution that you settled on.
But just a few other things that come to mind as I think about this is there's coder.com, which is Visual Studio Code plus Docker container in your browser.
So that would work on like a tablet or a Chromebook.
There's Python Anywhere, which is pretty awesome.
So there are a few solutions, right?
But they're either brand new and didn't exist a year or two ago when you were doing this, or they're maybe not quite as comprehensive.
Like I don't know if Python Anywhere does any like data science-y stuff.
That's easy for you.
I just have no awareness of that.
So maybe let's talk about JupyterHub before we move off the student story.
I want to ask one more question, right?
So this is, I guess, programming for engineering, but it sounds like a lot of them have to take this course.
I suspect there's a little bit more of a challenge to write Python and run Python than there is to write MATLAB.
I'm not 100% sure.
I've done enough MATLAB that I felt like you could just start typing in like the library.
There's no import this or important things that you had to use.
It's a little more formal to do Python.
So how is that received by the students?
We're like, yes, we get to learn a real programming language.
Or was it like, oh, are you kidding me?
Now this is even harder.
I guess I'd say it was the wealth of options was maybe the difficult thing for students.
Because like you were saying, you could run Python on Python Anywhere.
There's also Replit.
There's also Python Tutor.
There's also like Google Colab.
Like there are all these different ways.
And one thing that intro students I think crave is just like, tell me how to do it.
Like you pick the tool, just tell me how to do it.
And so what we decided on was to use JupyterHub in my class.
And so that sort of settled that.
You don't have to like install Python.
And you don't have to like go to any of these other sites and use their interface.
Like we're just going to be using JupyterHub.
That's what we decided on.
Okay.
Yeah, that makes a lot of sense.
It's basically Jupyter Notebooks hosted.
It's a server for hosting Jupyter Notebooks on a central server.
So did you get like a super nice Linux machine?
Lots of cores so they can go do math on it?
Well, sort of.
Did it actually not need it?
Actually, my laptop is plugged in here.
Right, right.
So let's like back up just a little bit.
So to make sure that everybody knows what a Jupyter Notebook is.
So Jupyter Notebook is a way to write and run Python code.
And it also contains things that are called markdown cells.
So you can also write text in them.
So they're this great way for writing, running Python code, and then explaining what the code does,
which is super useful when you're teaching an engineering class to have both of those things available.
Explain what the code does and then write the code.
And these Jupyter Notebooks, they just run in web browsers.
So I was thinking when we were doing the course, like, well, if it can just run in a web browser,
then maybe a student can like just open up a web browser and run it.
Like they won't need to install Python in their computer.
And so I was like Googling around and I found like Jupyter Hub.
Like it exists.
Like Project Jupyter created this.
And I was like, awesome.
This is exactly what I want.
Yeah, that's cool.
That's great.
So I installed it on a virtual machine on DigitalOcean.
And what I found was the very first quarter that I did this, it was in a hybrid class.
And that means some of the class is in person, some of the class is online.
And when they did the computing labs that were online, the students would log in at different times.
Not everybody tries to log in at exactly the same time.
When it's just totally online.
And just a real small virtual machine, like a $10 a month virtual machine worked just fine for that.
And the first day that we went into the class that was all in person and everybody tried to log in at exactly the same time,
that kind of crawled the server like a little bit and it took a little while.
So sort of what I'm realizing now is I either have to like up the size of the server that I've got or the JupyterHub documentation talks about using Kubernetes and deploying Docker containers instead of running it all on one individual server.
But totally thanks to Talk Python.
Like I used one of the credits from DigitalOcean.
That's how I ran that first course.
Wow, that's awesome.
Yeah, how cool.
So I was actually able to like get a bigger server than the one that I currently have now because of that credit.
Yeah, you know, it's just amazing what you can do with computational resources and virtual machines these days.
When I was in, when I was getting my math degree at four-year college, the last year we got this computing, like shared computing server.
It was like a used computer they had bought secondhand from some other place, right?
It was a Silicon Graphics, big mainframe type of thing.
And they paid a quarter million dollars for this used computer.
And, you know, like seven or eight people could log into it and do stuff.
And it was kind of okay.
And then here you are running like all that on, you know, 10 bucks.
It's really impressive.
All right.
Yeah, yeah.
It's so cool.
So, you know, I think there's a lot of advantages to having these notebooks.
I mean, certainly you have JupyterHub and run them there.
Like they also, if you put them into GitHub, GitHub like will execute them and actually render them live.
And there's NB Viewer and there's Binder.
There's all sorts of stuff, right?
Yeah.
And Google Colab will now run them too.
So there are just a lot, a lot of ways that even without starting a virtual machine that you can either view or interact with Jupyter Notebooks.
It's a pretty amazing technology.
And then one of the other things about it is Jupyter stands for Julia, Python, and R.
So you don't even have to run just Python in Jupyter Notebooks.
Like you could also run the R programming language or you could run Julia or there are a bunch of different backends that you can plug into it too.
And then there are like these extensions too.
So I found this really neat extension that you could plug in and it allowed you to do draw.io flowcharts like right in the JupyterLab interface.
So students can like draw the flowcharts that describe, you know, their loops or their if statements right there in the JupyterHub interface, which is pretty cool too.
That's really awesome.
It sounds like this solves, like that virtual machine you went and created, it sounds like that solves it for your instance of the class.
But I can see as a college, as a department going, okay, well, we can't always just, you know, call Peter the week before and have him use some credits to get a VM running mic.
What's the long-term plan there?
Well, so one of the reasons that I set up JupyterHub was I was worried that the college wouldn't install the software before the quarter started.
And it also gave the students like a way to log on and like run Python before the class even started.
And I think for some students, that's really nice to like just get their feet wet and be like, oh, this is what we're doing.
And like, oh, this isn't too hard.
And they can't come in and use the lab computers during like winter break or whatever.
So it did turn out that the Anaconda distribution of Python did get installed on the college computers.
So now at the college, I have the students open Jupyter Notebooks using either the Anaconda prompt or just using the Windows Start menu and opening a Jupyter Notebook that way.
And at least for us in engineering, like the Anaconda distribution is super helpful.
It has Matplotlib.
It has NumPy.
It has Pandas.
It's got PyCereal.
Like all the packages that you would want to install, all of those are already included.
And doing like pip install installations and virtual environments.
Like if you've been doing it for a while, that sort of seems like, oh, yeah, that's just easy.
You just create a new virtual environment.
For a student, it's really kind of complicated and opaque.
Like, what is this?
Yeah.
Like, I just want to open a file and make it run.
Like, why am I doing this?
Right.
And so using Anaconda, then the students don't have to install anything.
Like, you import NumPy and MP and it just works.
So are they generally using their local computers these days?
Generally, they're using in the classroom their local computers.
But I actually just like logged on to the JupyterHub server about half an hour ago.
And there were like a couple of students that had logged on.
So students are still using it.
Yeah, that's pretty awesome.
So earlier you spoke about this challenge of the textbooks.
And, you know, like I said, I remember the textbooks just being like a huge expense that I didn't see coming.
Like I saw tuition coming.
I didn't see $500 a semester in books also.
Like, geez, where am I going to get that money from as a kid, you know?
Right, right.
And there are, like you said, a bunch of great Python books that people can just sort of colloquially learn Python.
Like you read, it's interesting, right?
But not in the formal school sense, right?
Like chapter three is going to have this test.
And here's some example exercises like it.
So you're working on a book for this, right?
Along with making JupyterHub go so the students could see how to run Python before the quarter started.
I also wrote this open source book so that the students could read the book before the quarter started too.
And I was kind of inspired.
Like Jake Vander Plaas, he wrote the Python Data Science Handbook.
And that was written in Jupyter Notebooks.
And there are a couple of other books that were written in Jupyter Notebooks.
And I was like, I don't want to both like write the code and then I have to like test all the code.
And then like 3.7 is going to come out and then I have to retest all the code.
Like why not just write the whole thing in a Jupyter Notebook?
And then like the code that produces the plot, that's the plot that's like right there in the book.
So I wrote the book in Jupyter Notebooks and then students could view it in NB Viewer or go on to Binder and run them themselves.
And then I also used a package called mkdocs to build a web version of the book so that the students can just go to a website and see what their homework is and read through the material.
Yeah, this is really nice.
So problem solving with python.com, right?
Yeah, that's the textbook website.
And it just got published on Amazon.
So if you want a hard copy, that'll cost a little bit of money.
But all the students can use the web version or look at all the notebooks for free.
And some other authors have sort of adopted that same kind of idea that if you get the hard copy, you have to pay a little bit of money.
But if you're going to use the PDF or like use the web version, that's free.
And that's what I did it for my book too.
Oh, yeah.
It looks really interesting.
I like the exercises seem cool.
The review questions seem cool.
You have a Kindle version, which is maybe some weird intermediate thing where, you know, I really love the Kindle because you can take notes and highlights, right?
Like the web pages are great, but it's super hard to use it as reference, you know?
Yeah, and it's sometimes nice to be able to read the Kindle in bed or you're like on the bus.
You know, it's nice to be able to have that version too.
But part of writing the book, big challenge was how do you output to all of these different formats?
Like you have to create a website version.
You have to create the print version.
You have to create a PDF.
You have to create the Kindle version.
And I don't want to write four different books all at the same time.
So Project Jupyter, they've got this nbconvert package and that'll allow you to export Jupyter notebooks to various other file formats.
And lucky if you know Python, then that can help you with some of this stuff to be able to get the web version up and get a separate PDF made and get the separate Kindle version made.
So I'm just really, really thankful for all the people at Project Jupyter and all the hard work that they did.
That's awesome.
So the source of the book is a series of Jupyter notebooks?
Yep.
What are more?
Many.
Okay.
Yeah, yeah.
Many.
So there's sort of like one big directory and in there is a couple subdirectories for each chapter.
And in each chapter, there are between, I don't know, six or ten books.
So there's a notebook for each section of the book.
And then those all get put together to build a website.
Another real benefit that I didn't realize until students started using it was that you can make edits on the fly really, really quickly.
Like I can just, you know, pull the GitHub repo down and start editing one of the notebooks and then save it and push it back up.
And then the students like version is changed.
So having like a class of students is a great way to see where all like your little typos, grammatical mistakes, what's confusing.
Like it's probably like the awesomest editing system.
I don't really mean to use the students as editors, but they've just been great, like sending me suggestions to improve the book.
Well, the normal iterative cycle on textbooks is years, right?
Right.
It's not near live.
So that's a pretty cool aspect.
This portion of Talk Python to Me is brought to you by StellarS, the AI-powered talent agent for top tech talent.
Hate your job or feeling just kind of meh about it?
StellarS will help you find a new job you'll actually be excited to go to.
StellarS knows that a job is much more than just how it sounds in a job description.
So they built their AI-powered talent agent to help you find the ideal job.
StellarS does all the work and screening for you, scouting out the best companies and roles and introducing you to opportunities outside your network that you wouldn't have otherwise found.
Combining deep AI matching with human support, StellarS pairs things down to a maximum of five opportunities that tightly match your goals, like compensation, work-life balance, working on products you're passionate about, and team chemistry.
They then facilitate warm intros, and there's never any pressure, just opportunities to explore what's out there.
To get started and find a job that's just right for you, visit talkpython.fm/StellarS.
That's talkpython.fm/S-T-E-L-L-A-R-E-S.
Or just click the link in your show notes in your podcast player.
Do you encourage them to use GitHub issues and PRs and things like that, or do you just say, hey, send me a note that there's something wrong here?
Yeah, so far with the students, I've just said, hey, send me a note.
And if anyone wants to send me a PR, and absolutely, if anybody wants to use the book in their class, please do so.
So far in the course, we haven't gotten into Git and version control and how to do those sorts of things.
So I thought it was a little bit much to ask.
And students, it's easy for them to send me an email.
So so far, that's how it is.
But if anybody else reads the book and wants to make changes to it or wants to use one chapter but not use the other chapters,
they can definitely just go to the GitHub repo and pull it down and use what they need.
Interesting.
Maybe add an appendix for something or other.
Yeah.
And I took this idea from Allen Downey.
He's wrote a couple Python books, like the Think Python book.
At the end of his book, he had this list of contributors.
So every time I think somebody sent him something, then he put it in a list.
So I'll start listing anybody at the back of the book and the contributors if anybody sends me any edits.
Yeah.
OK.
Well, that's a great idea.
Yeah.
So people should check that out.
It seems like a really nice resource.
Even you think it's good for students who just want to learn Python and have they're not in like your ENG 101 course?
So if you're not an engineering major and you're not going to go on to a four-year engineering degree, I think it's still a really good intro resource because it's designed for students who don't have any experience in programming.
And also, if you're into data science and you want to get into data science, the tools that engineers use are a lot like the tools that data scientists use.
So in the book, there's a whole chapter on NumPy.
There's a chapter on Matplotlib and building plots.
Pandas and data frames are used.
And then some other packages like PySerial for communicating with hardware.
Also, SymPy for doing kind of symbolic math, for doing math with Python.
That's also in the book.
So if you're into data science, it could also be like a good resource for you, I think.
Yeah, I think it would be.
When you first told me about it, I was thinking it's mostly an engineering book that has some Python in it.
But it's mostly a programming book where the examples and the intended audience are engineers, right?
Yeah, exactly.
Yeah, that seems to me like that would be really useful.
When I was in engineering, I did like one year in chemical engineering before I decided I didn't want to be in chemical engineering.
And they told me during this period, I said, I would love to take a programming course.
Can I take like a C++ course?
They said, look, that can be an elective.
But you first have to take Fortran.
That's going to be the most important computer course you ever take in your life.
And you've got to study that.
And then you're allowed to do an elective C++ course, right?
It's like mid-90s or something.
And I just, I would love to have a book like this that covered a modern language that wasn't already old in 1995.
Yeah, and hopefully, hopefully, whatever the students learn in my course right now, and then in another 20 years, hopefully that will still be useful.
We'll be at Python, what, version 10 by that point or something, right?
Yeah, exactly.
I've heard talk of Python 4.
I have no idea what that's going to mean.
We're working on the versions as a community, I believe.
Oh, I guess it's worth asking, right?
This is Python 3?
This is Python 3.6.
And I call the book the 3.6 edition.
And I'm working on, for the spring, the 3.7 edition.
And then I'll change my virtual environment that I run all the notebooks in, make sure it all runs with 3.7.
The new f-strings, I think that that is a killer feature in Python.
And so the book does use f-strings.
It just makes inserting numbers and other strings into strings so, so much easier.
So it's definitely Python 3 only.
Perfect.
It's time, right?
Yeah, it's time.
It's been time for a while, but it's really time now.
I see you have a chapter on MicroPython.
Yeah.
And also external hardware.
That's pretty cool.
What do you guys do with that?
With external hardware, we connect the computers to little Arduinos, little microcontrollers.
Students can control LEDs or they can read temperature sensors, things like that.
And we used to use MATLAB to do that, and it was pretty cumbersome.
But the PySerial package allows you to communicate with external hardware.
So Python talks to these little Arduinos, these little microcontroller boards through the
serial interface using PySerial.
And the students each quarter do these projects with these little microcontrollers.
So, for example, one student group made a project that opened a set of doors that allowed this
car to run down a track.
Or another student group had a set of photo gates, and they measured how fast the car ran.
Or another student group put a light sensor on this aquaponics fish tank grow system and measured
the amount of light that the plants were getting.
And it sort of ended up being that the students would have to learn two different programming
languages.
They'd have to use MATLAB, and then they'd have to learn the Arduino programming language,
which was just sort of like C to do their projects.
But Python has MicroPython.
So you don't have to learn Arduino.
You can run Python on the little microcontrollers.
It's awesome.
It's so amazing.
Yeah.
This quarter, the students will use those little microcontrollers and run MicroPython on them.
And then they can use most of the regular Python commands that they learned throughout the rest
of the course.
Yeah, that's really interesting.
Because going from MATLAB to C, that's a big step.
Definitely.
But hopefully going from like Python to MicroPython, like that won't be as huge of a jump.
And I'm also looking forward just to see the things that the students are going to be able
to do with them.
Like they always come up with these awesome, awesome projects.
One student group had a coffee cup and the temperature thermometer.
And their idea was they were going to have it like send you a text message when your coffee
got cold.
Like I'm just super excited to see what they turn out to be this quarter.
That's cool.
You've got five minutes to finish your coffee before you won't like it anymore.
Go.
Yeah.
Oh, how cool.
I can certainly see this IoT device programming aspect of being an engineer really being useful,
right?
Like engineers build things, they have sensors, right?
Understanding like the control mechanisms seems great.
Engineers solve problems in teams.
That's what I always tell my students.
And so like they use computers to solve problems, not just to design computer stuff.
So we try in the course to like make them solve a real problem.
And MicroPython and like those little teeny microcontrollers, like you can solve real problems
with programming.
It's really neat.
Yeah.
A real in the physical world with atoms, not bits, right?
Yeah, exactly.
Exactly.
Yeah.
Cool.
I guess one other follow-up thing I'd like to ask you about this whole JupyterHub and
Jupyter Notebooks is what tools or advice do you have for people who may want to use JupyterHub as
their like homework, student work area, right?
Do you use things like NB Grader or do you use like is there, what advice do you have for
people I guess?
Well, so if an instructor wants to do this, I guess one of the big pieces of advice is you
have to think about authentication early.
Like how are the students going to log on?
Because you could have them all get GitHub usernames and passwords and do it that way.
Our college uses Google apps like Gmail and stuff.
So you could use like your Google logins or you could create individual usernames and passwords
that you like mail out to individual people.
So like thinking about authentication, I think is like one of the things early on that you should
think about.
And then another one is just data persistence or like state persistence.
So when the JupyterHub starts, it creates these new servers and there are different ways to
run it.
If you run it in a Docker container, it's possible that all of your work, once you close down your
server, like you close your web browser, all that goes away.
So that's the way that Binder works is that you can run these notebooks.
But if you save like homework number one and you close it, like and you come back later,
it's gone.
That'd be a little frustrating.
Yeah, that would be totally frustrating.
So you can't quite do like a whole course in that.
So you have to think about how are you going to allow data to persist on the server if users
are creating it.
Another little concern of mine was all of the labs and the assignments are on GitHub.
So how can I pull all of the labs and the assignments into the student's environment so
they don't have to go to GitHub and look at them.
They're like right there in their Jupyter notebook when they're going to the
they log into JupyterHub.
And there's this neat little extension called nb-git-puller, I think.
And this nb-git-puller extension, you click a link and then it automatically like pulls down
a repo from GitHub and sticks it into one of the JupyterLab or JupyterHub instances.
So that was like a really neat package to find.
Oh, yeah.
That is pretty cool.
A one-way git repository access.
That's nice.
Also, how did you deal with like, did you set it up so students each had their own private
set of things but you could see them?
Because obviously if one student can see another is like that takes like copy and homework to
another level, right?
Yeah, totally.
There are different ways to set up JupyterHub.
But the way that this one is set up is that when a student logs in, they basically get a new user
on a virtual private server on the Linux server.
And so their user on that Linux server doesn't have access to really anything outside their
own home folder.
So each one of the students has a different Linux user.
They have a different home folder.
And so they can't really see anything outside of just their local like user profile.
Yeah, OK.
And if a student like is super, super clever, like actually JupyterLab has command line available
and they're like able to like hack into the server, send me an email and we'll talk about
it because you're like way, way above like where a lot of students are if you're able to do that.
And maybe it's OK if you're copying somebody's homework.
Yeah.
If you figure out how to hack the server.
Yeah, interesting.
All right.
Yeah.
But it sounds like you could use Linux permissions and roles and whatnot to make it work.
Yeah, yeah.
That's one way to do it.
Then doing the Docker containers and Kubernetes, that's like another way to do it.
That's pretty cool.
It sounds like a fun project.
Yeah, it's super awesome.
And I built a set of documentation because as I was building the JupyterHub server, I wanted
to make sure like I can do this again the next quarter.
So I have a little website built with MKDocs that shows every step that I went through in
order to build my JupyterHub deployment.
So if anybody wants to build their own JupyterHub server, they can definitely take a look at that
online and see if they can build their own.
It's actually it's not too hard.
Like you need to do a little bit of Linux stuff and you've got to start the virtual private
server.
But like you can do it if you're teaching engineering programming at college.
Like you can launch JupyterHub.
You can do it.
Yeah, that's certainly true.
Cool.
Yeah, that probably about rounds it out for our main conversation.
You're trying to turn the tables on me here.
I see you threw out some stuff that say you want to ask me a couple of questions.
So I don't know if I have a good answers, but I'm game.
Go ahead.
All right.
So one of my big questions is I'm just so grateful to everybody at Project Jupyter and
Min Regan Kelly and Carol Willing and everybody who works even at NumFocus to help build like
NumPy and Pandas and all of the tools that we use.
What is a great way to thank people that build some of these open source tools?
I'm not at the level where I can like directly contribute to the NumPy source code.
Like what is a good way to thank people and say thank you for what you did?
Obvious way might be to do like add a new feature or something, right?
But that's a different level maybe.
I think starting just by saying thank you actually is really valuable.
So much of the open source stuff I think is thankless, right?
People will get angry because some feature doesn't work and they'll go rail against the maintainers.
And like just having a counterbalance like all these people are appreciated.
Maybe sharing your story, which obviously you're doing here, right?
But as a more general comment, like your work has really enabled me to teach, make Python
and engineering more accessible to more folks, right?
Like hearing that I think is a lot.
And then if you're in an organization that can somehow contribute back to it, you know, I
mean, I realize that a lot of people aren't.
But if you work, say, like at a big company, you know, maybe your company could somehow sponsor
that project to help, you know, make it not purely volunteer, but help make that a job.
One of my pet peeves is there are many, many billion, billion dollar companies built upon things like
Pandas, Django, Flask, SQLAlchemy.
And if those companies just sent back 0.01% of their profit, even not just revenue profit, just to say, look, we probably should maybe support the thing that is the foundation of our business a little bit like that would just there's like a handful of people like I probably could count them on my hand.
Literally, that maintain Flask, right?
Like, how much do these giant companies need to contribute to actually just make those people's lives great to just sit around and contribute to Flask, right?
So I feel like if that was if that's something that people could do, that would be amazing.
But I think just saying thank you, maybe contribute a tutorial, maybe contribute a case study, or, you know, it doesn't have to be a new feature, right?
It could be even documentation or, hey, let me I see your docs are on Python 2 for your tutorials.
Can I upgrade that to Python 3?
Because I know that's, you know, just like little because that's the last thing that folks that are trying to write the software want to do is like rewrite their tutorials.
You up for a couple more tough ones?
Yeah, hit me.
All right.
So this is like a secret question, but I hear it from students a lot.
Are you still afraid that some of the software you build is going to break?
And does that feeling ever go away that you're not thinking in the back of the head?
Oh, my God, what I just built like it's going to crash.
Yeah, that's a great question.
I certainly have little scripts and apps and utilities that are like super sketchy because they're like I needed them once or twice to do a little thing.
Those will probably break because they're not very well put together because they're just a quick one offs.
But at the same time, I'm not afraid because like they're not really important.
I could just if I need them again, I can kind of fix it.
But things that do make me nervous are like the training website that people have paid tons of money for so that they can take their classes.
Maybe they've got a project next week.
And it takes a long time to feel like it's not going to break anymore.
But I feel like it's not going to break.
All right.
Like not in any like super significant way, but it takes years.
So let me just put it to you this way.
If I go on vacation, like, for example, I went skiing two weeks ago up on Mount Hood, went stayed up there in Timberline for a couple of days.
And I was thinking, I really don't want to take my computer because I'm going to have to leave it in the car and like sub zero weather and it might hurt the battery.
But what if the website goes down?
Maybe I'll bring my computer just in case.
And I'm, you know, still and I would say that's one.
Like so I decided, no, it's been fine for the last six months.
I'm not going to touch it before I leave.
It'll probably be fine.
Worst case, I'll buy an SSH client on my iPad and try to get in there and fix it that way.
There's always like a little bit of a like a little bit of an uneasiness because you just you never know.
Right.
Like it could be things out of control.
Right.
Like maybe something happens in the data center or you just don't know.
But generally it does go away.
But it takes a long time on any given project, I think, before it feels OK.
Yeah.
I just think that's like being afraid of that your thing will break.
It's not something that programmers talk a whole lot about, but it's something that I do hear from students and that I feel myself.
So I just want to make sure that like actually a lot of other people sometimes felt that way, too, and that it was normal.
Yeah.
I'll share one more story with you.
The very first website that I wrote that did e-commerce was for a pretty expensive product for quite a bit of students.
It was a training thing.
It was not mine, like my own thing.
This is for a company I work for.
And they would come and buy like $4,000 things.
And I remember writing that and just being super nervous about shipping this offer.
I'm like, people are going to go put their credit card in here.
We're going to charge them $4,000.
What if I mess it up?
Like what if this is supposed to be dollars and it's cents or it's supposed to be cents and I put in dollars?
Like just, you know, the consequence of failure was really high.
Like what if I end up charging somebody, you know, $40,000 or like just like those things are super nerve wracking.
But, you know, the more you go through them, right, the second, the third, the fourth time, you're like, ah, okay, I'll just be careful.
But this is how it goes.
So, yeah, it doesn't ever go away all the way.
But, yeah, it gets a lot better.
So, my final question is what's the hardest problem that you ever worked on that just had a super simple solution?
You're banging on your head for like two weeks and then you were like, oh, it's just this.
Yeah.
There's been a couple of those.
I would say there's certainly some around like APIs.
And you're like, oh, man, I just can't get this to work.
And I go, why didn't I just, the order is like this.
But I do have an engineering related one for you that's probably like this.
I was working on this project with one other developer.
And we were, this is actually coming from MATLAB code into C++, C#, something like that.
This is before Python.
And it was doing real-time wavelet decomposition of like a time series.
And the times, it was something like you have all this state, about 250 measurements per second.
So, you have four milliseconds to process a measurement, right, like per measurement.
You don't have much time.
And we take all this MATLAB code and we convert like thousands of lines of wavelet decomposition code and stuff.
And just looking at this going, I sure hope this works because I can barely like understand what I'm doing here, right?
But it also has to be fast enough.
It has to be real-time.
So, it can't take more than four milliseconds per bit.
Or if you queue it up, you know, like times the number of things.
And so, we get to it and we run it and it's not fast enough.
Like, oh my God.
Like, we're going to have to optimize that wavelet code because I cannot change that.
Like, I got it working but really I don't understand more.
And it turned out, I turned a profiler against it and it was using a list instead of a dictionary to hold a bunch of stuff.
And it had to do like lookup based on some cases or like what would be better by key rather than by position, right?
And we just switched the data structure from a list to a dictionary and it got like 10 times faster.
Cool.
So, boom.
It fell under four milliseconds.
It was done.
Problem solved.
Right?
But like it was, this program is too slow.
What is it doing?
Oh, it's just doing like index of type operations on the list.
Like, that's 80% of the CPU usage is list lookup.
Switch it to dictionary and that 80% goes away.
Boom.
Fast.
That's it, I guess.
For me, it just seems to have come down to go to PyPI.
Yeah.
I was trying to surf these webpages and then it was like, oh, just use Beautiful Soup.
Or like, oh, I was trying to get a website.
Oh, just use Request.
So, now that's kind of the first thing that I do is go to PyPI.
Yeah.
I remember that being a big problem.
If you either come from a language that doesn't have a rich standard library like C++ or something or C or you just don't know, you have no awareness, you're like, oh, I got to do this thing.
So, how am I going to implement it?
Like, that should not be your first thought.
Your first thought should be, can I pip install an answer here?
Right?
Right.
Can I pip install a solution?
For sure.
Nice.
All right.
Thanks for the turnaround on the questions there.
That was fun.
Before we call it a day, though, I got to ask you the two questions, as always.
If you're going to write some Python code, what editor do you use?
Well, I like this question because students often want to know which editor to use, too.
So, I've got kind of a multi-pronged answer.
If I'm writing a one-file thing, I'll use a Jupyter Notebook or Jupyter Lab.
And if I'm writing a multi-file thing, often I use Visual Studio Code.
And if I've got something really big, you know, like a Django site or like Flask, then I use PyCharm.
All right.
Those all sound like good answers to me.
I agree.
Right on.
And then, notable PyPI package?
So, I've got kind of a niche one, but a package I've been using is called SCIMDRAW.
And the SCIM stands for schematic.
So, it's a package that draws circuit diagrams, like puts resistors and capacitors and stuff in circuit diagrams.
And I've used that package to make test questions.
And there's some figures in the book that I used it with.
So, if you've got to draw some circuit diagrams, like check out SCIMDRAW.
That's pretty awesome.
All right.
Well, definitely enjoyed talking to you about this, Peter.
It was really fun.
And I'm glad you found your way from MATLAB to Python and SuperHub.
That was awesome talking to you, Michael.
Thank you so much for having me.
Yeah, you bet.
So, final call to action.
People are excited about this.
Maybe they want to use your book or contribute or they want to like try to set up a similar thing in their environment.
What do they do?
So, my final call to action would be if you want to take a class, think about community colleges.
They have programming classes too.
If you're an instructor, please use my book or send me a PR.
If you want any changes.
And if you're teaching MATLAB, Python can do everything.
So, if you're afraid, set up a JupyterHub server and you can start next quarter.
That's awesome.
All right.
Well, thank you so much for sharing your story.
It was a lot of fun.
This has been another episode of Talk Python to Me.
Our guest on this episode was Peter Kazarinov.
And it's been brought to you by Linode and Stellarress.
Linode is your go-to hosting for whatever you're building with Python.
Get four months free at talkpython.fm/linode.
That's L-I-N-O-D-E.
Find the right job for you with Stellarress, the AI-powered talent agent for the top tech talent.
Visit talkpython.fm/Stellarress to get started.
That's talkpython.fm/S-T-E-L-L-A-R-E-S.
Stellarress.
Want to level up your Python?
If you're just getting started, try my Python Jumpstart by Building 10 Apps course.
Or if you're looking for something more advanced, check out our new Async course that digs into all the different types of Async programming you can do in Python.
And of course, if you're interested in more than one of these, be sure to check out our Everything Bundle.
It's like a subscription that never expires.
Be sure to subscribe to the show.
Open your favorite podcatcher and search for Python.
We should be right at the top.
You can also find the iTunes feed at /itunes, the Google Play feed at /play, and the direct RSS feed at /rss on talkpython.fm.
This is your host, Michael Kennedy.
Thanks so much for listening.
I really appreciate it.
Now get out there and write some Python code.
Thank you.
you
Thank you.