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


Transcript #80: Dan Bader drops by and we found 30 new Python projects

Return to episode page view on github
Recorded on Friday, May 25, 2018.

00: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.

Back to show page