Brought to you by Michael and Brian - take a Talk Python course or get Brian's pytest book


Transcript #136: A Python kernel rather than cleaning the batteries?

Return to episode page view on github
Recorded on Wednesday, Jun 19, 2019.

00:00 Hello and welcome to Python Bytes where we deliver Python news and headlines directly to your earbuds. This is episode 136 recorded June 19th 2019 I'm Michael Kennedy and I'm Brian Atkin and this episode is brought to you by data dog check them out at Python bytes out Of them slash data dog get a cool shirt more on that later Brian. How you been? I am doing well good good same here Rolling into summer kids are home working from home is now chaos, but it's it's alright. Yeah It's a little cooler today too, it's nice.

00:28 >> Yeah, it's beautiful. You've got some magic trick lined up for us for this first thing? What's going on here?

00:33 >> Well, actually, I think it's just going to be me trying to pronounce a French word.

00:39 I think, I know it's not voila.

00:43 Voila? Do you pronounce the V? I don't know.

00:46 >> Voila? I think so.

00:47 >> Voila?

00:47 >> Viola. No.

00:49 >> No. Voila is a new project.

00:53 It's a newly announced project from the Jupyter Notebook people.

00:56 So the idea is Jupyter Notebooks in standalone applications or dashboards.

01:01 So people that are used to working with notebooks and they want to share what they found with other people and you want to have people be able to interact with it and have it be a little bit interactive but not allow people to change your code. How do you do that?

01:17 That's where Velocity, voila, steps in.

01:20 It's a pretty cool project. I was playing around with it a little bit.

01:24 You can have custom or at least reading about it, custom widgets to set up your page and even like templates and grid layouts.

01:32 But you don't have to be a web developer.

01:33 It's like drag and drop stuff.

01:35 >> This is cool.

01:35 >> I like the idea of presenting the interactive plots and graphs and stuff, and also being able to have people be able to run the code and do selectors and things, but not let people change the code.

01:48 So that's pretty cool.

01:49 >> Yeah. You just take your notebook and you just turn it into a web application.

01:53 That's pretty awesome.

01:55 And it has nice restrictions like does not permit execution of arbitrary code by consumers of the dashboard.

02:01 It's language agnostic, so you could have C++ code up there in addition to Python or whatever.

02:06 And you know, Jupyter does. That's pretty sweet.

02:08 Yeah, I could see a lot of people using this, even for dashboards for like peeking into databases and stuff.

02:14 Nice. So voila, and you have a website.

02:16 Voila.

02:16 Ha, I have a Jupyter Notebook and here it is. Cool. Awesome.

02:22 So I don't think we covered this.

02:24 I kind of tried to sort of intentionally didn't want to go too far into it because it didn't seem super productive.

02:31 But there was a presentation back at the Language Summit called Python, something like cleaning up Python's dead batteries or something to that effect.

02:39 Did you catch that?

02:39 Yeah.

02:40 So the idea was there are some modules and parts of Python that are outdated.

02:45 Their existence puts pressure on the core developers in ways that doesn't and let them focus on what they need to be doing.

02:53 It also makes it super hard for people to contribute.

02:57 Like, for example, there's a color system module in Python in the standard library.

03:02 I'm gonna pick on this thing a lot during this little segment.

03:05 And it has the very important purpose of converting CSS colors between coordinate systems.

03:12 Super important to have that in the standard library, right?

03:16 I don't know.

03:17 Maybe, maybe not.

03:18 At one point, you know, Python standard library was really the goal of it was to come with everything you need because installing extra stuff, like downloading it, getting it, running the setup and all that, was really tricky.

03:31 Now everything's pip install one away.

03:34 So it looks a little bit weird.

03:36 And if, say, you wanted to fix or change the color system module, it's not the same as if you want to go contribute to some random thing on GitHub.

03:43 No, you've got to be a core developer.

03:44 There's a lot of steps that go through this.

03:47 It only ships every 16 months, or sorry, 18 months for new content or new things, changes.

03:53 So how much do you really care to make a contribution or a change to ColorSys?

03:58 You probably not very much for all those reasons, right?

04:00 It's slow on purpose, it's hard to make changes to, and so on.

04:04 But the problem is like it has things like ColorSys that probably don't make a lot of sense to be there anymore.

04:10 So Amber Brown and some other folks were making a case that maybe we should take some stuff away and it was pretty controversial.

04:19 There was some like heated disagreements at the actual presentation and stuff.

04:23 And I don't care about that, I don't wanna go into it.

04:26 But that approach was, we have stuff in Python that maybe shouldn't be there.

04:31 Let's talk about what we can take out.

04:34 And Glyph wrote a cool article called Toward a Kernel Python.

04:40 And I've talked about this before.

04:41 I don't know if I talked about it on Python Bytes or on Talk Python.

04:45 But I think there should be some kind of subset of Python that is defined to be like the minimum subset of Python that is guaranteed to be everywhere.

04:56 So for example, if you work with PyPy, you get one variant of mostly Python.

05:02 If you work with CircuitPython or MicroPython, you get another variant of mostly Python, but not all of it, right?

05:08 If you work with Brython or some of the JavaScript versions that run in the browsers, again, similar subset, but not the same.

05:17 So if we had like a smaller, sort of essential, Python standard language definition and library that was like, I don't know what's the right number, but a smaller amount that you could guarantee was identical across all those platforms, and then opt in to bringing the other stuff in.

05:34 So Glyph's main idea was like, could we say, instead of like, take what we have and hack away a few things that don't make sense, rather trim it down to this kernel, to this essence.

05:45 And then, I don't know, pip install the rest of the libraries or something like that.

05:49 The rest of the standard library, you want the networking stack, you pip install networking.

05:53 I don't know, like I'm just making up parts that we would do that for.

05:57 But that was his idea, that basically there's a pep, pep 594, that's about removing obviously obsolete and dead stuff from the standard library.

06:05 And that's all well and good, but it actually turns out that having things like color sys in the standard library mean that the core devs have to deal with a bunch of stuff.

06:17 So he talks, he runs Twisted.

06:18 So he talks about like how is Twisted doing on keeping up with PRs.

06:21 And let's look at CPython over there.

06:23 And they have 429 tickets currently awaiting review over on GitHub.

06:29 I think it's in GitHub.

06:30 It says the oldest PR awaiting review hasn't been touched since February 2nd, 2018, is almost 500 days old. But when you look at it, the PRs, there's 25 PRs that are out on address or whatever, 14 were about the standard library and 10 were about CPython.

06:50 So why are the core devs having to deal with this stuff when there's typically a replacement like there is a built in HTTP library, but people just use requests or AI or HTTP or whatever, right? Like there's there should be a way to maybe create this essence of it and then bring more in.

07:06 What do you think?

07:07 - I definitely think there's an idea there.

07:08 Like you said, there's kind of like a Venn diagram.

07:12 There's a common set that most people need, or you'll need for lots of different domains.

07:18 But then for a web domain, for web stuff, you're gonna need different stuff than for like working with audio files, or working with text files, or the different problem domains are gonna use different bits, and you don't need everything else.

07:33 Interesting idea. The install, the how do beginners install stuff is an interesting, how do you deal with that though?

07:42 Yeah, absolutely. And he does address that and I do think it's, it is a challenge.

07:46 He says, look, probably the stuff you go get when you download off python.org or you brew install Python, that probably should just be everything, right?

07:57 but it doesn't mean that it can't be comprised of smaller things that potentially ship on a different schedule.

08:04 - If you're gonna install like Visual Studio or something like that, you always have options of do you wanna install this stuff and this other stuff also?

08:11 - Yeah.

08:12 - You can opt out and we could do something similar to that with Python of like, do you wanna install the web stuff, do you wanna install the audio stuff and whatever.

08:21 - Right, you could have these full distributions that you install, but if you look at say Linux, For example, if you go to an empty Ubuntu machine and you try to create a virtual environment, depending on the version you have, it may not work.

08:33 You may get an error that says, "You need to apt install Python 3-VENV." It's like, wait, that part of Python wasn't shipped?

08:42 Okay, well, we'll do that.

08:43 Or if you try to even pip install something, it might say, "You might have to apt install "Python 3-PIP," right?

08:49 So they've already done this on Linux.

08:51 There's other examples as well.

08:54 For example, the .NET Core in the Microsoft space basically is like this, right?

08:59 Like there's, you use their package manager system to bring in like significant parts of what is their standard library.

09:07 I do think it's a problem for beginners.

09:08 I think it makes it harder, right?

09:10 It's like saying, "Oh, we just run JavaScript over in Node "and it's easy," but then you see all this require JS and all these like patterns.

09:17 You're like, "Why is this so hard?

09:19 "What happened to print hello world?" You know, like I do think there's a danger, but if the standard way that people get Python is they get this big bundle, but maybe those bundles are not all maintained by the same team, which is the core developers, right?

09:34 Maybe if they could be broken apart and then brought back together through something like Pip, and then more importantly, upgraded, like sooner than every 18 months, that seems like a good idea.

09:44 And this seems like a way better approach than saying, well, what can we hack out of the system?

09:50 Could we hack out Colorsys?

09:52 Yes or no, let's talk about that.

09:53 - Well, right, and also just, there's some stuff like Color says, it's surprising that it needs to be there.

09:59 And then there's stuff that's not in the core or in the standard library that, like, why is that not there?

10:03 Like, set up tools in wheel.

10:06 I'm always surprised that I have to pip install wheel to create a wheel.

10:09 - Yeah, and speaking of pip, Cliff did mention that when you get Python, it comes with pip.

10:14 Like, installing Python lets you type pip install a thing, but pip is actually maintained by a different group and shipped on a different cycle, right?

10:22 That's PyPA, not the core developers, for example.

10:25 So it's like that a little bit, but if it was more like that, you could make a change.

10:30 You could join the team for, I don't know, the networking or color system, whatever you want, work on that and maybe push changes more rapidly than the core CPython runtime.

10:40 - Right, we could do something like the PyPA, but do like the Python standard library authority or something like that.

10:46 - Yeah, exactly.

10:47 It's a pretty interesting idea and it definitely seems better than, It seems more like the outcome will be better than trying to just hack away at a few dead batteries, if you will.

10:56 - Yep. - Cool.

10:57 This next one that you're talking about, I recently ran into this as an error.

11:00 I'm like, "Wait, what did I type wrong?" And then I realized, and this might be a cool feature.

11:03 Why don't you tell people about this?

11:05 - Like for instance, with pytest, it comes as a standalone script.

11:09 You can say, you can just write pytest on the command line, but you can also say Python-M pytest.

11:16 And a lot of pip installable things, you can do that.

11:19 You can say -m the thing name and it works.

11:24 I didn't know how to do this, actually.

11:25 I never really thought, how do I do this?

11:27 And how do I figure it out?

11:28 And all it is is to put a dunder main file in your project.

11:33 I didn't know it was that easy.

11:35 So I'm linking to an article that pretty much says we use the convention of if dunder name equals dunder main, then run the main program or something.

11:44 But you can use the dunder main.py file itself in your project and that -m thing just works.

11:52 - That's pretty simple, right?

11:53 - I'm like, it can't really be that easy.

11:55 So this morning I did a little flit project, a flit based project, and then threw a dunder main in there with just a print statement and installed it and went somewhere else.

12:06 And sure enough, it works just awesome.

12:08 So neat.

12:09 - Oh, that's super cool.

12:10 Yeah, I ran across this by accidentally saying Python and saying run a directory instead of a file.

12:18 Like, oh, it said it couldn't find dunder main.py.

12:22 I'm like, wait, it was looking for it?

12:24 That's pretty cool.

12:25 Maybe there's something to be done here.

12:26 Yeah, that's great.

12:27 I'm glad you pointed it out.

12:28 - If you have a dunder main in there, you can just say Python and the directory name and it works?

12:33 - I have not verified that, but it seems like the error message would indicate that it might work, yeah.

12:39 I mean, it was like a full path.

12:40 It wasn't just a standard directory either.

12:43 - Okay. - Yeah, so pretty cool.

12:44 - Neat. - Yeah.

12:45 - I don't know how useful it is to people, but I'll run across it every once in a while.

12:49 - Yeah, that and entry points, always really nice.

12:51 Now, speaking of nice, Datadog is supporting our show and they got us some nice products, so let me tell you about them really quickly.

12:56 And so, they're a cloud-scale monitoring platform that unifies metrics, logs, traces, all that kind of stuff, monitors your Python apps in real time, helps you find bottlenecks with detailed flame graphs, trace requests as they cross over service boundaries.

13:14 All right, so if you have microservices, you're talking to database or queuing, things like that.

13:17 Plus, it also does automatic instrumentation for popular frameworks like Django, AsyncIO, and Flask.

13:24 So you can quickly get started without too much setup.

13:27 So, get started today. There's a 14-day free trial at pythonbytes.fm/datadog.

13:32 And you get a cool Datadog t-shirt, which is always fun.

13:35 Thanks to Datadog.

13:36 Mine's a nice purple color, and my kids always comment when I wear it, they like the shirt.

13:41 Yeah, I love it.

13:42 So this next one I want to talk about, The name might sound a little derogatory, but it's not really meant that way.

13:47 Maybe simplistic sounds better.

13:50 But the thing I want to talk about is this article by Chris Wellens entitled "The CPython Byte Compiler is Dumb." Simplistic is maybe better, but what you might not know, depending on how much you dig into it, is there's excruciatingly small amounts of optimization when CPython runs your code.

14:10 So there's a compilation step, actually, right?

14:14 The bytecode and compiler talks about some kind of compilation.

14:17 So when you run your code, you probably see the dunder pycache folders.

14:21 And in there, you have the pyc files.

14:22 So that's taking your source code, turn it into bytecode, and put it there.

14:25 But then instead of, say, compiling that onto machine instructions, the interpreter takes that, feeds it through this ginormous switch statement that's like 3,000 lines long in the CPython runtime.

14:37 And it just goes, well, what case is this?

14:39 So we're jumping to that, right?

14:40 It's pretty wild.

14:41 There's a file called cval.c, check it out.

14:44 However, there's very little optimization that happens here.

14:48 So Chris decided to compare this against Lua and one other similar, maybe Ruby, I can't remember what the other one that he compared it against was.

14:56 But he talked about, you know, like if I write this code, what happens to it?

15:00 So there are optimizations like, what are called peephole optimizations and a few memory allocation optimizations in CPython, but they're pretty limited.

15:10 So if you look at some examples, like let's take an example where we have a function.

15:16 It's called foo, defines two variables, X equals zero, Y equals one, return X.

15:22 That seems simple, right, Bray?

15:23 - Yeah, except for Y is not needed, but yeah, sure.

15:26 - Exactly, so when you see that, if Y is unused, and this is not making any change, it's just literally creating a variable which is effectively an entry in, you know, like a module name lookup or a locals lookup, right?

15:38 Like, why does that need to be done?

15:41 Doesn't seem like a whole lot's happening.

15:43 So for example, the CPython byte code compiler could just go, well, forget that line.

15:47 And it could say, well, x never changes its value.

15:51 So why don't we just inline that to say, basically, the whole function is return zero, right?

15:58 Inline the x, drop the y, it's good to go.

16:01 But if you go and throw that into the disassembler, you'll see that no, that's not what happens.

16:07 It literally just takes it step by step by step.

16:10 - Okay. - Wild, right?

16:11 So it loads the constant, it stores it into a field called x.

16:14 It loads the constant, it stores it into a field called y.

16:17 Then it loads the constant again, the value for x again, and then it calls returnVal as the bytecode instructions.

16:23 Right, instead of just load constant zero, return value.

16:26 Right, like it could be a lot quicker.

16:28 So I find that this is, it's honestly a little bit surprising.

16:32 I mean, Python is 25 years old, and it doesn't take steps like this.

16:37 Now, Darius Beacon did point out that Guido himself said Python is about having the simplest, dumbest compiler imaginable.

16:46 And there's some links to that, some references there if you want to go check that out.

16:50 So I think maybe it's by design to keep it simple.

16:54 It's easy for people to contribute to.

16:56 But it certainly seems like there could be a layer between parsing the bytecode and executing the bytecode that says, we're not running in a debugger or something like that, so let's go crazy and just convert stuff like that to return zero.

17:12 There's also a bunch of other interesting examples in there.

17:15 This is just one that's really obvious that's good for talking, and I pulled out.

17:18 - And optimization levels is something that CS people have been doing with compilers for a long time.

17:24 So it's not like we'd have to invent it ourselves.

17:27 - Right.

17:28 - Yeah, C has had plenty of it.

17:30 C#, the JIT compiled languages, their JIT compiler is a place where a lot of that happens.

17:35 Things like this, right?

17:36 - Did you say that there was a comparison to other languages?

17:39 Do other languages do more optimization?

17:42 - I know, not really.

17:43 (laughing)

17:45 They're all pretty much the same.

17:47 For better or worse, they're all the same.

17:49 So there's an interesting point that he makes that I do wanna just comment on real quick.

17:53 It says, "So the consensus seems to be that if you want or need better performance, don't use Python.

18:00 Go use another language. - No, no, no.

18:02 - I'm like, dude, no, you were like so close.

18:04 You were so close as well.

18:06 You could, maybe don't use CPython, right?

18:08 Maybe use PyPy, P-Y-P-Y.

18:10 But the most obvious optimization to me that just can change the game is Cython.

18:17 You could write like one or two slow functions in Cython and boom, it goes to machine instructions and it's, you know, it's near the speed of C.

18:25 So I like the article, I don't like that it says, "Oh, if things are a little bit slow, just run away." Like, no, there's probably a package that has a C extension that already works better, or there's a data structure you should be using that would be better, or there's Cython, or on and on.

18:40 There's a lot of improvements before Python's not the answer.

18:43 - Or be aware that this is doing this, and do your own optimization, or, and for the most part, use a profiler and really tell where the optimization needs to be.

18:53 - Exactly, like only 10% of your code needs to be fast at all, if that much most of the time, right?

18:58 It's usually like one little bit, like oh, if this were faster, it would change the game.

19:03 - Yeah, I mean, I learned assembly in college and I'm glad I've never had to use it.

19:08 - For sure.

19:11 So final comment here, Brett Cannon, when I interviewed him recently, you know, he's on the steering council, a core developer and so on, He did talk about how would adoption of Python 3 change, how would adoption of Python in general change if we could make Python two or four times faster than it is today?

19:31 Like most of the time it doesn't matter, but if it could be faster in some interesting ways, what would that mean, right?

19:37 In terms of upgrading more quickly to the new versions and just general, like people not saying, oh, I have to use Go because I need async IO or something like this.

19:45 So it seems like if the compiler is this absent, if optimizations are this absent from the compiler, like there's some low hanging fruit to like do some simple CS compiler optimizations and make stuff faster, right?

20:00 I mean, you could make this silly foo method like probably three times as fast, right?

20:05 'Cause you could drop most of the bytecode operations.

20:07 - Yeah, definitely.

20:09 It's worth looking at.

20:11 It's interesting that there is some people thinking about performance.

20:15 - Yeah, I mean, we had that conversation around the idea of Rust and maybe what if we use Rust instead of C in certain situations, but this seems like low-hanging fruit already right here, and regardless of whether it lands in Rust or C when it's executed, not executing code is a lot faster than executing it.

20:32 Cool, what's the next one?

20:33 - EdgeDB is something that came up on my radar a couple years ago.

20:38 I saw that EdgeDB people had a booth at one of the PyCons, and they were talking about it, But at the time, it wasn't around for people to actually play with.

20:48 So the other day I saw an article called "A Path to a 10x Database" put out by the EdgeDB people.

20:55 One, there was a download link, which I was happy for.

20:59 There's an alpha one available.

21:02 And people that are following along and kind of excited about what they're doing, they've published a roadmap of the features they have done, what they're working on.

21:11 And it's kind of cool.

21:12 I'm looking forward to being able to play with it more.

21:14 So people that don't know what it is, they call it a next generation relational database.

21:20 It's based on Postgres.

21:22 I don't know what that means if they're using Postgres or if they're used the design of Postgres as a base.

21:28 I haven't dug that far, but it features a different kind of data model and an advanced query language.

21:35 And there are a whole bunch of features built into it already.

21:38 And I'm pretty excited about a lot of it.

21:40 But the thing that really excites me is that they completely replaced SQL, the query language.

21:45 It's a different kind of language, and it looks more natural to me.

21:50 I mean, people aren't really writing SQL a lot of times because they're using like what the SQLAlchemy or something like that.

22:00 And partly those things exist because people don't want to write SQL.

22:03 But maybe if we had a better query language, you wouldn't need the middle layer so much.

22:08 - Yeah, it definitely looks interesting.

22:10 I don't have a real good sense of what it, like how it compares to both of those.

22:14 The query syntax does look nice.

22:16 Like the joins look super cool.

22:19 Or the subqueries possibly is more like an analogy.

22:23 But yeah, it looks really neat.

22:25 It sort of sells itself as a hybrid between document databases like Mongo and relational ones like Postgres.

22:33 So yeah, it's cool to see innovation there for sure.

22:35 - Outside of Mongo, seeing some innovation on the SQL side or the relational side is nice.

22:42 We'll see if it's really a 10X improvement.

22:45 But yeah, we can't just stick around for nothing.

22:47 I did actually try to play with it 'cause I'm like, I wanna play with this 'cause it's got Python bindings, but I couldn't get it to install on my Mac.

22:54 So, yeah.

22:55 - Yeah, well, what you have to suffer for being out on the cutting edge, Brian.

23:00 Price you pay.

23:01 - Yep.

23:02 - All right, so this last one is gonna be just a quick roundup of some stuff.

23:05 maybe this combo will help some folks.

23:08 This guy, Wacwas Yonas, worked for a software, sorry, healthcare startup in the US.

23:16 And he wrote this cool blog post called 16 Python Libraries That Helped a Healthcare Startup Grow.

23:22 - Oh, neat.

23:23 - Yeah, so it's just like a paragraph or two about different packages or even modules that they use to kind of solve some problem within their startup.

23:32 So we have Paramiko, which lets you basically issue commands over SSH to other servers.

23:39 So like on my computer, I could like use Python and talk over SSH to run processes or copy files, stuff between servers, anything I can SSH to, that's pretty cool.

23:51 The built-in CSV module, you know, that's always good for parsing CSV files, really nice.

23:57 You mentioned SQLAlchemy, so they use SQLAlchemy as well.

24:00 requests and beautiful soup for APIs and web scraping.

24:04 I like to say that every website is an API, even if it doesn't know it.

24:09 So if it doesn't have an API, it has data and you just have to do the right request to it.

24:14 Now it's an API.

24:15 Here's one for you, Brian, test scenarios, which is a PyUnit extension for dependency injection.

24:21 So that's kind of cool.

24:23 Dependency injection is not that huge of a thing that people make use of in Python, but it has its place, I guess.

24:30 HL7, so a simple library for parsing health level seven files into Python objects.

24:38 That's cool, I suppose doing that yourself probably is not fun, so having a library that does it is great.

24:44 Python phone numbers, which is a library for parsing, formatting, and validating international phone numbers.

24:50 That's pretty sweet, it's based on a Google library, it's like a Python port of it.

24:53 GEvent for networking and asynchronous code.

24:57 Python-DateUtil for parsing date times.

25:00 Like, anytime I have to work with date times, I'm like, okay, this project now requires Python-DateUtil because parsing date time sucks without it, right?

25:10 But this one you just say parse, and like that right answer just seems to always come out.

25:13 It's great.

25:14 So matplotlib for graphs, PythonMagic.

25:17 Have you heard of PythonMagic?

25:18 - I don't know.

25:19 - I hadn't, and so what you can do is you can give it a file, some random binary file or even text file, and it'll tell you what file type it is.

25:27 - Oh, neat.

25:28 - So, like, suppose somebody gives you an image and they've named it .jpg, but it's really a PNG.

25:33 Like, you could feed it something, to something like Python Magic, it would say PNG.

25:38 So you can give it, like, PDFs or zip files and it'll tell you, like, what file it is.

25:43 - Okay, but Magic?

25:45 That seems like a bad name for it, but, yeah.

25:47 - It's Python Magic.

25:48 Well, I mean, the reason is it's based on a thing called libMagic.

25:51 But yeah, it's just like, the criticism just transitively follows to live magic, I guess.

25:56 (laughing)

25:58 All right, another one, Django, obviously that doesn't need a lot of introduction, but yeah, they must use Django.

26:03 Bodo, which is the API for interacting with all things AWS.

26:07 So if you're doing anything with that, that's super cool.

26:09 Like I use Bodo for automatic transcoding, like re-encoding in different formats, videos from my courses, or downloading, say, MP3s to a caching server, stuff like that.

26:21 And then finally, Mailgun for sending email, and Twilio's Python API for sending, both of those for sending reminders, one over email, one over text.

26:29 But that's kind of a cool combo of things, right?

26:32 - Mailgun's just a great name.

26:33 We've been starting to use Paramiko at work too, but for the SSH features, it's good.

26:39 - Oh yeah, nice.

26:40 Yeah, I feel like this, you know, you don't necessarily have to pick what he picked, but it's cool to see just how those all fit together and think of like, well, what packages run this company, basically.

26:51 - Articles like this are neat, of different people solving different problems.

26:54 What are they using from Python?

26:56 - Yeah, exactly.

26:57 - Like it.

26:58 - All right, so that's it for our main items.

27:00 Got any extras you want to share with us?

27:02 - No, do you?

27:03 - I thought I didn't, but I'm going to share one thing with you all.

27:05 I just recorded an episode with the United States Digital Service for Talk Python.

27:12 - Okay, what is that?

27:13 - I hadn't heard of that either, but this is like a little stealth startup type thing inside the government.

27:19 President Obama set it up, And it was basically the tech team brought in to solve the healthcare.gov crashing problems, like that whole big fail to launch for the Obamacare stuff.

27:29 There was a group of people brought in to fix it, and then they did, they're like, well, why can't we just apply this to all the other broken things in the government?

27:36 So it's a really cool service where you can go do like a three month tour of duty at the US Digital Service and not even have to leave your job, just take an unpaid leave to go fix something in the government or whatever.

27:48 It's pretty cool.

27:49 I have an episode coming out, but I hadn't heard of it and I thought that was kind of cool, so I thought I'd throw it out there.

27:53 - Yeah, it is neat.

27:54 - It is for sure.

27:56 I have a, it's almost a joke, it's not exactly a joke, it's more maybe mocking, but how can you tell the difference between machine learning and AI, Brian?

28:07 - I don't know.

28:08 - If it's written in Python, it's probably machine learning.

28:11 If it's written in PowerPoint, it's probably AI.

28:14 (laughing)

28:16 - Written in PowerPoint?

28:17 - Like as in, it's just like a presentation with ideas, but no code and no implementation yet?

28:22 - Ah, okay, yeah, okay, got it.

28:25 - So basically, if it's real, it's machine learning.

28:27 If it's like, we're gonna use magic, computer magic to solve this problem, it's AI and it's in PowerPoint.

28:34 - That's funny.

28:35 I have a question for you.

28:36 It's not a joke, but way back in the dark ages when I was going to college, all the AI work was done in like Lisp.

28:43 - Yes, it was.

28:44 - Are there still people doing AI in Lisp or is that not a thing anymore?

28:48 Do you know?

28:49 - I think people are still doing it, but I don't think the neural network people have stayed there, right?

28:55 I think the neural network people mostly have moved to Python and things like TensorFlow and the other GPU-based things.

29:02 But I'm sure that there's like different kinds of AI.

29:07 'Cause you're right, it was all, you had to be a Lisp programmer if you wanted to do anything with AI.

29:12 And AI was always this like amorphous, weird thing.

29:15 Like you don't really know what it is, but probably if we can like set up a blind chat with it over IRC, then it might seem like it's alive and then it'll be AI, right?

29:24 Like that, you know, the whole Turing test and all that stuff.

29:28 And now it's like, that's cute.

29:30 Car, drive here.

29:32 (laughing)

29:34 That's with Python and like TensorFlow and the Lisp one that's doing the chat, right?

29:42 Like I feel like that's kind of where it is, but I'm sure people are still doing cool stuff with Lisp that I don't know or really want to read the code for.

29:49 Okay, I'm glad there's probably not any Lisp programmers that listen to this.

29:52 No, but we're probably going to be posted in a negative way on some Lisp forum.

29:55 Sorry about that.

29:56 Sorry.

29:57 All right, well, thanks for being here, Brian, and thanks for sharing everything.

30:01 Thank you.

30:02 You bet.

30:03 Bye, everyone.

30:04 Bye.

30:05 Thank you for listening to Python Bytes.

30:06 Follow the show on Twitter via @PythonBytes.

30:07 That's Python Bytes as in B-Y-T-E-S.

30:10 And get the full show notes at PythonBytes.fm.

30:13 If you have a news item you want featured, just visit PythonBytes.fm and send it our way.

30:18 We're always on the lookout for sharing something cool.

30:20 On behalf of myself and Brian Okken, this is Michael Kennedy.

30:23 Thank you for listening and sharing this podcast with your friends and colleagues.

Back to show page