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

#181: It's time to interrogate your Python code

Published Thu, May 14, 2020, recorded Wed, May 6, 2020

Sponsored by Datadog: pythonbytes.fm/datadog


Brian #1: interrogate: checks your code base for missing docstrings

  • Suggested by Herbert Beemster
  • Written and Maintained by Lynn Root, @roguelynn
  • Having docstrings helps you understand code.
  • They can be on methods, functions, classes, and modules, and even packages, if you put a docstring in __init__.py files.
  • I love how docstrings pop up in editors like VS Code & PyCharm do with them. If you hover over a function call, a popup shows up which includes the docstring for the function.
  • Other tools like Sphinx, pydoc, docutils can generate documentation with the help of docstrings.
  • But good is your project at including docstrings?
  • interrogate is a command line tool that checks your code to make sure everything has docstrings. Neato.
  • What’s missing? -vv will tell you which pieces are covered and not.
  • Don’t want to have everything forced to include docstrings? There are options to select what needs a docstring and what doesn’t.
  • Also can be incorporated into tox testing, and CI workflows.

Michael #2: Streamlit: Turn Python Scripts into Beautiful ML Tools

  • via Daniel Hoadley
  • Many folks come to Python from “scripting” angles
  • The gap between that and interactive, high perf SPA web apps is gigantic
  • Streamlit let’s you build these as if they were imperative top-to-bottom code
  • Really neat tricks make callbacks act like blocking methods
  • Use existing data science toolkits

Brian #3: Why You Should Document Your Tests

  • Hynek Schlawack, @hyneck
  • All test_ methods should include a docstring telling you or someone else the what and why of the test.
  • The test name should be descriptive, and the code should be clear. But still, you can get confused in the future.
  • Hynek includes a great example of a simple test that is not obvious what it’s doing because the test is checking for a side effect of an action.
  • “This is quite common in testing: very often, you can’t ask questions directly. Instead you verify certain properties that prove that your code is achieving its goals.”
  • “If you don’t explain what you’re actually testing, you force the reader (possibly future you) to deduce the main intent by looking at all of its properties. This makes it tiring and time-consuming to quickly scan a file for a certain test or to understand what you’ve actually broken if a test starts failing.”
  • Want to make sure all of your test methods have docstrings?
    • interrogate -vv --fail-under 100 --whitelist-regex "test_.*" tests will do the trick.
  • See also: How to write docstrings for tests

Michael #4: HoloViz project

  • HoloViz is a coordinated effort to make browser-based data visualization in Python easier to use, easier to learn, and more powerful.
  • HoloViz provides:
    • High-level tools that make it easier to apply Python plotting libraries to your data.
    • A comprehensive tutorial showing how to use the available tools together to do a wide range of different tasks.
    • A Conda metapackage "holoviz" that makes it simple to install matching versions of libraries that work well together.
    • Sample datasets to work with.
  • Comprised of a bunch of cool independent projects
  • Panel for making apps and dashboards for your plots from any supported plotting library
  • hvPlot to quickly generate interactive plots from your data
  • HoloViews to help you make all of your data instantly visualizable
  • GeoViews to extend HoloViews for geographic data
  • Datashader for rendering even the largest datasets
  • Param to create declarative user-configurable objects
  • Colorcet for perceptually uniform colormaps.

Brian #5: A cool new progress bar for python

  • Rogério Sampaio, @rsalmei
  • project: alive-progress
  • Way cool CLI progress bars with or without spinners
  • Clean coding interface.
  • Fun features and options like sequential framing, scrolling, bouncing, delays, pausing and restarting.
  • Repo README notes:
    • Great animations in the README. (we love this)
    • “To do” list, encourages contributions
    • “Interesting facts”
      • functional style
      • extensive use of closures and generators
      • no dependencies
  • “Changelog highlights”
    • I love this. 1-2 lines of semicolon separated features added per version.

Michael #6: Awesome Panel

  • by Marc Skov Madsen
  • Awesome Panel Project is to share knowledge on how awesome Panel is and can become.
  • A curated list of awesome Panel resources.
  • A gallery of awesome panel applications.
  • This app as a best practice multi page app with a nice layout developed in Panel.
  • Kind of meta as it’s built with Panel. :)
  • Browse the gallery to get a sense of what it can do

Extras:

Michael:

Brian:


Joke:

O’Really book covers

Episode Transcript

Collapse transcript

00:00 Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to

00:03 your earbuds. This is episode 181, recorded May 6, 2020. I'm Michael Kennedy.

00:09 And I am Brian Okken.

00:10 And this episode is brought to you by Datadog. Tell you more about them later.

00:13 Brian, this first item that you picked here, I saw this going around the Twitterverse and I was

00:18 like, oh, that looks really cool. Tell us about it.

00:20 Yes, Interrogate. So it's a new little tool. I think it's kind of new, new to me at least.

00:26 It checks your code base for missing doc strings or the presence of doc strings.

00:31 So it's written and maintained by Linroot. And we were notified by Herbert Beamster,

00:36 suggested it to us. I like doc strings. I don't like them. I don't have a policy of having them

00:42 everywhere, but doc strings can help you understand the code quite a bit. I really love how like a

00:47 function doc string is utilized by VS Code and PyCharm and other editors to do things like if you hover

00:54 over a function, it just pops up a little window with like, you know, what parameters you can send

00:59 to it. But it also sends the doc string, shows the doc string if there is one. There's also other tools

01:04 like Sphinx or PyDoc or DocUtils that can use that amongst other things to generate documentation.

01:10 I don't really use those. I know a lot of people do though. So it's a problem if you've got some

01:16 missing, if you really need to have doc strings someplace and they're missing.

01:19 So interrogate is a command line tool that you can use to check your code to make sure

01:23 everything has a doc string that needs to.

01:26 I think this is great. Yeah, it's super cool. And well done, Lin. Nice work on this one. I think

01:30 this is really nice because if you have a public library, that should be documented, right? That

01:37 should be covered with nice doc strings that give you all sorts of help in your editor, like you

01:43 mentioned. But also if you generate the documentation, you don't want to have just some random empty,

01:49 either completely missing or just the, you know, like the function name and just an empty body or

01:54 whatever it gets generated there. So this is really cool. And I could see if you were doing a package

01:59 that was public, having this part of your CI CD process that if somebody introduces something into,

02:06 like a PR that here's a new function we wrote, like, great. It failed the CI because it doesn't

02:13 have a doc string. That'd be awesome. Yeah. And then there's also some common, there's some common

02:17 like caveats, like, yes, all public functions should have doc strings. But what about like private

02:23 functions and stuff? There's options to be able to tell to turn off things where you, you know,

02:28 might not need a doc string for just an internal helper function or something.

02:32 Yeah, I totally agree. Like if it's not really meant to be included, you know, in the public API,

02:38 then it shouldn't have a doc, it shouldn't necessarily have a doc string.

02:40 Yeah, it can if it helps to understand it, but you don't, maybe you don't need it. So this is nice.

02:45 Yeah, yeah, this is super cool. Well done, Len.

02:48 Yeah, I wanted to mention also there is information on the readme about how to use the tool within talks

02:54 and within CI workflows. So that's helpful.

02:57 Yeah, this one seems like a super easy thing to adopt. If you already have a CI process in place,

03:03 and you're working on something that's public, whether that's public to your people within your

03:09 company, or you know, it's a package that is used by other projects, right? Or it's public as in

03:14 on pypi.org. I still think it makes sense to just document it for whoever's consuming it,

03:19 who's not writing it.

03:20 Yep.

03:20 Very cool. Now, this next one, I've been holding off on talking about for a long time,

03:25 because it's really interesting, but I didn't feel like I was able to do it justice. So the thing I

03:32 want to talk about is Streamlit. With Streamlit, the idea is it allows you to build much simpler

03:39 data science applications and web apps, I guess you would say. So many people come to Python

03:47 from I've got a little bit of computation that I got to do. And so I'm going to write a script that

03:55 does like 10 things, maybe it doesn't even have a function, it just does do x, you know, load data,

04:00 transform data, pivot data, show graph, or something like that, right? Really, really simple. They're not

04:06 like, pro web developers that are like busting out view or react or something like that to build cool

04:11 apps. But they've got this really cool outcome with Python, and they're happy. But at the same time,

04:17 they would like to have this publicly shareable, they maybe want to put it on the internet,

04:21 they want to make a web app out of it. And the gap from I've got 10 lines of code that outputs a graph

04:27 to I have a fully interactive, dynamic, server backed JavaScript front end type of visual website,

04:35 that's a big gap, right?

04:36 Yeah.

04:37 So Streamlit...

04:38 Even for me.

04:39 Yeah, yeah, well, yeah, for me as well. Now for Streamlit, the idea is that you write the code in the

04:46 simple, straightforward style that I talked about, but then it turns it into an interactive

04:51 web application.

04:52 That's neat.

04:53 That sounds neat, right?

04:54 And it does a whole bunch of really interesting tricks to let you continue to write code in this

05:01 simple, straightforward way, and yet interact with like callbacks and stuff. So you might have a

05:06 function that comes along and says, okay, what I need to do is I want to show, I don't know,

05:11 a drop down list in a web app, or a slider bar or something like that. And then you write your code

05:16 that says, get the value from the slider bar. And you might think, okay, well, normally that's wait

05:23 for the user to click on the slider bar. And when there's a change or some kind of callback, and then

05:27 you have some function that runs on the callback and it updates the DOM, right? But this is like

05:31 straightforward procedural code or imperative code that doesn't have any of those ideas in it.

05:37 So what it does is it uses interesting caching on your functions so that if it were to rerun it with

05:43 the same inputs, it gives you the same answer instantly, like LRU cache type of stuff. And then

05:48 if any of those controls on the web page change, it just reruns the whole script. And when you say,

05:53 get me the value from the slider, it says, well, currently the slider is set at this. And if it

05:58 happens to change, it just reruns the entire thing from beginning to end. But because everything's

06:03 cached, it only recomputes the parts that are needed. So you don't have to think about callbacks.

06:09 You don't have to think about user interaction. You just write top to bottom code.

06:12 And here you've got multiple parts of your application that can be changed dynamically

06:16 that just continue to refresh. And it refreshes it by using JavaScript. So it doesn't even reload

06:22 the page. It just looks like parts of the page are dynamic and coming alive.

06:26 Oh, wow. This is neat.

06:27 Yeah. So it's super cool. Basically, if you can write like straightforward, top to bottom

06:32 code that works with like graphing or pandas or something like that, you now can create a single

06:39 page, a spa app. And I don't remember what JavaScript framework it uses. It's like react or view or

06:45 something like that. I think it might be react. Anyway, it's not super relevant, but it does all

06:50 of that work with like hosting it and creating the server callbacks and setting up the JavaScript

06:56 and the UI widgets and all that kind of stuff. And all you do is write basically procedural code.

07:01 One thing that I think is a danger of these types of applications is it's easy to say if you use our

07:07 magic graphing library and our magic UI widgets and our magic, you know, data processing library,

07:14 not a real database, but our magic server database that we create, then it works, right?

07:19 Yeah.

07:19 What I like about this is it doesn't do any of those things. It just says you want to use pandas

07:23 and numpy and plotly or something like that. Use those and then use them in your script. And then

07:31 we just make it this single page app, which is pretty awesome.

07:33 Yeah. That was my question. Is this a hosted thing or can I do it like behind a firewall or

07:38 local thing or do you know?

07:39 Yes. So with Streamlit, you have a couple of options. I haven't done anything myself,

07:46 but you can self host it or they'll host it for you, I believe. And if you, they have this thing

07:52 called four teams, which is like they automatically deploy and manage the apps and you just create them

07:59 and say, here's the code and run it. It's like kind of a platform as a service for Streamlit apps type

08:04 of thing. That's a paid part of what they're doing. But the stuff I described up until then,

08:08 that is free and open source. So it's still pretty, pretty usable. Yeah. So you have to

08:14 basically deploy them yourself, but they talk about how to do it. You know, it's not super hard.

08:19 Okay. Nice.

08:19 Yeah. So I had the, one of the guys Adrian on who is behind this and has also done some other

08:24 interesting technical programming stuff and with self-driving cars and folding at home,

08:30 those types of things on Talk Python just a couple of episodes ago. I don't remember exactly what

08:34 number it was, but I guess 260 ish, something like that. So just check out that episode if people want

08:42 to go much deeper, but this is really cool. If you're writing these imperative, simple little

08:46 scripting apps and you're like, I would really like to share this or make it better. Streamlit's cool.

08:51 Yeah. Nice. Okay.

08:52 I feel like we both have themes for ours. Your theme is continuing with documenting and whatnot. And

08:57 you'll see my theme develop as well.

08:59 This is interesting because I ran across this interrogate second, but after I ran across this,

09:06 an article by Hienic that says why you should document your tests. He makes a lot of good points.

09:14 So I believe, and we have this policy where I work of tests should have doc strings on them to tell you

09:21 kind of what the test is doing and why it's there. There's a lot of reasons that I have never really

09:28 been able to describe clearly because you're, I mean, ideally your test name should be descriptive and

09:33 the code should be clear. So why do you need a doc string? It's not, that's not something that you're

09:38 going to call from an API or anything.

09:40 You probably won't type help function, you know, test function, right?

09:43 Right.

09:44 Probably not.

09:45 And you also don't call it. I mean, like test methods that you run pytest with, pytest calls

09:50 it. You don't call those tests, but you can get confused in the future. And one of the explanations

09:55 is Hienic has a good example where he shows some simple code with a simple test name, but the thing

10:02 he's asserting on doesn't really make sense. And the reason, if you don't know what's going on under

10:07 the hood. And the reason is because tests often are testing for a side effect of an action.

10:13 If you're testing the output of a function, that's obvious. It's kind of obvious of the,

10:19 if I pass in functional tests, if you pass in a certain parameters and you get a certain expected

10:25 output, you can assert against that. But what about actions that have side effects and you need

10:30 to test for those? That might need some more explanation. And he writes, this is quite common

10:36 in testing. Very often you can't ask questions directly. Instead, you verify certain properties

10:42 that prove that your code is achieving its goals by checking side effects and stuff like that.

10:48 It's a short little article and I was just happy to have some of that expressed of why you should

10:54 document. And it might be you that's confused in the future. And then it ties back into the

11:00 interrogate because, so I was just thinking when I was reading about interrogate, I'm like,

11:04 oh, awesome. I really want to put something in place to just make sure all my tests have doc

11:09 strings. And he lists in the article, the exact command line that you need to make sure that all

11:16 just text, make sure that your tests have doc strings and nothing else. So this is cool.

11:22 Yeah. It looks really nice. And I can see how this would lead you down to finding a library that

11:28 searches for or evaluates these. Yeah. So the test example he has here is testing that the hash,

11:34 like creating the same object, the instance of a class twice and taking the hash and making sure

11:40 that those are not the same because he's trying to test that adders is not implementing false on the

11:46 class or something to that effect. Right. So you're like, what the heck is going on with this? Like,

11:51 why would you check the hash of a thing is not equal to the hash of a thing,

11:53 but it's looking like you said, for this sort of like hidden layer that's operating below it. Right.

12:00 Yeah. And then also my reasoning, and I think he brings it up is that, that, often when you're

12:06 looking at a test, it's because you really got to get a release out and one of the tests is failing.

12:12 So you got to go look at the test and figure out what it's testing for and why it's failing.

12:16 And if you don't have it clear why the test is important, you run the risk of, the person at the

12:23 time going, well, I don't even understand what this test does. Maybe it's not important.

12:27 Comment it out.

12:28 Comment it out.

12:29 Passes.

12:30 You don't want that.

12:30 CI is good. We're going home.

12:32 I don't do that, but I've heard it done before. Of course.

12:37 I would never do anything like that, but I can imagine that it has been done.

12:40 Now I actually have, I have some experiences in the past where like there was some project

12:45 and it had like a beautiful set of tests and then, and CI and stuff. And I wasn't working

12:49 on it anymore. And whoever took it over is like, Oh, those tests were really annoying. So I turned

12:54 them off. You're like, Oh my gosh, those were there for a reason. What just happened? So at least

13:00 like if, if this gives you some description about what's up, that would be good. Is there anything

13:04 where like pie tests will show the doc string as part of the error report?

13:08 I think there was a, somebody that wrote a tool that would do, I don't remember the

13:12 name of it. I remember running across the plugin that would pop out the doc string for

13:17 failed tests, which would be pretty cool.

13:19 Yeah. That would be pretty cool.

13:20 Hopefully the person evaluating the test failures has access to the code. They can go look.

13:25 Yeah. I'm thinking more of like a CI CD. Like you're not really, you don't have it like

13:30 loaded up right there. Right. You're just like, Oh, I'm cruising on GitHub, checking a PR.

13:34 What the heck is this? Yeah. I actually wrote a, it was an internal thing, but a quick

13:38 plugin for pytest that would just before every test function, print out the test name and print

13:44 out the, the doc string. If we can look at the logs, it's there.

13:49 Yeah. That's cool. Very nice. Also cool. Data dog. So this episode is brought to you by data dog.

13:55 And let me ask you a question. Do you have an app in production that's slower than you like

13:59 it's performance all over the place? Maybe sometimes fast, sometimes slow. Here's the

14:04 important question. Do you know why it does that with data dog? You will, you can troubleshoot

14:08 your app's performance with their end to end tracing. Check out their detailed flame graphs to find

14:13 bottlenecks and latency in that finicky app of yours. Be the hero that got your app back on track at your

14:19 company. Get started with a free trial at pythonbytes.fm/data dog and get a cool little,

14:25 t-shirt as well. All right. So your theme is so far has been pretty clear. Next one of mine,

14:29 I want to talk about a project called hollow viz. Have you heard of hollow viz? I have not. I'm sure

14:35 you've heard of scipy and those types of things. There's kind of a grouping of other projects,

14:41 right? Under that general banner with like numpy, matplotlib and whatnot. Well, hollow viz is kind of

14:47 like that for data processing and visualization. And one of its features acts very much like

14:55 streamlet, but in a more general, probably a little more work to set up and like, right,

15:00 you got to work more in its framework, but in a very similar way to what streamlet is doing as well.

15:05 So it's a coordinated hollow viz is a coordinated effort to make browser based data visualization

15:11 in Python easier to use, easier to learn and more powerful. So it's, yeah. So what does it do?

15:16 So it has a bunch of tools that make it easier to apply Python plotting libraries to your data,

15:22 a bunch of tutorials, conda, like meta package that when you, you know, in conda install hollow viz,

15:29 it actually installs a whole bunch of things. I'll tell you about a second, even has some sample

15:33 data sets. So you can like go through the tutorials and actually get the outcome. Right.

15:38 So it's made up of a bunch of different things. One called panel, and that one makes creating apps

15:43 and dashboards for your plots using any of the supported plotting libraries, which is pretty

15:48 awesome. It has HV plot to quickly generate interactive plots as hollow views to make your

15:55 data instantly visualizable. Geo views for visualizing geographic data, data shader for rendering

16:02 huge data sets, param for creating a user configurable objects, like config stuff, and then color set or like

16:12 color maps. So yeah, you want to have like nice colors that flow together for your plots. And panel

16:18 is the main thing that I was thinking of that lets you create these single page apps around interactive

16:24 sliders and dropdowns around your graphs and other, other kinds of stuff. And, yeah, very cool project

16:30 as well. Yeah. I was looking at the data shader and they have like some really pretty pictures

16:35 because of the, the examples of, overlaying data plots over the map of the U S things like that.

16:43 It's cool. Yeah. Or, you know, you can plot attractors with 10 million points each. Oh, is that all?

16:49 And these graphs, I mean, these, the resulting pictures are, I don't know what they're like 400

16:54 by 400 pixels or smaller. It's like, yeah, that came from 10 million points or here's the United

16:59 States plotting each person in the United States where they're physically located from the 2010 census.

17:07 So 300 million points of data overlaid onto the United States map. Yeah. It's like, like a sun,

17:15 really is pretty interesting. Actually. I think I can see you over there, Brian, you're on the left.

17:20 You are too. That's right. Awesome. Anyway. Yeah. So this is a cool project. There's a whole bunch,

17:25 a bunch of different little libraries that are pretty neat. So if you want to try to visualize

17:30 your data and we'll come back and talk some more about both of these projects towards the end of

17:34 the show as well, but a bunch of cool libraries, like all brought together under this hollow of his

17:38 project to make them work together. Yeah. Nice. Nice. What'd you got next? I have another command line tool.

17:44 So this was by, oh gosh, Rosario. And he wrote a little blog post about it, but it's a, there's a

17:51 project called a live progress and it's a progress bar for Python and it's really cool. So it is pretty

17:58 cool. Command line interface, a progress bar. So often, I mean, like even like pytest has added,

18:05 progress bars for, you know, watching your test finish and things like that. And it's,

18:09 it's nice to have progress bars and it gives you good feedback and whatnot, but there there's limits

18:14 to what you can do, except for this seems unlimited. It's, got a whole bunch of different animations

18:20 and spinners and things you can combine to make a more entertaining progress bar. So it's fun.

18:25 Yeah. These are really nice. And you know, these little touches, they, they probably don't seem like

18:30 much, but they can definitely make your app feel more professional and more polished rather than just,

18:35 you know, the answer is seven or like whatever we're done.

18:37 Yeah. Some of the, like, what was it? pipenv. I don't use it, but I appreciated some of the fun

18:43 command line interface stuff that they've added to it. And I think adding some fun to a tool

18:48 is nice. One of the things I wanted to comment on also was just the, about the, the repo itself.

18:54 So the code is, up on GitHub and, the readme has some nice thing features I wanted to call out.

19:01 So the, the animated pictures of what it does is a nice touch. We've said this before. We love things

19:07 like this. I liked that there was a to-do list. so it encourages having a short to-do list

19:13 encourages contributions. And I think even listing things that I've gotten that I've gotten done

19:18 recently so that people that might not know about those features don't try to go work on them.

19:22 And then just a short list of things you'd like to have done. And then it has an interesting fact

19:27 section, which is kind of cool. The code is in a functional style. It uses closures and generators.

19:32 So, I mean, actually a lot of times I'll look at, code, not as an example of, of how to do

19:38 something. So if somebody is proud of like their use of generators, maybe it's worth code checking out

19:43 if you're trying to learn generators. And then another feature that I'm definitely going to pick

19:47 up for things that I work on is change log highlights. So not the entire change log in the

19:53 read me, but just one or two lines of semicolon separated features per version of change. So

20:01 this is kind of a nice thing to add. Oh yeah, that is really nice. Cool. I think it's a great project.

20:06 If I need a progress bar, I'm definitely going to consider this one. Like I said, like I do think

20:11 they're neat and I do use them sometimes. So, yeah, that's cool. Very nice. All right. Last one's a

20:15 quick one. So we talked about hollow viz, talked about streamlet and panel and how those are kind

20:21 of similar. So there's this other project called awesome panel, which is kind of like an awesome

20:27 list for panel that way to build interactive data science, single page apps, or not even single page

20:35 apps. This is run by Mark Skalv Madsen. I got that closely, right? Mark. And yeah, it's a cool

20:42 project to just show a bunch of examples and a curated list of these. So yeah, if you just open

20:47 that up, you can go see, there's an app that comes up. It takes just a second come to life. And then on

20:53 the left, there's like a gallery. There's all sorts of cool pictures. There's also a nice talk. I can't

20:57 remember who gave the talk, but yeah, it's a, there's like a talk from one of the conferences,

21:01 but if you go to the gallery, you'll see like, as you navigate around, it's kind of like this

21:06 single page app. So if you click gallery, you'll see like the main part of the app sort of spin for a

21:11 second and then come up and then you can go and say, Oh, there's like one of the things that's

21:14 really cool that I'll point you guys at is this thing called the image classifier in there. So I

21:18 went in there and it's lets you, if you just scroll down, it says upload an image and you can grab some

21:25 JPEG and upload it. I grabbed some like random microphone picture that I had laying around and

21:30 threw it in there. And then it ran, you can pick different neural networks to run against it.

21:34 Do you want to run NAS net mobile, NAS net large, mobile net V2? Like, I don't know what these are,

21:39 these glass fires, but you can pick from them and then it'll tell you in a cool little graph at the

21:43 bottom, like what it thinks that is. And it thought the microphone was most likely a microphone, but it

21:49 could have been a shield because it had like a big metal guard on the front of it. And it's just really

21:53 cool. And so this whole website is built, if I got it right, in panel to show you how you can build a

22:00 cool panel app. But then as you dive into the gallery, each one of these pieces is like an interactive

22:05 sub panel or something like that. So it's kind of, it's a little bit meta in that regard, but it's

22:09 pretty cool actually.

22:10 Yeah. It's really, it's really cool.

22:12 Yeah. And yeah, it's apparently super easy to work with. Again, I haven't built anything with it, but

22:17 it seems like a much simpler way to get your interactive data science stuff on the internet

22:24 than learning Vue.js, JavaScript, Flask, SQLAlchemy, et cetera, et cetera.

22:30 Yeah.

22:30 Yeah. So anyway, pretty cool. I recommend if you want to check this out, just go browse the gallery. That's

22:36 the best way to see what this thing can do.

22:37 I love pretty pictures.

22:39 I know. Yeah. This one definitely passes our, our tests for you must have pretty pictures

22:44 in order to talk about graphical stuff. Yeah. So Brian, really quick on this next one, click on the

22:52 app for it because it's take just a second to load up. So that's it for our main items. I want to tell

22:57 you about a couple of things, then we'll get to yours as well. First, one of the features that I really

23:03 like about Visual Studio Code, I haven't really used because I don't use Visual Studio Code in like a

23:08 meaningful way. I use it all the time for like little bits of editing, but not if I'm like doing real

23:13 projects, I probably use PryCharm, but it has, it has live share, which is a pretty killer feature.

23:19 So you can say, I would like to share my coding environment with someone else who's going to like

23:25 look over my shoulder, do paired programming, just code review, whatever. And they can actually debug

23:30 and step through and like see your code in their editor. And it could even be like a different editor.

23:36 I think there's other stuff support, like proper Visual Studio versus VS Code and whatnot. So that's

23:41 really cool. And I've always thought like, well, that would be awesome for PyCharm. But no. So

23:47 someone on Twitter, sorry, I don't remember who sent this to me, but thank you. I sent up this link to

23:53 this project called CodeTogether. So CodeTogether is a freemium product. So this is a, not an open source

24:01 thing. It's like a paid project. You can go sign up, pay dollars a month for certain features, or you can

24:07 just use the free version. But it has that type of experience that I just talked about, but for many

24:12 different editors, right? So it comes for all the IntelliJ stuff. So like WebStorm, PyCharm, and so on.

24:17 Also works with VS Code. It works with other things. I don't know exactly all the things that it covers,

24:23 but certainly Eclipse, IntelliJ, and VS Code, which covers quite a bit. So if you're looking for that,

24:29 and you weren't using LiveShare, because it didn't exist for what you're doing, you could check

24:33 this out. I have not used it. I'm not endorsing it. I'm just saying it looks interesting and it might

24:38 help people.

24:38 Oh, neat. Cool.

24:39 Yeah. Yeah. Cool. And then the other one that I want to just quickly mention is related to the first

24:46 thing. These are totally different things. But Kevin VanderVeen sent over a message a week ago and said,

24:52 hey, I built a cool data explorer to help you understand the whole COVID pandemic stuff in a

25:00 local way. And he built it using Streamlit. So I thought, hey, here's an app that someone just sent

25:05 over that's like a cool running on Heroku Streamlit app. That would be a nice example of what I talked

25:11 about at the beginning. And it also has the GitHub repo there as well. So if you go and check out that

25:16 app, like for example, Brian, you scroll down to the second, to the third graph, below the third graph,

25:20 there's like a dropdown that lets you pick Oregon and you can go pick that. And wow, it looks like

25:24 we're flattening the curve really well. That's pretty awesome. Although the last two days have

25:29 been rough, I guess. Or you can go down a little farther and compare it against different states.

25:32 You could go in there and type like it's Colorado. You could type Oregon or New York or whatever you

25:37 want. And then it'll like autocomplete that out of the list and then regenerate. And this is exactly

25:42 like what I was saying. Like there's some line in the Streamlit code that's just saying,

25:46 get the tags from the tag selector. And then if you type in there, it just reruns the whole thing.

25:52 But most of the stuff's cached and then it'll redraw the graph. It's super cool. So this is both

25:57 useful, I think, for if you want to try to like understand that it's a cool data science project.

26:02 The source is on GitHub. But also it's just a cool example of Streamlit if people want to see that

26:07 going.

26:07 And the graphs are fun too because you can do like box select and zooming and stuff like that.

26:12 Yeah, these are just Plotly. So they do all the standard Plotly stuff, which is pretty cool.

26:16 That's kind of what I like about the Streamlit thing, not forcing you to use their random graphing

26:21 thing, but just other graphs that you might like.

26:23 Yeah.

26:23 Yeah. All right. Well, that's it for my extras. What else do you got?

26:26 Well, I wanted to remind people that PyCon 2020 online is available and new content is still

26:32 being posted through the first few weeks of May. I think that's when they're wrapping things up.

26:37 Yeah, that's cool. I just saw some new videos go up there. Yeah.

26:39 Yeah. One of the new videos that just came up was my talk. So multiply your testing effectiveness

26:45 with parameterized testing.

26:47 Oh, yeah. There it is right at the bottom with a couple of new tags on it.

26:50 Yeah. So I'm excited to have people get feedback from people to see what they thought.

26:54 So that looks good. I like it. Yeah. Well done.

26:56 While I was there, I was looking around. There's tons of great talks. There's a bunch of tutorials

27:01 there. There's charlas. Is that new this year?

27:04 They did it last year, maybe the last two years, but it's the Spanish language track.

27:09 Yeah. It's neat. I'm glad they're doing it. Sponsor workshops. That's kind of nice to have.

27:14 And then even an online poster hall. So that's there. So it's cool.

27:18 The other thing I wanted to bring up, a quick extra, if anybody's following the drama in pytest,

27:24 the drama is over and I'm happy with the resolution. So hopefully there will be peace in the family.

27:31 I hope so. A link to the Twitter announcement from pytest.

27:33 Yeah. They got the whole public statement there. So the folks who had dropped out,

27:39 are they dropping back in or what's, or is there just permanent out fallout from that?

27:43 I don't know that any more details. I know at least one person is back in,

27:49 but all the people I was worried about are signers of this message. So.

27:54 Yeah. So probably.

27:55 Kind of seems like maybe they're back in.

27:56 Yeah. All right. Well, that's awesome. I'm really glad to hear that got resolved. And it sounds like

28:00 exactly the outcome that I would have voted for as well. Okay. So you ready for some jokes? I don't

28:08 know. These jokes. How about you? Are you ready for humor?

28:10 Yes. Humor is good.

28:11 Humor is definitely good. And so I found a couple of funny pictures and I'm going to put the pictures

28:19 in the show notes. I don't know if they'll come up in your podcast players. Some of them do,

28:23 some of them don't. Some of you guys say allow pictures in this podcast feed, just like in the

28:28 player as you're looking at the show notes, but certainly on the website, they'll be there.

28:32 And these are Oh really book covers.

28:35 I love these.

28:36 They're like O'Reilly and just if you've forgotten the O'Reilly books always have the title and then

28:43 they have an animal that goes with it. Right? So if you wrote a book for O'Reilly,

28:48 the thing is like, what's your animal on your book and whatnot. Yeah. So these are like,

28:53 take those ideas, put an animal on it, but make it silly. Right? There's also usually like some

29:00 sort of saying at the top of the book. So for these, you definitely have to read the top also.

29:04 Yeah. It's right. Like sort of the subtitle. Okay. So how about this? I'll read the first one. You do

29:09 the second one and so on. So this one has like a badger or something on it, on the front of it. And it's

29:15 kind of like sneaky head down. And, the title is pointless meetings, the survival guide,

29:21 how to survive all pointless meetings. I feel like many, many things that used to be meetings

29:28 these days are now an email and people are like, Oh my gosh, they really can just be emails. Like,

29:33 why have we been going to all these meetings? Right? So, all right. You want to get the next one?

29:37 The next one is overriding your teammates code. My code is better than yours anyway.

29:45 It's got a horse on the front. I don't know either. I really love this one. This one is the essential

29:51 semicolon parenthesis. Sorry. Quote semicolon parenthesis drop table animals, semicolon dash,

29:58 dash. And there's no animal because, well, this is a SQL injection that has deleted it. And it says

30:05 now with user generated content. That one's that may be the best. Yes. Now with the security hole.

30:13 Exactly. Related. What's next? Okay. This one has a fish on the cover. Expert hoping nobody hacks you

30:19 security by optimism and prayer. I don't know what the fish has to do with it. I must be missing it.

30:25 But, no, but that's good. That's most people's security solution, right? That's true. So the next one

30:32 is an octopus. Obviously many legs. It can type many things. And the title is the entire book is exiting

30:40 vim eventually. Just memorize the 14 contextual dependent instructions.

30:45 Exiting vim eventually. Oh, I love it. I love it. Yeah. So you'll have to visit the website and

30:53 check out these because they're pretty sweet. Yeah. Awesome. Speaking of sweet, it's been great to be

30:58 here with you, Brian. Thanks. It has been great. Thanks. Yep. Bye. Bye.


Want to go deeper? Check our projects