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

#150: Winning the Python software interview

Published Sat, Oct 5, 2019, recorded Wed, Sep 25, 2019

Sponsored by Datadog: pythonbytes.fm/datadog

Michael #1: How to Stand Out in a Python Coding Interview

  • Real Python, by James Timmins
  • Are tech interviews broken? Well at least we can try to succeed at them anyway
  • You’ve made it past the phone call with the recruiter, and now it’s time to show that you know how to solve problems with actual code…
  • Interviews aren’t just about solving problems: they’re also about showing that you can write clean production code. This means that you have a deep knowledge of Python’s built-in functionality and libraries.
  • Things to learn
    • Use enumerate() to iterate over both indices and values
    • Debug problematic code with breakpoint()
    • Format strings effectively with f-strings
    • Sort lists with custom arguments
    • Use generators instead of list comprehensions to conserve memory
    • Define default values when looking up dictionary keys
    • Count hashable objects with the collections.Counter class
    • Use the standard library to get lists of permutations and combinations

Brian #2: The Python Software Foundation has updated its Code of Conduct

  • There’s now one code of conduct for PSF and PyCon US and other spaces sponsored by the PSF
  • This includes some regional conferences, such as PyCascades, and some meetup groups, (ears perk up)
  • The docs
  • Do we need to care?
    • all of us, yes. If there weren’t problems, we wouldn’t need these.
    • attendees, yes. Know before you go.
    • organizers, yes. Better to think about it ahead of time and have a plan than have to make up a strategy during an event if something happens.
    • me, in particular, and Michael. Ugh. yes. our first meetup is next month. I’d like to be in line with the rest of Python. So, yep, we are going to have to talk about this and put something in place.

Michael #3: The Interview Study Guide For Software Engineers

Brian #4: re-assert : “show where your regex match assertion failed”

  • Anthony Sotille
  • re-assert provides a helper class to make assertions of regexes simpler.”
  • The Matches objects allows for useful pytest assertion messages
  • In order to get my head around it, I looked at the test code:
    • https://raw.githubusercontent.com/asottile/re-assert/master/tests/re_assert_test.py
    • and modified it to remove all of the with pytest.raises(AssertionError)… to actually get to see the errors and how to use it.
              def test_match_old():
          >       assert re.match('foo', 'fob')
          E       AssertionError: assert None
          E        +  where None = <function match at 0x101aaa268>('foo', 'fob')
          E        +    where <function match at 0x101aaa268> = re.match
      
          test_re.py:8: AssertionError
          ____________ test_match_new ___________________
      
              def test_match_new():
          >       assert Matches('foo') == 'fob'
          E       AssertionError: assert Matches('foo') ^ == 'fob'
          E         -Matches('foo')
          E         -    # regex failed to match at:
          E         -    #
          E         -    #> fob
          E         -    #    ^
          E         +'fob'
      

Michael #5: awesome-python-typing

Brian #6: Developer Advocacy: Frequently Asked Questions

  • Dustin Ingram
  • I know a handful of people who have this job title. What is it?
  • disclaimer: Dustin is a DA at Google. Other companies might be different
  • What is it?
    • “I help represent the Python community at [company]"
    • “part of my job is to be deeply involved in the Python community.”
    • working on projects that help Python, PyPI, packaging, etc.
    • speaking at conferences
    • talking to people. customers and non-customers
    • talking to product teams
    • being “user zero” for new products and features
    • paying attention to places users might raise issues about products
    • working in open source
    • creating content for Python devs
    • being involved in the community as a company rep
    • representing Python in the company
    • coordinating with other DAs
  • Work/life?

    • Not all DAs travel all the time. that was my main question.
  • Talk Python episode: War Stories of the Developer Evangelists

Extras:

Michael:

Joke:

via https://twitter.com/NotGbo/status/1173667028965777410

Web Dev Merit Badges

Episode Transcript

Collapse transcript

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

00:04 your earbuds. This is episode 150, recorded September 25th, 2019. I'm Brian Okken.

00:11 And I'm Michael Kennedy.

00:12 And this episode is brought to you by Datadog. Check them out at pythonbytes.fm

00:16 slash datadog. More on what they have to offer later. But Michael, right now I kind of sense a

00:23 theme. Are you looking for a new job? Are you hiring somebody or what's going on?

00:27 I'm going to cover a couple of topics about getting better interviews. You know, I kind of

00:33 hope I never have to apply for a job or go to a job again in my life. So no, I'm not actually on the

00:39 hunt for that. But I do have a couple of friends who are looking for jobs. And you know, I'm just a

00:45 little sympathetic to the challenges and whatnot. So I want to kick us off with a thing called how to

00:53 stand out in the Python coding interview. Okay, this comes from James Timmons on any rotor on

01:00 real python.com. So it's kind of a Python version of the stuff that it seems like the tech industry

01:07 thinks you should know. And I feel like it's a little bit better. I feel like the tech industry says,

01:12 oh, you know, which is better a bubble sort or a quick sort? You know what, I don't care. I call

01:18 sort on the list. And we're good. You know, I don't maybe sorted like you could debate dot sort versus

01:24 sorted. But who cares, right? Like, this is not a problem we need to keep solving. And yet it feels

01:30 like in the interview process, it falls back to, well, they asked about, you know, big O notation,

01:35 they asked about like, algorithms of that type, they asked about a data structure, like when would

01:41 I use a doubly linked list versus a, you know, single linked list. And like, ah, like, I can go build,

01:47 you know, a Python web app with SQLAlchemy and talk to Stripe and charge a credit card. But I forgot

01:53 when I use a single linked list, right? Single direction linked list. But that seems like what

01:58 people are testing. So here's an article that sort of covers those kinds of questions, but specifically

02:04 for the Python developer, I think it's pretty, pretty decent. So it's meant to help you kind

02:11 of navigate that space of Python and show you that you have some knowledge of the built ins

02:17 and of the language and things like that. And you can kind of write decent code. So it covers

02:22 a handful of things with a bunch of other stuff mixed in there. So how to use enumerate to iterate

02:28 both over a view of like collection to iterate both with indices and values. And if you've been

02:33 doing Python for a long time, that's obvious, we do that a lot. But if you come from a language like

02:38 C++ or Java or something that doesn't have this all of a sudden, well, then it's really weird,

02:45 right? And you don't know to use it. So it's good to have that in there. Debugging with breakpoint

02:49 formatting with f-strings, F yes, for that one. That's great. Sorting, right? Sorting lists. I

02:55 talked about that, like, you don't have to care about the algorithms. But knowing how to sort stuff is

03:00 really nice generators and it's pressure on memory, default values and dictionaries using the counter

03:07 class, and then just some standard library stuff. And I think knowing all those things kind of

03:11 puts a nice Python spin on that level of Python interviewing.

03:17 Yeah.

03:18 Do you do any interviewing?

03:19 I haven't actually applied for a job for several years.

03:22 Do you do it in reverse, though? Do you hire, I mean, like interview people for there?

03:25 Yeah.

03:25 Yeah, definitely a lot. And I help out with other teams, too, and they're hiring. And like,

03:30 for some reason, people know me as this person that knows Python. So I'll do the Python interview

03:34 part. But yeah, a lot of this stuff is stuff that I look for. If you actually say for I in length,

03:41 the interview's over. Just you don't know Python then.

03:44 Yeah. I mean, maybe if you're hiring for, like, I'm hiring a developer and it doesn't,

03:48 they don't have to know Python, but they're going to be doing it. So we're going to help

03:51 them along. And they are, they're really good at Java. You could probably mentor them over. But

03:55 if your goal is to hire an experienced Python developer and they don't know for item in

04:01 collection, like, yeah, you're done.

04:03 Yeah. But I'm a pretty fair person. I talk through stuff. People can always recover. If you

04:08 freeze up, don't worry about it. Just flow with it. I think people should interview

04:11 more, even if they're not looking for a job, just to keep up their interview chops. It's good.

04:16 Yeah. Nice. I agree.

04:17 Speaking of being nice to people, we have a bit of news. And even though I didn't even actually

04:22 know this was an issue. So there was an announcement made that the PSF, the Python Software Foundation,

04:28 updated its code of conduct. And apparently the PSF had one code of conduct for the PSF and things

04:34 it was sponsoring and a different one for PyCon US. And now there's just one. So that's the big

04:41 news. And we've got links to the code of conduct and the enforcement guidelines and reporting

04:46 guidelines. And we hear about codes of conduct occasionally and stuff. And in the past, I've

04:51 thought, why do I have to care about this? I mean, just don't be a jerk and try to be a nice person.

04:56 Isn't that enough? And for the most part, yes. But if that was all there was to it and there

05:03 weren't any problems, then we wouldn't need these. And clearly we need them. Things come up. So I think

05:09 it's good for people to go. It's not a long read. I think people should read them, especially before

05:13 you go to an event to make sure you know what's up with that. The other thing that's nice to look up

05:19 is what is the reporting mechanism? So if you see somebody violating these or basically just somebody

05:26 being a jerk, what do you do about it? Who do you contact? And so that's good to just sort of at least

05:31 have read it once so that if it happens, you can look it up and figure out what to do.

05:35 At least know what it is. And you're kind of putting yourself in a space where you got to

05:40 know even a little more about it maybe, huh?

05:41 Right. So one of the things is that it covers things that the PSF sponsors also, sponsored

05:47 spaces. This includes a couple different, two or three of the Python meetups around the country.

05:52 They're not sponsoring us yet, although we probably should hit them up for that. But we are doing a

05:58 meetup here in Portland West coming up next month. And yeah, we probably ought to think about this,

06:03 of what to do if something happens. So yeah, Michael and I will probably talk about this

06:08 before the actual meetup.

06:10 Yeah, we'll figure it out. What's the date of the meetup again for people?

06:12 Oh my gosh, I should know this. It's like the second Tuesday in October. So that's

06:17 like the 6th or the 8th or something like that.

06:20 That would be the 8th.

06:21 Yes, 8th.

06:22 Yeah.

06:22 Awesome. All right. Well, for those of you who could make it, that'd be great to see you out there.

06:25 All right. Now, speaking of great stuff, before we get on to more interviewing on my theme here,

06:30 I want to tell you about Datadog. So Python Bytes is sponsored by Datadog. They're a modern cloud

06:35 scale monitoring platform that brings things like metrics, logs, and traces all in one place.

06:40 Their tracing client includes auto-instrumenting support for things like Django, Flask, Postgres.

06:47 That means you get visibility into what your entire application is doing,

06:50 not just maybe a trace out of your Python app or profiling just your Python app. But you can

06:55 troubleshoot slow requests and optimize your code within a few minutes. So start monitoring your

07:00 dynamic environment with a free trial. And Datadog will send you a free t-shirt as well. Just get

07:06 over to pythonbytes.fm/Datadog to get started. So this previous one that I talked about,

07:11 Brian, it was very much focused on sort of these, almost these data structure algorithm versions.

07:18 And it said, here's the Python equivalent of some of these conversations you might have.

07:22 This next one, I don't know how long it would take you to go through all this stuff,

07:27 but it would take you a good long while. This is by Ben Rogagen. I'm going to say,

07:33 sorry about that, if I got that wrong, goes by Seattle Data Guy. So it talks a little bit about

07:40 some of the silly stuff like FizBuzz and some of the traditional classical, I don't know,

07:45 silly algorithm problems like give us the M Fibonacci, et cetera, et cetera. And some things

07:50 that you might study and so on. But then there's a bunch of videos. And I don't know how many videos

07:56 there are many, I would say at least 75 videos on different topics. And these are like 15 minute

08:03 videos. So there's some on algorithms. There's some on data structures. There's some on big O notation,

08:09 dynamic programming, string manipulation, system design, operating systems, threads, object oriented

08:15 programming, design patterns, SQL, and more stuff. So if you are in the process of trying to learn

08:22 these things to get one of these jobs or nail one of these interviews, you've got homework.

08:25 Oh, okay.

08:26 That's a lot, huh?

08:27 This is frightening though. Yeah. Awesome that this resource is here, especially you can like

08:31 pick a part where you, you know, had trouble with, or maybe after an interview even and go,

08:36 wow, I got asked this stuff and I didn't understand it. So maybe go review it then.

08:41 I was just watching all of the different algorithms, sorting algorithms. I love videos

08:45 of sorting algorithms. I know the visualizations. Yeah. It's, there's a big graphic of like 20

08:51 different sorting algorithms, all sorting next to each other at the same time. Right. Something like

08:55 that. It's mesmerizing. And also I would say there are maybe 15 pages of comments and the comments get

09:03 kicked off. Like, I think we really need to face a reckoning in our profession. And the reckoning is this,

09:08 we require an overload of stuff that's simply not important on the job just to get through the

09:14 interview process and land a position. So, you know, basically you've got to go through all these

09:18 algorithms, kind of like I said, and then in the end you do a lot of Googling and stack overflow and

09:23 you find packages on awesome Python and then you install them and you roll, right? There's a huge

09:28 discussion about why that is, what we can do about it and so on. So it's, I think it's great. You should

09:33 also check out the conversation in the comments. On the other end of it, just a devil's advocate.

09:37 One of the reasons I know people do pick up algorithm type questions is because they work in

09:44 a specific space domain and it would be obvious to ask about that. But if they don't really,

09:50 if they know they can train you on their domain, they have to ask you about stuff that is something

09:56 generic and that's where the algorithm stuff is, I still think it's bad. Things like,

10:02 what should you use, a bubble sort or quick sort? That's a dumb question. But if you have like things

10:06 like, I don't know, FizzBuzz is kind of silly, but you should know it by now. And some of the other

10:11 things, it's hard to come up with good questions that are fair for anybody coming at it. So also,

10:18 keep in mind that. Yeah. You know what I would much rather see is something live and in the tooling

10:25 and environment that that person likes to work in. So if I was interviewing somebody,

10:29 you know, it seems to me like I might set up like a Zoom call and we do screen share and say,

10:35 hey, I would like you to create this kind of website and have it, you know, have a route that passes data

10:42 to the view method or whatever, right? Like if it's a web job or I'd like you to have a program

10:48 that reads a JSON file and prints out these things and just say, okay, now go, let's do it. Talk me

10:55 through building this app and spend 15 minutes. You can tell if somebody is comfortable in the language

10:59 and comfortable in their tools or they have just no idea. Like I know that's what FizzBuzz is supposed

11:04 to solve. But, you know, if you can't load a JSON file, which is like three lines of code and it just

11:10 works with dictionaries after that, you probably are not really capable in Python. So I would much

11:15 rather see something like that, like a small task that's not super domain specific. It's not really

11:21 deep into some library that you could ask over all of these crazy things. And it seems like it'd be

11:26 effective. So I don't know. That's my thoughts. Definitely. Cool. So one thing that does, I would

11:31 really hope I don't get asked in interviews is about is regular expressions because those things are like

11:37 write only. No, no, simple regular expressions are fine. Okay. In regular expressions defense, they're very useful to

11:45 concisely say something, some string kind of matches some other string within, you know. Anyway, people know what

11:53 regular expressions are for. Hopefully, if you're going to interview, you probably should look it up. Yeah.

11:57 Third thing.

11:59 But one of the hard things though is if you, this is, I'm going to introduce a project by Anthony

12:05 Sotille, Sotille, Sotille? Sotille? Oh, anyway.

12:08 Sotille.

12:08 Sorry, Anthony. Sotille.

12:09 Called RE-assert. And so what this is, it's just a new matcher that does better tracebacks for when the

12:20 match fails. And so this is really helpful if you've got, if you want to do, use regular expressions for a test for a,

12:28 for part of your test for your application. This string should say, hello, Michael, welcome to my

12:34 website. And I know that the name is going to be different. So I'm going to use a regular expression

12:38 to parse out the name. How do I make sure that that matches and have a useful answer when it doesn't?

12:46 And that's where RE-assert comes in. And it's pretty fun. And I, it's a fairly new project. So the

12:53 documentation's a little on the light side. So I did what I often do with new projects is I jumped into

12:59 the test code and looked at the test code for this to find out how it was used. And it's kind of fun.

13:05 you like, for instance, I'm, we're going to put in a show notes, an example of just matching foo with

13:10 fob and how that, if you use just RE.match, it just returns a no match. Yeah. So it's not going to tell

13:19 you anything, but if you use the matches object within the RE assert project, it gives you more

13:28 detail of why it doesn't match. So I think this is for very specific use cases. It's very cool.

13:34 I love it because one of the really frustrating things about regular expressions is you say,

13:39 here's the thing and it should match this. And it says, nope, doesn't match.

13:44 Why don't you match? And this is really cool. So if, if you compare foo to fob, like foo is a regular

13:50 expression, fob is the value for static characters. It just matches, you know, just tries to find that

13:56 substring basically. And the error is right here at the B, it didn't match the F match the O match,

14:02 but the B didn't match. And that's super helpful. That's great.

14:04 And there's a bunch of examples and especially in test code, but yeah, so check it out and good job,

14:09 Anthony. Absolutely. You know, there's a bunch of awesome Python lists these days, Brian.

14:15 Yeah.

14:15 We've got awesome ASGI. We've got awesome Python applications from Mahmood. And we've talked a bit

14:22 about Python typing and type hints and whatnot. So of course there's an awesome Python typing,

14:29 awesome list.

14:30 Okay. Nice.

14:32 Yeah. It's a collection of awesome Python types, stubs, plugins, and tools for working with them. So

14:37 in terms of the tools, there's the static type checkers, there's stub packages, which define

14:44 the types that go with other packages, which is pretty interesting, like type shed. So instead of

14:50 actually putting the types in the libraries, you can put them in these libraries that go next to

14:55 your library and it will actually pull them out. It has stuff for Python, three, six, three, seven,

15:01 standard library, like data classes and all of those things. So yeah, it's pretty interesting.

15:07 I put them in a PYI file and it will carry the types over to like, there's an example of

15:14 data classes.py that'll apply the types to data classes.py. Oh, cool.

15:18 So it's got a bunch of those type shed is probably the biggest one there. It's got tools. This is like

15:24 a super category of many other ones, but one I thought you might like is pytest mypy. So mypy

15:29 static type checker plugin for pytest. I think we covered that one at some point. Yeah.

15:33 I think so. Yeah. And then cool articles like how to type check Django and Django rest framework. So

15:39 which is a whole tutorial on doing that. Apparently Django has a bunch of magic and it makes type

15:44 checking it extra hard. So there's just a bunch of things like that in there that I thought people

15:48 might, if you know, if they're getting into this Python typing space, it's a lot of good stuff to

15:53 go check out. And some of the, like even linters, cause some people, I mean, you try one and it's

15:58 confusing. Well, try another one. Maybe it fits better for what you're doing. Yeah. There's a bunch of

16:02 like eight and some, I think some black stuff and things like that in there. Okay, cool. Yeah.

16:06 I haven't really worked with stubs yet. I think that's something I want to try to tune to. Yeah.

16:10 Neat. Same here. What do you got for our last one? Last one. Oh, so we have actually in the,

16:15 the space of like looking at people writing articles and speaking and stuff, we kind of do that a lot.

16:22 We run across quite a few people that list developer advocate as their job title. And I don't

16:28 really know exactly what that is. And I've asked a couple of people and not quite understood it still.

16:34 You did like an entire episode on it, didn't you?

16:37 I did. I did.

16:38 Okay.

16:38 I'm going to see if I can pull up the number. The number is, I'm not sure what the number is. I got

16:42 to figure it out. I'll look. Keep going.

16:43 This is from Dustin Ingram, an article called developer advocacy, frequently asked questions.

16:48 And the disclaimer he puts is that he is a developer advocate for Google. So other companies and other

16:56 people might experience different things, but first off, just what is it? And he says he helps represent

17:03 the Python community at Google in his sense, in his case, but really at whatever company somebody's

17:09 working for tries to get more involved with the Python community. And then also try to represent

17:14 the Python community within the company and represent the company in the community that kind of both ends

17:20 of it. He has a chance to work on different packages that he cares about. In Dustin's case, he works with

17:26 the PyPI and with packaging and other things, speaking in conferences. Of course, that's what we assume.

17:31 That's what I assume, but there are apparently some that don't do much speaking in conferences and some

17:37 that just do like one or two a year, which that sounds fun. The thing that I think really sounds

17:42 fun is being the user zero for new products or features for a company.

17:46 Yeah, that's pretty cool.

17:47 With the bent of thinking about Python users and whether or not they like it and things like that.

17:52 He's got a whole list of different things that they do, but actually this sounds like a lot of fun to

17:57 me. It'd be kind of cool.

17:59 I think this would be a great job. Yeah, I interviewed a couple of folks back on Talk Python.

18:04 It was a lot of fun to do that episode. I think it sounds like a great job. It's one of those jobs

18:11 where you basically get to explore technology. Obviously, when you work for one of these companies,

18:18 it's in the slant of that. The three people I interviewed, Cecil Phillip from Microsoft,

18:23 Paul Everett from JetBrains, and Matt McKay from Twilio, they all kind of work around their space,

18:28 but I don't know. I think it sounds great. If you just like researching new stuff and playing with new

18:33 ideas and talking to people, I would definitely do it.

18:36 I kind of assumed that they even address the work-life balance. There's some people that do

18:41 like to travel a lot, so you can do that, and some people that don't. I thought that maybe that was

18:46 just required for a DA.

18:48 Maybe. I'm not really sure either. But work-life balance is interesting, right? Because a lot of

18:54 times those folks would be working from home when they're not gone. They might have more time with

18:57 their family, more flexibility to go to their kid's soccer game, but then make it up in the evening,

19:02 whereas people go to office every day. Maybe not so much.

19:06 Definitely. I guess it depends on your life, right?

19:08 That's right. What do you call balance? Okay. So, do you got any extra stuff you want to share?

19:13 We already gave a shout-out to our Portland West meetup that you were doing out by your office.

19:19 That's all I wanted to shout-out. How about you?

19:21 Yeah, that's on meetup.com, so people can check that out. Nothing major. There was some

19:25 interesting news. We covered a while ago that some of Kenneth Wright's projects were being moved

19:31 around, and the biggest domino in that whole space was requests. I can't remember exactly who jumped in,

19:39 but someone from the PSF jumped in and said, hey, we'll take it. We'll take care of it in this thing

19:43 called some project that the PSF runs that can take care of these types of projects when they become

19:49 important and are teetering on being unowned or whatever. So, there's a huge discussion on

19:57 Reddit about how it actually has moved over. So, it actually has moved over to the PSF, for one.

20:03 Okay.

20:03 And so, now the place for requests on GitHub, for example, is github.com/PSF slash request.

20:10 That's wild.

20:11 Yeah.

20:11 But there's a huge discussion around it on Reddit, and take that for what it is. It's Reddit. It's kind

20:18 of a, you know, you get both sides type of place, but I think people find it interesting.

20:22 I didn't really know that there was, actually, there's quite a bit of stuff. There's a few

20:26 projects under PSF. I imagine that will grow bigger now.

20:29 Yeah, I would think so as well.

20:31 Black is there. That's interesting.

20:33 How interesting. Are you ready for some laughs?

20:34 I am.

20:35 This one might hurt us a little bit. This is good. As in from laughing so hard.

20:39 Okay.

20:40 This one is called to our attention by Colin Martin, and it's a set of web development merit badges.

20:48 Go ahead and pull up the link for where you can see the badges, because you got to see the picture

20:52 that goes along with each badge. Let's take them like row by row.

20:55 Okay.

20:56 All right. I'll do the first one. They each has a big circle, and it's got like something in it.

21:00 This one has a giant A, and it says, so you get this badge if you changed a DNS record and everything

21:06 worked just fine. This one, I love this one. There's a forward slash bracket A dash brain bracket bracket,

21:14 and it says comprehended someone else's regex.

21:16 Yeah, exactly. Definitely.

21:18 And you just have a little bit of a web bent. Another one is like an expander thing. It says

21:23 built an accordion from scratch.

21:24 I've done that.

21:25 I think you've done this next one, the one on the next row.

21:29 So, colon WQ for exited Vim.

21:32 Exited Vim. I love it. You want to do the next two?

21:36 Yeah. So, oh, crud. You get it if you accidentally created your own CMS.

21:42 And then a little painter. I like the little painter with the acorn hat.

21:46 Yeah, it's like a French design painter.

21:48 Yeah. Pulled off. You get this if you pulled off a design you didn't think you could. Well,

21:52 that's actually kind of nice.

21:53 Yeah, this is nice. This next one is for the consultants out there. It's like a mallet banging

21:58 down like a judge. And you get this one if you told a client or boss, no, we're not doing

22:04 that.

22:04 Yeah, that's awesome.

22:05 Then there's one with like some crazy matching symbols. It says you wrote an HT access redirect that

22:12 included a capture group. And then this one's pretty funny. You have a minus CSS red, pink,

22:17 and a plus CSS green. It says you refactored a large portion of CSS and you didn't break anything.

22:23 Oh, yeah, that's good. There's some good ones.

22:26 Yeah, you want to just pick out a couple more?

22:27 Yeah.

22:28 Merged master into a six month old branch.

22:31 I love that one. There's like two arrows going sideways, two arrows going down. It says centered

22:36 in element horizontally and vertically.

22:38 Oh, nobody can have that one.

22:40 That's so hard.

22:41 It's not possible. I don't think.

22:43 I don't think it is either.

22:44 I like the dude laying down on the ground says you pushed to production on Friday and

22:49 didn't roll it back and over the weekend.

22:51 Here's the undecutive one. Had a neglected site get hacked and spammed.

22:58 Oh, yeah.

22:59 And then another one, there's a guy sleeping on a laptop and it says solved a bug by taking

23:06 a nap.

23:06 That's awesome. There's a semicolon for debug something for over an hour where the fix literally

23:12 was one character.

23:13 Awesome. Yeah. All right. Let's leave the rest for the listeners out there to go check out.

23:19 You just got to see the pictures. These are brilliant.

23:21 These are great.

23:22 Yeah. First time I read it, I was my stomach hurt. It was really good.

23:25 All right. Well, speaking of good, this was a fun show. Thanks, Brian.

23:30 Thank you.

23:31 You bet. Talk to you later.

23:32 Thank you for listening to Python Bytes. Follow the show on Twitter at Python Bytes.

23:37 That's Python Bytes as in B-Y-T-E-S. And get the full show notes at pythonbytes.fm. If you have a news item you want featured, just visit pythonbytes.fm and

23:47 send it our way. We're always on the lookout for sharing something cool. This is Brian Okken,

23:51 and on behalf of myself and Michael Kennedy, thank you for listening and sharing this podcast

23:55 with your friends and colleagues.


Want to go deeper? Check our projects