惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Full Disclosure
Stack Overflow Blog
Stack Overflow Blog
H
Help Net Security
Microsoft Azure Blog
Microsoft Azure Blog
The GitHub Blog
The GitHub Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Recorded Future
Recorded Future
Y
Y Combinator Blog
Cloudbric
Cloudbric
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
S
Schneier on Security
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
C
Cybersecurity and Infrastructure Security Agency CISA
TaoSecurity Blog
TaoSecurity Blog
Security Latest
Security Latest
N
News and Events Feed by Topic
Hacker News - Newest:
Hacker News - Newest: "LLM"
D
DataBreaches.Net
Security Archives - TechRepublic
Security Archives - TechRepublic
H
Hacker News: Front Page
C
Cisco Blogs
L
LangChain Blog
aimingoo的专栏
aimingoo的专栏
Recent Commits to openclaw:main
Recent Commits to openclaw:main
V
Vulnerabilities – Threatpost
L
LINUX DO - 最新话题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Google Online Security Blog
Google Online Security Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
A
About on SuperTechFans
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Jina AI
Jina AI
C
CXSECURITY Database RSS Feed - CXSecurity.com
Schneier on Security
Schneier on Security
T
Tenable Blog
N
News and Events Feed by Topic
W
WeLiveSecurity
有赞技术团队
有赞技术团队
AI
AI
爱范儿
爱范儿
大猫的无限游戏
大猫的无限游戏
Latest news
Latest news
T
The Blog of Author Tim Ferriss
S
Security Affairs
Know Your Adversary
Know Your Adversary
Simon Willison's Weblog
Simon Willison's Weblog
G
GRAHAM CLULEY
Google DeepMind News
Google DeepMind News
The Cloudflare Blog

Python Bytes

#487 Minimum requirements #486 underscore-underscore-ghost-emoji #485 Creating memories #484 All our tools #483 Thanks Brian #482 Mr. Beast's episode #481 Ways to die #480 Proud Parents #479 Talking About Types #478 Iodine tablets and potable water #477 Lazy, Frozen, and 31% Lighter #476 Common themes #475 Haunted warehouses #474 Astral to join OpenAI #473 A clean room rewrite? #472 Monorepos #471 The ORM pattern of 2026? #470 A Jolting Episode #469 Commands, out of the terminal #468 A bolt of Django #467 Toads in my AI #466 PSF Lands $1.5 million #465 Stack Overflow is Cooked #464 Malicious Package? No Build For You! #463 2025 is @wrapped #462 LinkedIn Cringe #461 This episdoe has a typo #460 Overlooked Python Typing #459 Inverted dependency trees #458 I will install Linux on your computer #457 Tapping into HTTP #456 You're so wrong #455 Gilded Python and Beyond #454 It's some form of Elvish #453 Python++ #452 pi py-day (or is it py pi-day?) #451 Databases are a Fad #450 At-Cost Agentic IDE Tooling #449 Suggestive Trove Classifiers #448 I'm Getting the BIOS Flavor #447 Going down a rat hole #446 State of Python 2025 #445 Auto-activate Python virtual environments for any project #444 Begone Python of Yore! #443 Patching Multiprocessing #442 Cloud bills in scientific notation #441 It's Michaels All the Way Down #440 Can't Register for VibeCon #439 That Astral Episode #438 Motivation time #437 Python Language Summit 2025 Highlights #436 Slow tests go last #435 Stop with .folders in my ~/ #434 Most of OpenAI’s tech stack runs on Python #433 Dev in the Arena #432 How To Fix Your Computer #431 Nerd Gas #430 Or you go to jail #429 Nitpicking Python #428 How old is your Python? #427 Rise of the Python Lord #426 Committing to Formatted Markdown #425 If You Were a Klingon Programmer #424 We Will Test in Production #423 Traveling the Python Universe #422 You need 4 spaces #421 22 years old #420 90% Done in 50% of the Available Time #419 Is your back end popular? #418 I'm a tea pot #417 Bugs hide from the light #416 A Ghostly Episode #415 Just put the fries in the bag bro #414 Because we are not monsters #413 python-build-standalone finds a home #412 Closing the loop #411 TLS Client: Hello <<guitar solo>> #410 Entering the Django core #409 We've moved to Hetzner write-up #408 python-preference only-managed 3.13t #407 Back to the future, destination 3.14 #406 What's on Django TV tonight? #405 Oh Really? #404 The Lost Episode #403 A machine learning algorithm walks into a bar… #402 How to monetize your blog #401 We must replace uWSGI with something else #400 Celebrating episode 400 #399 C will watch you in silence #398 Open source makes you rich? (and other myths) #397 So many PyCon videos #396 uv-ing your way to Python #395 pythont compatible packages #394 Python is easy now? #393 Dare enter the Bash dungeon? #392 The votes have been counted #391 A weak episode #390 Coding in a Castle #389 More OOP for Python? #388 Don't delete all the repos
The pendulum of time swings beautifully in PyPI
Michael Kennedy (@mkennedy) · 2017-12-14 · via Python Bytes
Collapse transcript

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

00:05 your earbuds. This is episode 56, recorded December 12th, 2017. I'm Michael Kennedy.

00:11 And I'm Brian Okken.

00:12 And we got a bunch of awesome stuff like always lined up for you. Before we get to it, Brian,

00:16 let's just say thanks to Rollbar.

00:17 Thanks, Rollbar.

00:17 Yeah, thank you, Rollbar, for supporting the show, tell you more about what they got going

00:21 on later. I want to hear the tick-tock of the pendulum, if you will.

00:26 I was reading an article called Dealing with Date Times Like a Pro in Python.

00:30 Which can be way harder than it should be, right?

00:32 Yes. And I think that there's things like Arrow and Maya that try to get so that, you know,

00:38 I really have to deal with date times directly. But this is actually a nice article on dealing

00:43 with date times if you want to use the direct library. However, at the end of it, they mentioned

00:48 Pendulum, which I hadn't run across before. So checking it out, there's a link here for the

00:53 Pendulum Python Date Times Made Easy. And the website is beautiful. But also the interface

01:01 to it, it looks really nice. I mean, you can do things like just import Pendulum and then

01:08 Pendulum Now in Europe, Paris, or in America, or something. And then you can do things like

01:15 add dates together and do, you know, subtract dates. And the normal things you have to do with

01:21 date times. But the just the model looks nice. I like it.

01:24 Yeah, it looks really, really nice. And the website is quite stunning. And you know, to me,

01:30 like on one hand, like, okay, whatever, it's documentation. On the other, it really shows the

01:34 people working on this actually care about this project. And it's not just some random thing

01:38 thrown on GitHub. So yeah, it's really cool. So you say like Pendulum.now and you give it a time

01:42 zone, say like Europe slash Paris. And then you can subtract weeks from it. Or you can,

01:47 one thing I like to do is put times relative to humans like a week ago, five seconds ago in 10

01:53 minutes. And so it just has a diff for humans, you know, and that's really nice.

01:58 I'm going to include in the show notes links to Arrow and Maya. And I think it's, it's a matter of

02:03 developer taste really, and what looks more natural to you. So check them all out and see what's nicer

02:09 for you.

02:09 Yeah, it's really nice. The other one to throw in here while we're thinking about all this is parsing

02:13 date times, which I think there's 700 different formats for date times and text, which is insane.

02:19 But I really like to use Python date util. So pip install Python dash date util, but just import

02:25 date util. And it compars like lots and lots of stuff. So you can just go here, load that into time,

02:31 you know, and that's, that's one more thing. But this is really, really slick. It has more

02:35 sort of time delta things like how many weeks, how many days, how many hours, as opposed to just like

02:40 the seconds, total seconds, the built in one really nice. I like it. Good find. So the next thing that

02:45 I want to talk about, we're going to talk about some web stuff, aren't we? So the next one I want

02:48 to do is, it's sort of a web thing, but it doesn't really have to be it's any kind of service or long

02:53 running thing. So one of the things that can be a challenge with web applications is long, long

03:00 running tasks or tasks that are slow, but you don't really need to like wait on their outcome.

03:04 So I'll give you an example. On my training website, training.talkpython.fm on that site,

03:10 there's a capability to email everyone in a class. And it turns out, if you in the same request,

03:19 actually email thousands of people, one at a time, like through Amazon SES or something that

03:25 request times out, and then you've emailed some people and you don't know how far you got,

03:31 you've got to go figure out how to rewrite that some other way, right? That's a problem.

03:35 Yeah. So there's certain things like email, like logging, like other sort of kick this job off and

03:41 forget about it, that would be much better served in some sort of asynchronous way. One of the best

03:46 things you can do to add scalability to your app is to push those kinds of things onto some background,

03:50 sort of get to it when you can style. And probably the most formal way is to use some kind of queuing.

03:57 So this, the thing I want to talk about now is this article called Flask, asynchronous background

04:01 tasks with Celery and Redis. Although it has nothing really to do with Flask, although it just

04:06 uses Flask as an example. It could be Django, it could be Pyramid, like really it's the Celery bit

04:10 that's interesting. So you take Celery as the work, the worker, right? It's going to run back there.

04:15 It's going to look at the Redis message bus. And what you do is you just kick jobs off to it,

04:21 and it'll just start pulling them off and working on them. So what I could have done is said,

04:24 I want to email, you know, 3000 people. So go to the database, get the 3000 people and just put 3000

04:30 email this person jobs onto a Celery queue and been done straight away. And it would just, you know,

04:36 do it over the next minute or two. Actually, that's pretty cool. Yeah, I've got my the wheels are

04:40 turning in my head thinking things that I want to use Celery for. I know, I feel the same way. It's

04:44 really nice write up of how you like walk through these things. So it talks about using the Celery client to

04:48 connect Flask to Celery, the Celery worker process, the message broker that works with the

04:54 Redis back end. And the other thing that's interesting about this is so often these Python

04:59 examples, these especially Python web examples are done on macOS or Linux, and this is all on Windows.

05:05 And I don't think Redis is even supported on Windows or Celery, one of them. I think it's Redis. It's not,

05:11 there's like a, an unofficial build or something. So I think it's kind of extra interesting to show

05:16 this other angle and show people how to do it where it might not be so obvious. Also something

05:21 like taking on Celery, it's kind of nice to look at an example project to see how it's been used,

05:26 because just jumping right into the entry of the documentation can be a little scary sometimes.

05:31 Here's a nice little simple example and take it and do what you will with it. Yeah. Well,

05:35 we have another web example that I liked in it. This is from Bob Belderboss of PyBytes. He wrote a

05:43 guest article on real Python called building a simple web app with bottle SQLAlchemy and the

05:49 Twitter API. And the reason why this caught my attention is because I was curious about having some

05:55 way to interact with Twitter and Python. So I think I'm going to walk through this a little bit. And

06:00 from start to finish, it's a project that pulls, it isn't pushing things into Twitter,

06:06 it's reading Twitter and then displaying them on a, a little bottle website that they pushed up to

06:12 Heroku. And that's kind of cool that they document everything from start to finish for this.

06:17 Yeah. And it has the deployment bit as well, like pushing it to Heroku and making it work there,

06:22 which is also kind of cool because your web apps are fun, but they belong on the web, not your laptop.

06:27 It's on my queue of things to, on my salary queue of things to learn because I'm, I'm busy learning

06:33 Flask at the time, but maybe I'll check this out next. Yeah. It sounds really interesting. Definitely.

06:38 Nice job, Bob. Now, before we get on to talking about something that's actually not on the web,

06:45 but to do with Python, let me just tell you a quick story of yesterday. Yesterday I decided,

06:52 let me see how far I can push the performance of uWSGI and NGINX on the talk Python sites.

06:59 Luckily for you, Brian, I didn't do this on pythonbytes.fm, but like, all right, I think I can push

07:06 the parallelism out better. I could crank up the number of threads. I can crack open the process

07:11 affinity, processor affinity. So like get the maximum parallelization out of uWSGI, which is one of

07:18 the better sort of application tier worker process web servers for Python. Okay. So that seemed like a

07:26 good idea, right? Yeah. Turns out something about the threading was bad and I don't know what it is.

07:32 I don't really care to look into it, but I started getting roll bar notifications saying that the template

07:40 files could not be found for the website, which has been basically largely unchanged for months.

07:48 And then it couldn't convert this template to a string and all sorts of random errors. And I'm like,

07:54 what is going on? And there's some kind of corruption timing problem in this whole series.

07:59 And I would have, it happened like one out of a hundred thousand times. I mean, really,

08:04 really rare, but it started coming in like a couple of times yesterday. So I'm like, all right, well,

08:09 I guess we're going to turn that back down and turn it back down. Errors went away. And without roll bar,

08:13 I never would have known it. So if you guys want to make sure that your apps are working,

08:17 go check out roll bar, just pythonbytes.fm/rollbar and you sign up and you too may start getting

08:24 weird messages that you need to go look into. It'd be awesome. Yeah. Nice.

08:27 Yeah. So that was yesterday, but today I want to move on and talk about something that actually

08:34 covered way back on Talk Python, let's say about a 40 episodes ago. So not quite a year, 40 weeks ago.

08:41 And that was the Visual Studio Code extension written by a guy named Don Jayamana.

08:48 John Amani. Sorry about that. I'm sure I'm messing up your name. And he wrote a really cool Python

08:55 extension to basically add Python capabilities to VS Code. And it turned out to be the first or second

09:00 most popular thing in Visual Studio Code. It happened like millions of downloads. That's pretty cool,

09:05 right? That's very cool. Yeah. Yeah. And so one of the things I looked at, you know, when we spoke,

09:10 it's pretty interesting. He took, I'd say maybe 10 different packages, Jedi and other, you know,

09:16 Flake 8 and those types of things. And he basically wove those together into an extension for VS Code.

09:22 He didn't really build a huge amount, but he definitely put it together in a really, really usable way.

09:27 So that was, that was pretty cool. So today, this week, the news is that he is now officially hired by

09:34 Microsoft because of his open source project. That's nice. Really cool. Yeah. So here's a guy who started

09:39 an open source project and got this pretty influential job just because he had a really successful

09:45 plugin for this open source thing. So pretty, pretty cool. You know, it doesn't really mean many changes.

09:50 I just, there's a few more people working on the Python extension for VS Code, which if you're into VS Code,

09:56 it's a lot like Adam or a sublime. It's quite, quite nice. If that's your style of editor, it does a lot of

10:03 cool stuff. And so basically there'll be more people working on it, fewer bugs, faster turnaround.

10:07 The other big news is they're also hiring for a Visual Studio Code Python developer. So if you're

10:12 looking for a job and that sounds pretty awesome, you know, there's some really cool guys over there.

10:16 There's Brett Cannon, there's Steve Dower, some of the big hitters on the Python core dev team,

10:21 in addition to Don. So that might be worth looking into if that interests you.

10:25 Nice. So I feel like you're kind of doing this web crash course and getting into a lot of different

10:30 things on the web, right?

10:32 I'm trying to embrace the web a little bit more.

10:34 Nice. So what'd you find?

10:35 Yeah. So one of the things with, we talk about a lot of mechanics of how to get websites up

10:41 with Flask and Bottle and Django and all that. But sometimes the design of your website that,

10:49 as it turns out at the end, is like leaves a little bit lacking.

10:53 It looks like a developer designed it.

10:55 Yeah, it definitely looks like a developer designed it, which is usually better than when it looks like

11:01 like a database engineer designed it. But still, there's an article called a comprehensive,

11:07 it's on Smashing Magazine called a comprehensive guide to web design. It's a long article, but it's

11:13 all one page. And it's a, it's a nice, I think a good overview of the basically the basics of

11:20 make sure you have this stuff down and to make sure your website doesn't suck too bad.

11:26 That's really cool. I feel like design is one of those things that feels like a barrier to developers.

11:31 You're like, I'm not a designer. I can't do stuff that's pretty. I can't build these types of things.

11:35 But if you put in just a little effort, you can turn that barrier into a superpower because most

11:39 people don't have it. And it's actually not that hard if you just sit down and focus and try to study it

11:45 for a month or something. Especially a lot of times, like there's a lot of projects that get done, like

11:49 internal work projects or, or different tools for a small group of people that you don't have the money

11:56 to hire a front end designer. So something like this to go through and make sure that you do your breadcrumbs

12:02 appropriately and you put your search box in a findable place and some of these page structure

12:09 are reviews that are good to just make, make it more usable. And it, this doesn't add a lot of work to your

12:14 workflow. It actually, I think it takes away some of the stress of designing a web page if you're not a designer.

12:21 Yeah, it's cool. It gives you a framework to think through and stuff you got to do anyway. That's cool.

12:24 All right. Final item. What would you name the baby of requests and Selenium coming together to create some new library?

12:33 Well, I know the answer, but.

12:35 Requestium.

12:36 Requestium.

12:37 Maybe, maybe one of the candidates you throw out there, right?

12:40 Yeah.

12:40 So the thing I want to talk about is this thing called Requestium. And we have requests,

12:44 which everybody knows, super, super popular library for just downloading HTML.

12:49 And we have Selenium, which fewer people know, but is basically a headless Chrome browser.

12:55 There's other options as well, but let's say Chrome for now. And you control it from Python.

12:59 And so use them in different situations. Requests is super lightweight, takes no, very,

13:04 very few dependencies. I mean, it doesn't depend on say Chrome. It just depends on a few packages.

13:08 And you can download the HTML and do what you will with it. But if you happen to run into,

13:13 let's say an AngularJS or VueJS or any other JS site that has like a front end JavaScript framework

13:20 that basically requires the JavaScript to execute, to get the content, you end up with just a bunch

13:26 of curly braces that have no meaning when you hit it with requests, right?

13:29 Yeah. I didn't know that.

13:30 Yeah. You just get the HTML that's basically, here's where JavaScript will fill out the holes.

13:34 Good luck with that. You know what I mean? And so that's kind of useless. So you might use Selenium,

13:39 but you know, Selenium is way more heavyweight. So that Requestium basically merges the power of

13:44 requests, Selenium, and this thing called Parcel, which is like beautiful soup or Scrapey. It

13:49 understands HTML and lets you ask questions of it. So the idea is like, it's written for mostly when

13:55 you're doing requests, but that one time or two that you're like, oh, you need this login sequence

14:00 has to happen in a richer JavaScript way. And it lets you do crazy things like automatically switch

14:06 between request sessions and Selenium sessions. And it lets you basically, I think, share cookies

14:13 across them and all sorts of interesting stuff like that. So if you need like a little bit heavier weight,

14:18 then request, but not full on Selenium, here's a nice combo sort of marriage of the two.

14:23 Oh, that's nice. Cool.

14:24 Yeah. So very good for either testing or web scraping or some other, other types of things.

14:30 But if you need to test something that's JavaScript heavy, this is a pretty good,

14:33 pretty good option here.

14:34 Nice.

14:34 All right. Well, that's our news, Brian, at least the ones we've selected for everyone else. But how

14:38 about yourself? What do you got going on?

14:39 Well, I finally got a, a testing code episode out this not too long ago. I don't know if I brought it

14:45 up already.

14:46 I don't think so. Not here.

14:47 It was a nice interview with Catherine Jarmal or Kjam about testing and data science. And it's a

14:55 testing code episode 33, and it's been very well received so far. So a lot of people get some value

15:00 out of it.

15:01 Yeah, that's great. Catherine's done a bunch of cool work. So definitely go over there and check it out.

15:04 And the last thing I wanted to mention was I had asked people to leave Amazon reviews for books

15:10 that they like, including mine, hopefully. And so far, nine people have left reviews on Python testing

15:17 with pytest. So thanks a lot.

15:19 Yeah, that's great.

15:19 How about you? Any news?

15:20 Not a whole lot of news. I'm working hard, but I'm getting things ready to talk about. Nothing

15:26 to talk about yet, but someday soon. I guess the big thing I have coming up, I just recorded

15:31 some nice talk Python episodes. One actually on optimizing web servers. And then later this week,

15:38 I'm recording one, which is a panel session on machine learning and artificial intelligence at

15:44 the Large Hadron Collider and in particle physics.

15:46 Oh, that sounds interesting. And the last few episodes that you've put out, I mean, you always

15:52 have good episodes, but I've really enjoyed the last few quite a bit.

15:54 Thanks a bunch. Yeah, same for you. All right, man. Well, thank you for sharing this stuff. And

16:00 everyone, thank you for listening.

16:01 Thank you.

16:02 Thank you for listening to Python Bytes. Follow the show on Twitter via @pythonbytes.

16:07 That's Python Bytes as in B-Y-T-E-S. And get the full show notes at pythonbytes.fm.

16:14 If you have a news item you want featured, just visit pythonbytes.fm and send it our way. We're

16:18 always on the lookout for sharing something cool. On behalf of myself and Brian Okken,

16:23 this is Michael Kennedy. Thank you for listening and sharing this podcast with your friends and colleagues.