Transcript #80: Dan Bader drops by and we found 30 new Python projects
Return to episode page view on github00:00 Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.
00:05 This is episode 80, recorded May 25th, 2018.
00:09 I'm Michael Kennedy.
00:11 And I'm Brian Okken.
00:12 And Brian, we have a special guest, don't we?
00:13 Yes.
00:14 Hey, hello, Dan Bader.
00:16 Hey, guys. It's me, Dan. Good to be back on the show.
00:19 And it's always so nice to hear you do this intro live, Mike.
00:23 Thank you.
00:24 It's not, it's so unreal. It's like, and you sound so smooth. I love it.
00:27 I guess I've done it 80 times now.
00:29 Maybe 82 or 83 for the few times I screwed up with the wrong date.
00:34 Well, thank you. And it's great to have you.
00:36 For those of you who don't know Dan, Dan's well known from RealPython and dbeta.org and a bunch of Python goodness.
00:44 Before we get to the show, I want to say thank you to DigitalOcean.
00:47 So they're sponsoring this episode and a number of them coming up, as well as the actual infrastructure delivering all this technology to you.
00:55 So pythonbytes.fm/digitalization, get a $100 credit for new users.
01:00 Pretty awesome.
01:01 Brian, I feel like there's a few themes that we touch on frequently in this podcast.
01:06 Yeah, I guess that we do.
01:08 And one of them is packaging.
01:10 So we've talked about packaging a few times.
01:12 And the Python Packaging Authority has their tutorial on how to package Python packages.
01:21 And it used to be out of date, but now they've recently revamped it and rewritten it.
01:26 And it's very user-friendly now.
01:29 It's a short little walkthrough of how to set up a package and push it to both the test server and then to the full Python Package Index, PYPI.
01:39 Yeah, I got that out.
01:41 One of the things that's kind of fun to note that I noted is the readme example is in Markdown.
01:47 And that's cool.
01:49 And that's a new feature, right?
01:50 That's one of the things of them switching to Warehouse and the big release of the new pypi.org.
01:55 I think I remember the old examples for setup.py.
01:59 They were either too small.
02:01 They didn't include everything they needed.
02:03 Or they were too big and kind of scary.
02:05 And now this is a medium-sized example setup.py that is actually pretty nice.
02:11 You know, I read through it and it looked like the same tool set that I used to push up.
02:15 So I think it's pretty accurate now.
02:17 So that's nice.
02:18 Nice.
02:18 You didn't feel like you were super out of date.
02:19 You're like, why am I not using this or using that?
02:21 Yeah, because when I learned how to do it the first time, I think I read both the old tutorial and then like four or five or six different blog articles on how to do it now.
02:31 I don't know how to do it now because it changed.
02:33 But now this is all up to date.
02:35 So it's good.
02:36 Very nice.
02:36 Dan, did you do much packaging?
02:38 Yeah.
02:39 So I run a couple of open source projects and I always felt like, you know, exactly like what you were just saying, Brian, where I had to combine a couple of tutorials just to get it to work.
02:48 And it never really felt all that straightforward.
02:50 And so I think this is a pretty nice and pretty minimal write-up.
02:54 I like that.
02:55 And I'm surprised that the recommendation now seems to be to use Markdown-based readme files.
03:00 Like I really like Markdown.
03:01 I really warmed up to restructured text so much.
03:04 And it's definitely cool that they're supporting that now.
03:07 That's awesome.
03:07 I think restructured text maybe predated Markdown.
03:09 And it was, you know, it was the thing when the original PyPI was created.
03:15 And then just like that thing was, you know, calcified.
03:18 And I go, let's not touch this.
03:20 Let's just not mess with this.
03:21 Let's just keep it running.
03:22 Right.
03:24 It's really good to see that getting a fresh update.
03:26 Also, Brian, you talk about Twine in here.
03:28 What's the story with Twine?
03:29 I don't know if there's a story with it.
03:31 That's just the tool you use to push things up to PyPI.
03:36 Oh, nice.
03:36 I probably used it and didn't realize it or forgot that I used it.
03:39 Maybe there's another way, but that's what I've always used.
03:41 Yeah, cool.
03:42 Actually, there's a cool project to throw in the mix here.
03:45 It's called FLIT, F-L-I-T.
03:47 And it's, well, what's a good way to describe it?
03:51 It's sort of a minimal, simple way to put Python packages on PyPI.
03:56 So they kind of completely done away with the setup.py.
03:59 Instead, you write an init file where you just put in, you know, your author name and your
04:03 homepage or whatever.
04:04 And it generates all of that other stuff.
04:06 And it might not be really necessary anymore now.
04:09 You know, if you have like a really sort of short and sweet tutorial, like the one that
04:13 we were just talking about.
04:14 But it is super, super beginner friendly, this FLIT thing.
04:18 Oh, that's cool.
04:20 Nice.
04:20 It's F-L-I-T?
04:21 It's F-L-I-T.
04:22 Yeah.
04:22 Awesome.
04:23 All right.
04:23 And so that's probably on GitHub, isn't it, Dan?
04:25 Yes, it is.
04:26 Nice transition.
04:28 So the next thing you have for us is an async library for calling GitHub's API.
04:32 Yeah.
04:33 Yeah.
04:33 So I was going to talk about this thing called GidgetHub, which is, yeah, a Python wrapper
04:39 around the GitHub API.
04:40 So basically allows you to talk to GitHub and you can interact with all the different
04:45 content types that GitHub provides or exposes.
04:49 So you can add and modify issues.
04:51 You can, you know, create pull requests.
04:53 You can add comments to pull requests.
04:55 You can download all the comments to pull requests and all that stuff.
04:58 So the other thing it does, it allows you to parse GitHub's web hooks.
05:03 So you can configure GitHub so that every time a new pull request or something like that is
05:08 created, it sends, essentially calls a, an API callback on the web, like on some URL that
05:14 you give it.
05:15 And so what you can use GidgetHub for is a really nice and clean way to write GitHub bots with
05:21 Python, essentially.
05:23 And it's just a really cool library.
05:26 And I think it's API super well designed.
05:28 So we were recently using it on a workshop that we did in Vancouver, like Marietta, who's a
05:34 CPython core developer, did it.
05:36 And I served T8 and was running around helping her.
05:38 And so she wrote a really good, cool tutorial about how to use GidgetHub.
05:42 I think it's just a really nice example from modern Python web API library.
05:48 It looks really great.
05:49 And so you just go over here and you say like, I'd like to open a PR.
05:52 So you get some PR data, then you say await GitHub.post.
05:57 And, you know, all your, all your methods are async.
06:01 Yeah, definitely nice and scalable.
06:03 Well, it looks like it's based on AIO HTTP, which is a really nice client side, async enabled
06:10 REST library.
06:12 What's really, really cool about this GidgetHub thing is that it's actually abstracting away
06:16 from the actual backend, I want to say, you know, what the actual library you use to talk
06:22 to or to handle those web requests, whether they're incoming or outbound.
06:26 So I just learned that this is referred to as a sans IO library.
06:31 So basically, it's just a protocol implementation that doesn't really specify how the IO is
06:37 performed.
06:37 So it allows you to plug in different backends, different concrete implementations that make
06:45 this thing super reusable.
06:47 Because, well, if there's a new async library, you know, flavor of the day kind of thing in
06:51 a couple of months, then, well, you can probably just plug that in and work with that.
06:53 So it's kind of nice.
06:55 It's really well-designed.
06:56 Yeah, so you can use AIO HTTP.
06:58 You can use Tornado.
06:59 Yep.
06:59 Yeah, I was recently, we covered it on the show, this thing called unsync instead of async,
07:05 U-N-sync.
07:07 And it's a different implementation with a different event loop thing.
07:12 Maybe you could use that here as well.
07:14 That's pretty awesome.
07:16 I like it.
07:17 Nice pick.
07:18 Nice, yeah.
07:18 It's nice to use.
07:19 Super friendly.
07:20 Yeah.
07:21 Brian, do you guys do any GitHub automation?
07:22 You just started with Git at your organization, right?
07:25 We're doing a, we've got a private server, so we don't go through GitHub for work stuff.
07:30 But I use GitHub all the time.
07:32 Yeah, of course.
07:32 Locally.
07:33 Yeah, nice.
07:34 Yeah, I feel like this kind of automation is more relevant and useful when either you're
07:40 building an app or you have like a big organization and you want to automate your company's interaction
07:46 with GitHub, right?
07:47 Like me as an individual, I just don't really see a massive use of this for me because I just
07:53 don't do that much different other than what I personally do with GitHub.
07:55 But I think it looks really cool and I love the way it works.
07:59 Some uses where you could often use like Travis or something like that.
08:02 Like if you were watching different, if your project depended on a bunch of dependencies
08:07 and you wanted to, when, if they changed, pull them in and run your build, repackage everything
08:12 and run some tests against it, you could do that locally with something like this.
08:16 Yeah, that's pretty cool.
08:16 Or you have that one person on your team that often breaks the build.
08:20 So you run extra tests when you see them do a check-in.
08:22 A harassment bot that just goes in and be careful.
08:28 Yeah, I think they use it on CPython.
08:32 You know, they've moved all of the source for that to GitHub.
08:35 And I think now they, they have run a couple of bots that I think one of the things they
08:39 do is, so when you contribute to CPython, they need you to sign an agreement that you're
08:44 giving up the rights essentially for your contributions.
08:47 And so they, I think Marietta actually runs that bot.
08:49 I might be mistaken here, but it's a bot that checks if that committer or that contributor
08:54 already has given their permission.
08:55 And if they didn't yet, then it's just going to ask them to do it.
08:58 And it sets a flag on the PR.
08:59 So it's, it's super cool that way when you can sort of code up a workflow like that, that
09:04 you never have to worry about again in your life because it's a hundred percent automated.
09:08 So I think it's, it's great for that sort of use case.
09:11 That is a great use case.
09:12 Yeah, that's really, really awesome.
09:13 Okay.
09:13 So the next one that I wanted to talk about actually was recommended to me, recommended
09:19 to me and Brian because of some stuff that I had recently been doing.
09:24 I think, you know, we were all at PyCon.
09:25 I think maybe we're all at the same, same meeting or get together.
09:29 And I had just decided like, that's it.
09:31 I'm writing a Python system D daemon that will synchronize all of my course data geo, basically
09:40 across the various servers in the different locations.
09:43 So there's like eight or nine places in the world that serve up course content based on
09:47 where you are.
09:48 And so I wrote a service in Python that is a system D service that will basically keep all
09:55 those places in sync.
09:57 Nothing too impressive, but it's kind of cool.
09:58 You can do that in Python.
09:59 So we got pointed at this thing called PySystemD and this was actually presented at PyCon 2018.
10:05 So there's a whole talk and you can go learn about what is system D, why you care about it,
10:10 how is it used.
10:10 But the short version is this PySystemD is an API into the system D whole API part of Linux.
10:19 So you can create things that are daemons.
10:23 You can say like, I would like to have my Python web app start and I want it to start in this
10:28 way, but I want it to not start before my MongoDB server starts.
10:33 I don't want MongoDB to start in that way.
10:35 You can configure these things to all just happen on boot or on demand, things like that.
10:39 So I think this is really pretty awesome.
10:42 So if anyone's doing any sort of automation with system D and they're already using Python,
10:46 here's a really great way to just like, you know, import this library and just ask, hey,
10:51 let's load up this unit, which is like one of these services and ask, is it running?
10:55 Let's start it.
10:57 Let's create a new one.
10:58 All sorts of stuff.
10:59 Really, really nice.
10:59 That's cool.
11:00 Yeah.
11:01 And also kind of cool how this was built.
11:03 So this is like based on Cython.
11:05 So it's a wrapper and the C library that actually talks to system D, right?
11:09 Yeah, I think so.
11:10 And actually, I'm going to cover in the next episode, this sort of article on using Cython
11:17 as a way for a simple way to wrap C APIs.
11:21 That's what surprised me.
11:22 Yeah.
11:23 I think that's why, because it doesn't seem like a performance thing, right?
11:26 I think it's like, let's use Cython to get a really simple API into the C layer as well
11:31 as build the integration back into Python.
11:33 So pretty cool.
11:34 Yeah, nice.
11:35 I'd love to see that because I'm surprised they're using Cython for that and not just,
11:38 you know, C types or CFFI or something like that.
11:40 But I'm sure there's a reason for that.
11:43 The other thing I wanted to point out about this is this was created and presented by Alvaro
11:47 Liva.
11:48 Sorry if I'm mispronouncing your last name there.
11:50 But he's a production engineer at Instagram and Facebook.
11:55 And so, you know, they have a few servers to manage.
11:57 And this is probably pretty polished and comes from a pretty well, well-informed space if
12:03 it's being used there, right?
12:04 Pretty sweet.
12:05 All right.
12:06 So before we get to the next one, let me tell you guys about DigitalOcean.
12:11 So DigitalOcean is definitely one of the best hosting frameworks or places out there.
12:19 You can go up, create a server, super easy, create a load balancer.
12:24 You can create floating APIs that allow you to switch between various machines with perceived
12:30 zero downtime, all sorts of stuff.
12:32 All of our code and our sites, our delivery, all that stuff is running on top of it.
12:37 It has been for a long time and it's been working great.
12:40 So like I said, if you're thinking about running servers and you want to do it affordably, high
12:45 performance with lots of control, then go to pythonbytes.fm/DigitalOcean.
12:50 If you're a new user, you'll get $100 credit.
12:53 And, you know, check out what they have.
12:56 It takes about 60 seconds to set up a new server and you'll be SSH'd in and doing all sorts of
13:00 good stuff.
13:01 Maybe you could even use PySystemD to like automate some cool stuff on it afterwards.
13:05 So check them out.
13:07 It helps support the show.
13:08 And it's definitely a good product worth checking out.
13:10 Speaking of products, Brian, you're excited about one.
13:13 Oh, an update one, right?
13:14 Yeah, I am.
13:15 I usually, for a while, I was running the latest or the last 2017 release of PyCharm.
13:24 But I don't know how recent this was, but not too long ago, we had the early access program
13:31 build one of 2018.2 is out for PyCharm.
13:36 And the really exciting bit, and we got notified by this from the Bruno Oliveira, who goes by
13:43 Nicodermis on Twitter, but it supports a whole bunch of new pytest features.
13:48 And I'm kind of a pytest kind of nut.
13:53 So the things that I'm really excited about...
13:55 You could say you wrote the book on it.
13:56 Yeah.
13:57 Well, you could, because I did.
14:00 Anyway, a couple of the features that I was really waiting for is PyCharm's really, being
14:06 an IDE, has a lot of, like, what do you call that?
14:09 IntelliSense or something?
14:10 Yeah, Autocomplete IntelliSense.
14:11 Yeah.
14:12 Autocomplete.
14:12 That didn't work for fixtures to a test.
14:16 So if your test was using fixtures and you was returning an object or a function or something,
14:22 and you were trying to call that, you didn't have all of those cool autocomplete features,
14:27 those are now in for fixtures of tests.
14:30 And that's really cool.
14:32 But the thing that I'm really excited about is parameterization now works seamlessly within
14:39 PyCharm.
14:39 So if you've got a test that is parameterized so that you've got, like, several, or in my
14:45 case, sometimes dozens of different parameter sets that are run through the same test, you
14:51 could always run that through, run all of those parameterizations in PyCharm.
14:55 And that was wonderful.
14:56 If you wanted to rerun one or rerun the failing ones, it would just rerun all of them.
15:01 I see.
15:02 It treated like a whole method in the decorator bit that had, here's all the variations.
15:06 That was just like a thing that it would just rerun, right?
15:08 Yeah.
15:09 So now you can run a test.
15:10 And then in the left sidebar, you can right click on one of them and rerun just one of the
15:16 parameterizations.
15:17 Or you can, like, for instance, if like only two or three or some of them failed, when you
15:23 rerun failures, it only runs the parameterizations that failed.
15:26 And this is a huge time saver for me.
15:29 So I'm really excited about it.
15:30 Yeah, that's nice.
15:31 I use that feature a lot where I just say rerun the failed tests.
15:33 For people that are like really, and may not be too much of an issue for people that are
15:37 running really quick tests, but a lot of my tests talk to hardware.
15:42 So they're not really that fast.
15:44 So this will save me like an hour a day, I'm sure.
15:47 That's awesome.
15:48 Very, very cool.
15:49 Dan, do you use pytest?
15:50 Yeah, I do.
15:51 Yeah, I actually just, you know, used it.
15:54 I rewrote the backend for realpython.com.
15:57 So we've got pytest powered tests and integration tests for that.
16:00 And yeah, it's just been a joy to use, like especially the parameterization stuff.
16:03 It's just so nice when you can reuse a lot of test code.
16:06 You don't have to like copy paste it around so much.
16:08 So Dan, one thing I was going to cover, but you put it in here before, before I could get
16:13 to it.
16:13 So you're faster is basically why is installing Python 3.6 so hard and so sort of confusing,
16:21 right?
16:21 Like you talked about this workshop that you recently did and I've thrown this out on Twitter
16:26 and people sometimes tell me, oh, it's not hard.
16:28 It's super easy.
16:29 You do this, but then you, if you actually go teach a workshop to beginners, you're like,
16:33 why are those four people over there not ready yet?
16:36 Like it's been 10 minutes.
16:36 What could they have possibly been doing?
16:38 And it's because it's like, there's all these edge cases, right?
16:41 It's one of these things where in theory it's easy and it's not a problem that you really
16:45 run into when you've, you know, have a little bit more experience under your belt.
16:48 But for people getting into Python, it is definitely a barrier.
16:52 And we were taught, teaching this, this workshop.
16:56 So Mariada was teaching it and I was just running around kind of, you know, supporting people.
17:00 And for some people we spend almost like two hours to get them to a working Python 3.6 install.
17:05 That's insane.
17:06 And, you know, there were some really, like you hit all of these interesting, but obviously
17:10 kind of frustrating edge cases.
17:12 Like some people were running, they were running a Windows host and then they were also running
17:17 the Linux subsystem for Windows.
17:18 So now you can, you know, can essentially boot up a VM that is integrated into Windows and it
17:23 boots Ubuntu or Debian or some other Linux, the Linux distribution, I think.
17:26 I think it defaults to Ubuntu.
17:28 I'm not sure.
17:29 I think it's Ubuntu as well.
17:29 Yeah, that's nice.
17:30 So basically you have this like really tightly integrated Linux environment that you can just
17:34 work from, from your Windows host environment.
17:37 The problem is that people maybe accidentally installed Python in the Linux environment and
17:44 they try and access it from the Windows environment because it's a little bit unclear if you're a
17:48 beginner, like what actually the difference is, you know, between these like two different
17:51 terminal windows.
17:52 Right.
17:52 And you also might open PowerShell, which is like a third still.
17:55 Exactly.
17:55 You know, things like that.
17:56 And then you have like your paths set in different ways.
17:59 And other issues were that.
18:00 So the previous long term release of Ubuntu, I think it was 1604.
18:05 So it doesn't ship with Python 3.6.
18:08 And so for this tutorial, we specifically needed 3.6.
18:11 And so, you know, people started Googling and just copying a bunch of stuff from Stack Overflow
18:16 to install Python 3.6 on Ubuntu.
18:18 Well, it turns out there's like two different PPAs.
18:21 So like third party packages that you can install this from.
18:24 And one of them is broken or was broken during that time.
18:28 So, you know, people would have Python 3, but it had broken SSL and no pip.
18:33 So it was essentially useless for the purposes of this tutorial.
18:38 And it's kind of crazy just into, you know, all of the edge cases you can encounter with this.
18:42 And I think it's really something we need to keep in mind.
18:45 You know, when we're teaching beginners or kind of telling people how awesome Python is, it can be a pretty jarring experience.
18:50 If you try to set it up and you're just sitting there.
18:52 Well, okay.
18:53 I just wanted to try this.
18:54 It doesn't work.
18:55 For sure.
18:55 Well, so you guys are writing this up at realpython.com slash installing dash Python as sort of an ongoing guide, right?
19:01 Yeah.
19:01 So we decided to do something about it.
19:04 So shout out to John Sturtz and Jim Anderson.
19:07 And we got together and put together this sort of the ultimate Python 3 install guide.
19:13 And we're going to keep it maintained.
19:15 And it tells you how to install Python in very specific steps in all kinds of different configurations.
19:21 So Linux, macOS, different Linux distributions, how to compile it from source.
19:26 And we're just going to add to it and, you know, improve it based on feedback.
19:29 And hopefully that's something we can just use in the next workshop and then tell people what to do.
19:33 I hope that when you refer to Python 2 in there to say, oh, don't do Python 2, do Python 3, that you call it legacy Python.
19:39 So just throw that in there.
19:41 I'm still trying to make that a thing.
19:43 I don't think we even mentioned it in that particular piece.
19:45 This is Python 3 only.
19:47 And then my Mac is about ready for a format because, you know, it's time.
19:51 It's been like, it's been bad.
19:54 So anyway, it's about time for format.
19:56 What would you, like, after going through this whole experience, we could do homebrew.
20:00 You could do anaconda.
20:01 You could do download the PKG file from python.org, et cetera, et cetera.
20:05 What would you do if you were setting up a new computer?
20:08 Like on Mac?
20:09 Yeah, on Mac.
20:10 Yeah.
20:10 So I'm a big homebrew fan because it makes upgrading very easy.
20:16 And it's just something that I personally use for other purposes as well.
20:22 So one of the things I usually do, you know, when I set up a new macOS development environment, I upgrade bash.
20:28 So I use bash as my preferred shell and macOS ships with a super old version of bash.
20:33 And with homebrew, it's super easy just to get the latest version of bash.
20:37 And then, you know, a bunch of other command line tools that I use.
20:40 And so I just use that to install Python as well.
20:43 So I kind of like that.
20:44 I mean, Python.org version, it works as well.
20:47 But if you're going to use homebrew anyway, which I think you want to use if you're on a Mac, then I would just keep everything in homebrew.
20:54 Yeah, that's what I'm thinking as well.
20:55 It makes a lot of sense.
20:56 Awesome.
20:57 Both on Mac and on Windows.
20:59 I just always just use the python.org installer.
21:02 Yeah, that's what I've been doing as well.
21:04 But with homebrew, you just type upgrade, you know, and you can have different versions and stuff.
21:09 I don't know.
21:09 I'm thinking of playing with homebrew next time.
21:11 But anyway, very cool.
21:12 Yeah, there's also pyenv.
21:13 So that's sort of the other.
21:15 If you're going to go with homebrew, you could just go, you know, brew installed Python 3.
21:19 And you get sort of one, the latest version of Python 3.
21:22 Or you could install something called pyenv first.
21:26 And then that's another layer of abstraction on top that allows you to switch between different versions of Python, including different versions of Python 3.
21:35 So you can just go, you know, I want Python 3.5 for testing.
21:38 And I'm going to run all of my latest stuff.
21:41 On the Python 3.7 beta version or something like that.
21:44 So that's super nice.
21:45 It's maybe a little bit more advanced.
21:46 So I feel like you're probably there, Mike.
21:48 But for a complete beginner, I'm not sure if I would recommend it.
21:50 Yeah, yeah, yeah.
21:51 Sure, of course.
21:51 I don't think I'm there.
21:52 I've tried it several times and it hasn't worked for me.
21:55 I don't want to go too much longer.
21:57 But what I've started doing on my servers is when I SSH in, part of my shell profile automatically configures the main virtual environment for whatever that purpose of that server is.
22:10 So when I SSH in, I'm actually running just a virtual environment just by default.
22:15 And I was considering doing even that for my Mac and just changing the shell back so it doesn't do something weird.
22:20 I don't know.
22:21 I may get myself into trouble with that, but it's been working so far.
22:23 All right.
22:24 So I want to round this out with just a short little list of 30 amazing Python projects from 2018.
22:31 So there's this thing called MyBridge and MyBridge is a little bit like a readability or a little bit like a flipboard where they kind of keep track of different articles.
22:41 But it's more technology focused than just say Flipboard or Zite, those types of things.
22:44 And the article starts with the MyBridge AI evaluates the quality by considering popularity, engagement, recency, and so on.
22:55 So apparently they have this AI, which is kind of cool, that goes through and looks at human interaction with all these articles, these tech articles in the Python space,
23:02 and then says, here's the articles that our community sort of interacted with that they really liked, or packages actually in this case.
23:10 So let me just give you a quick rundown on these just to kind of give you all some exposure and like, oh, hey, I hadn't heard of that package.
23:18 That's pretty cool.
23:19 And then you guys can jump in and give me some thoughts.
23:21 So I'll go from the least popular to the most popular.
23:25 So number 30 is PDF tab extract, which is a set of tools for getting tables out of PDF documents, which is pretty cool.
23:33 And data mining on scan documents, pretty sweet.
23:35 There's number 28 is surprise, which is a scikit learn extension for building and analyzing a building a recommender system.
23:46 So you can like say, you might also like this, which is kind of cool.
23:49 Number 27, we won't do all of them.
23:51 That's why I'm skipping number 29.
23:53 Number 27 is eel, which is basically a simple equivalent of the Python's version of an Electron JS system.
24:03 What do you guys think of that?
24:03 How have we not covered that already?
24:06 I think we might have mentioned it because we have been on a, I think we've covered it, but there's two variations.
24:11 And the sort of story that seems to go along with this is like, it's a simple library.
24:16 It's not really like fully.
24:17 There's my understanding that you can build simple apps, but not like full on massive apps.
24:22 But if you could build full on massive apps, I'd be all over this.
24:25 That's awesome.
24:26 Number 25, clairvoyant, a Python program that identifies and monitors historical cues for short, short term stock movement and stuff.
24:37 So I don't do really any stock trading.
24:40 I mean, I put money into mutual funds, so I don't really care that much about it.
24:43 But the reason I bring this up is Python actually is pretty involved in the whole stock trading automation and real time stuff.
24:51 There's actually a really good documentary called The Wall Street Code that goes into all these programmers that are building like AIs and stuff in Python.
24:58 And it's pretty cool.
24:59 So it's free on YouTube.
25:00 Nice.
25:00 Yeah.
25:01 Brian, are you a fan of Mr. Robot or Dan?
25:03 Either you guys?
25:04 Yeah, I was just going to say.
25:05 No?
25:06 No.
25:06 Oh, man.
25:07 Dan?
25:07 I like it.
25:08 Yeah.
25:08 Good show.
25:09 I think it went a little weird in episode two.
25:11 I was sorry, season two.
25:12 But like the first year, I was just like blown away.
25:14 So there's this thing called F Society, which is a hacking tools pack for penetration testing in Python, which of course, Python is very big in the cybersecurity space.
25:24 You might, if you want to like check your own stuff, run some of these tools against your things before someone else does.
25:31 We talked about Kenneth Wright's last time.
25:32 And number 18 was Maya, date time for humans.
25:36 Better exceptions.
25:37 I think we covered that as well.
25:38 16, API star, a really cool, expressive Python 3, 5 based API from Tom Christie.
25:47 Same guy that does Django rest framework.
25:48 But this is like the re-envisioned Python 3 version, which is cool.
25:52 Micro Python, very awesome for little projects.
25:55 Spacey, industrial strength.
25:57 Natural language processor is number six.
25:59 Number two was PyTorch for machine learning.
26:02 That seems to be sort of becoming one of the main machine learning libraries.
26:06 Number one, home assistant for open source home automation.
26:10 Very cool.
26:10 I keep dreaming of like creating some IoT thing with MicroPython and then plugging it into home assistant.
26:16 But I just have to figure out what that thing is going to be.
26:19 It's a solution looking for a problem, right?
26:23 It's a good solution, I think.
26:25 Yeah, yeah, I think so.
26:27 It's a good solution if I could just find a problem to like apply it to.
26:31 Those that I read off there, are those surprising?
26:34 Any of those like super interesting to you guys?
26:35 I'm a huge fan of MicroPython.
26:36 So I just learned a little bit more about it.
26:39 And so it's basically this like super small and lean re-implementation of Python 3, I guess,
26:46 that runs on these like super low power, low computational power microcontrollers.
26:51 And it's, I mean, it's just so cool to be running Python on tiny, tiny machines that have very little RAM.
26:58 And, you know, we're talking kilobytes and stuff.
27:00 And it's just insane that you can program this with Python.
27:03 Yeah, yeah.
27:03 So cool.
27:04 Yeah, and you got one of those little in your goodie bag at PyCon, right?
27:08 They did like a video review of that on YouTube.
27:11 And I was just, you know, all giddy about it, just playing with this thing.
27:14 It just plugs into your USB and you can, you know, start running Python on this thing.
27:18 That's a really good implementation they did.
27:20 Brian, how about you?
27:21 Yeah, I guess I'd have to second that.
27:23 MicroPython is awesome.
27:24 And a bunch of the Adafruit products run, are able to run it.
27:28 And yeah, it's all fun.
27:31 API store is something I've been meaning to try still.
27:35 I haven't done any projects with it.
27:37 But it looks fun.
27:39 Yeah, it definitely looks fun.
27:39 Quite cool.
27:40 All right.
27:41 There's one final thing I want to cover.
27:42 We had the GDPR stuff come out, basically come into effect at the end of last week.
27:48 So just a quick point to an article from our friend Chris Medina at tryexceptpass.org slash article slash GDPR.
27:56 Sort of a take for developers.
27:58 And if you haven't got your stuff all in line yet, please consider doing so for your own good.
28:04 Pythonbytes.fm is all up and ready.
28:06 So yeah, Dan, you probably had to do the same for real Python, right?
28:10 Yeah, some sleepless nights because it's, well, everything is up for interpretation, right?
28:15 So it's kind of hard to, yeah, just to put it into concrete terms.
28:19 But I mean, it's just been nuts, you know, that now that the deadline for that law to go into effect is passed.
28:25 Like we've seen some services shut down.
28:27 I think like Instapaper is a service that I really, I've been using it for a long time.
28:31 And they just shut down in Europe.
28:34 They say it's temporary, but, you know, who knows?
28:36 Yeah, we'll see.
28:37 It's temporary until it's not.
28:38 But yeah, hopefully they get that figured out.
28:40 But yeah, I saw that.
28:41 That was quite the discussion on Hacker News.
28:43 The other thing I wanted to bring up, which I don't know, this is pretty cool to me.
28:47 I deal with an insane amount of large files.
28:51 And I use Dropbox mostly for that.
28:53 Like to give you a sense, like I have the terabyte plan and it's like sometimes gets too full and I have to clean up my Dropbox storage.
29:00 But my hard drive doesn't really want to sync that much stuff.
29:03 Did you guys know that Dropbox released this thing called Smart Sync?
29:06 Yes.
29:07 And I've been wanting to use it, but it installs a kernel module.
29:10 And so I was like, ah.
29:14 Right.
29:15 Because it's got to get into the file driver.
29:17 Yeah.
29:18 So if people have this problem, Dropbox came out with this thing called Smart Sync that will basically give you and your Explorer and your Open Dialogues and Windows or Mac a view which pretends as if the files are there.
29:30 And as soon as you try to interact with them, even from like the command line, they will automatically download if they're not.
29:36 Which is basically lets you sync nothing but what you interact with, which is really amazing.
29:41 It sounds super cool.
29:42 Like I have a lot of trust in the Dropbox engineering team and like if it works that smoothly, I think it's an amazing feature.
29:49 Sort of been hesitant about enabling it.
29:52 All right.
29:52 When you enable it, you tell us how it goes.
29:53 I'll probably try it out.
29:57 I'll give you guys a report eventually.
29:59 Cool.
30:00 All right.
30:00 Well, I think that's it.
30:01 Unless Brian or Dan, you have extra stuff to share with everyone?
30:03 Yeah.
30:04 Right on.
30:04 Well.
30:04 I think I'm all good.
30:05 Yeah.
30:06 Yeah.
30:06 Great to be back.
30:07 Yeah.
30:08 Definitely.
30:09 Brian, thank you so much.
30:10 And Dan, thanks for dropping in and adding some spice to the mix for our whole podcast here.
30:16 Awesome.
30:17 Thanks, guys.
30:17 Yep.
30:17 Bye, everyone.
30:18 Bye.
30:18 Bye.
30:19 Thank you for listening to Python Bytes.
30:22 Follow the show on Twitter via at Python Bytes.
30:24 That's Python Bytes as in B-Y-T-E-S.
30:27 And get the full show notes at Pythonbytes.fm.
30:31 If you have a news item you want featured, just visit Pythonbytes.fm and send it our way.
30:35 We're always on the lookout for sharing something cool.
30:38 On behalf of myself and Brian Okken, this is Michael Kennedy.
30:41 Thank you for listening and sharing this podcast with your friends and colleagues.