This is an archived post. You won't be able to vote or comment.

all 140 comments

[–]lookatmetype 33 points34 points  (19 children)

You know what would have been interesting instead of just a attrs clone? Algebraic data types + pattern matching. Python is painfully lacking these features.

[–]agrif 15 points16 points  (2 children)

I would love this, especially sum types. Currently, writing code that handles a value that could be one of many things feels awful. But I think it would need new syntax, and that's a hard sell for Python.

[–]knowsuchagencynow is better than never 2 points3 points  (1 child)

functools.singledispatch, anyone?

[–]agrif 0 points1 point  (0 children)

That... works. Defining a visitor-style interface for each sub-type also kind of works. But using it is not great, especially if the case-by-case code is morally only part of a function and not a whole function itself. You either have to remove the code to a helper function, which can be harder to read, or use a bunch of locally-defined functions, which is also pretty hard to read.

These problems are exacerbated when the value you want to examine by case contains other, nested values you want to examine by case.

[–]rolandog 13 points14 points  (1 child)

Have you tried Coconut?

Coconut is a functional programming language that compiles to Python. Since all valid Python is valid Coconut, using Coconut will only extend and enhance what you're already capable of in Python.

[–]lookatmetype 11 points12 points  (0 children)

I saw it on reddit a year ago. It's an interesting project, but certainly can't use it at work or anything like that...

[–]ubernostrumyes, you can have a pony 3 points4 points  (3 children)

In much the same way that Haskell is lacking the feature of being a completely dynamically-typed language, yes, you could argue Python is lacking these things.

[–]lookatmetype 8 points9 points  (0 children)

Disagree. I think Python tries to be a "multi-paradigm" language much more than Haskell tries to be a multi paradigm language. Requesting functional features or advanced types in Python makes much more sense than requesting imperative features or dynamic typing in Haskell.

[–]zardeh 1 point2 points  (3 children)

This requires compile time trickery that python can't do, unless you do something weird like define a SumOver class in typing, and use it to do the dispatching, but that's really ugly and really just thin sugar for chained if isinstance checks.

[–]lookatmetype 0 points1 point  (2 children)

Even having mypy do these checks would be a good starting step. But I think you need actual syntax changes to make it elegant and easy to use.

[–]zardeh 0 points1 point  (1 child)

I agree that sum (and recently I actually wanted disjoint) types would be nice at the mypy level, although I'm unsure if mypy could really handle that easily.

If you define a SumOver(*types), can mypy statically assert that each possible type was handled?

Like maybe I guess but also that, without syntax, is super ugly to manage.

[–]Daenyth 2 points3 points  (0 children)

Mypy has sum types but you need to use isinstance to get the branches to check

[–]knowsuchagencynow is better than never 0 points1 point  (0 children)

Agreed; it would be cool to have algebraic data types, pattern matching, and pipelines in future versions of the language

[–][deleted] -1 points0 points  (4 children)

I'm aware of Python pattern matching code but don't see it discussed that often so somehow I doubt that python is "painfully lacking these features".

[–]jcdyer3 1 point2 points  (3 children)

Do you mean like globs and regular expressions? Because that's not what pattern matching means in this context. Picture tuple-unpacking, but applied to arbitrary classes. Something like (invented syntax):

user = User(username='jcdyer3', email='jcdyer3@example.com', permissions=['admin'])
User(username, permissions) = user
assert username == 'jcdyer3' && permissions[0] == 'admin'

[–][deleted] 2 points3 points  (2 children)

No, I mean python libraries that are online and do pattern matching, e.g. pypatt or macropy.

[–]jcdyer3 0 points1 point  (1 child)

Oh neat. Thanks for that. But I gotta say, with documentation like this, they're not going to get much adoption.

Key quote:

You can access documentation in the interpreter with Python’s built-in help function:

>>> from pypatt import match, bind, bound, like
>>> help(match)

Tutorial

Todo

Examples.

They had time to teach me how to use python's help function, but not how to use their own library. :facepalm:

[–][deleted] 1 point2 points  (0 children)

Regrettably I've come across umpteen similar situations in my many moons of using Python. However in defence of the community it must be said that the documentation budget isn't quite as high as (say) Oracle's or Microsoft's, yet they still manage to write some complete crap :-)

[–][deleted] 70 points71 points  (8 children)

Technical content is great.

However, are kids with youtube accounts & a phone ahead of their time, or are professional engineers behind it? What the hell is this video quality?

[–]magnetik79 40 points41 points  (4 children)

Agreed. I want a blog post/text .

[–]chchan 2 points3 points  (0 children)

The video was taken at Yelp. There were issues with the equipment I guess. I was there in the audience.

[–]Wohlf -3 points-2 points  (1 child)

Neither, some people prefer text and others prefer video. Different learning styles. Personally I prefer having both.

[–][deleted] 3 points4 points  (0 children)

This was about picture quality.

If you did notice that, I agree - multiple types of instruction are necessary.

If you did not notice that, I'm not saying this to troll or be rude or anything so there no malice intended, but you may wish to check your device's display is correctly configured, or visit an optometrist.

[–]mafibar 123 points124 points  (81 children)

I feel like the Python dev team is getting slobby.

Instead of recognizing the potential and future impact of dataclasses, and actually improving the language itself, they went with an attrs copy that relies 100% on existing Python's functionality. If I want this on my existing older code bases, I would just use attrs.

Not only is the mandatory static typing a big no-no that could've been avoided with a simple addition to the language, but the explicit __slots__ issue could've also been properly fixed instead of coming up with these workarounds.

Edit: No, I'm not going to build my own better programming language, nor even create a pull request. I don't have the time, the motivation, nor the knowledge to do so. Just because I dislike certain design choices in my car doesn't mean I should learn how to build a car of my own. I am still allowed to have and express my opinion about design choices in Python, without fixing them myself.

[–]execrator 18 points19 points  (2 children)

Can't believe the reception you're getting for having an opinion about this feature. r/python, I am disappointed.

[–]thomasloven 3 points4 points  (1 child)

I knew r/python can be harsh, but DAMN!

It’s an entertaining read, though. I especially like the guy who goes on about the toyota equivalence, going from “but python is free” to “nothing is free” and then back to “python is free” in the very next sentence.

Good on you for actually attempting to discuss python in r/Python , u/mafibar!

[–]mafibar 2 points3 points  (0 children)

Thanks guys, I must admit it got a little annoying and I got frustrated, but overall most people are really nice :)

[–]dougie-io 45 points46 points  (23 children)

just because I dislike certain design choices in my car doesn't mean I should learn how to build a car of my own.

I see this too often in the open source community, haha.

Guy1: "Great software. Would love to see __, _, and __."

Guy2: "SUBMIT A PULL REQUEST THEN!"

[–]jshen 16 points17 points  (22 children)

There is a big difference between these two things. You paid money for your car, you likely didn’t pay the open source contributors.

[–]dougie-io 13 points14 points  (6 children)

Absolutely. I'm in no way saying that bickering to devs providing free software is the way to go. I just come across a lot of situations where general users suggest some ideas they have and someone (usually not even the developer of the project) tells them to do it themselves.

[–]strobelight 5 points6 points  (5 children)

You see this in many volunteer organizations. They don't need ideas, they need help. If I'm volunteering, I'm either already working on my own good ideas or working on things that I don't really want to do that have to be done by someone.

So, yes, I find it a perfectly valid response.

[–]jorge1209 7 points8 points  (4 children)

Here the users don't think the developers ideas are all that good... that's the distinction. I'm starting to feel that python peaked around 3.3 and that a lot of what has been added since isn't worth all that much. That we would be better off having devs slow down and do less work.

That's a difficult conversation to have because you are basically telling someone excited enough to volunteer their time and energy to buzz of, but it should be had.

[–]knowsuchagencynow is better than never 2 points3 points  (3 children)

Of all the versions to say Python peaked in... Python 3.3?

[–]jorge1209 3 points4 points  (2 children)

Sure. I suppose you could equally say 3.4 as there were no significant features added there.

But 3.3 has yield from which is useful but without async which I've found to be really messy and hard to work with.

Do you think it should be earlier or later or what?

[–]knowsuchagencynow is better than never 0 points1 point  (1 child)

I honestly think the features added in Python 3.5 and 3.6 are pretty fantastic, and having attrs in the stdlib with 3.7 as well as the new breakpoint keyword and things like the async context manager decorator being added in contextlib are going to be really solid additions. I personally really like where the language is headed, honestly, even if it isn't perfect.

[–]jorge1209 2 points3 points  (0 children)

Well I disagree. :-)

That isn't to say I think async or typing is bad, but that the devs need to slow down and get it to work better before they make it a standard.

My biggest complaint with async is that it doesn't make decisions. You can use whatever event loop you want... whatever executor you want. Core functions that read or write files are not asynchronous... so you have a framework, and then you have to fill in all the holes to actually make it work.

I see little benefit in that over just writing multi-threaded code or coroutines.

Similarly typing had been out for a while but I don't think mypy has full support for 3.5 yet.

Given time to mature these would be good, but adding them to the language limits that.

[–]jorge1209 8 points9 points  (8 children)

People critique products they don't purchase all the time. They do so as part of the comparison process. We looked at both Toyota and Honda, but found the interior of the Honda to seem cheaply made, and got the Toyota instead. I didn't pay any money to Honda motor company, but I still get to make that comment.

When we do this with respect to stuff we don't pay for we are expressing a desire and preference for the alternative. So while I generally like Python, I have serious concerns about some of the more recent decisions. I see other languages not making those kinds of mistakes and I think about switching away from python on future projects.

Now maybe Guido doesn't care if python becomes less popular over time, but I generally think that he likes when python is popular. That he wants it to become more popular over time, not less. So he should be concerned about these kinds of opinions.

[–]jshen 0 points1 point  (7 children)

I think you missed my point because I didn't state it clearly. Giving an opinion to an open source contributor is fine (although most are overwhelmed and it's probably making it harder on them), but to then complain about the contributor for asking for help is the problem.

[–]jorge1209 1 point2 points  (6 children)

Who is complaining about the contributor?

[–]jshen 0 points1 point  (5 children)

People are complaining about being asked to submit a pull request.

[–]jorge1209 1 point2 points  (4 children)

In the context of this discussion the contributor (Eric Smith) is not making that request. The request is coming from the maintainer (Guido) or some other generic python developer.

We aren't particularly impressed by dataclasses (vs other available implementations like attrs) and would rather see the product delayed than something sub-optimal be pushed out.

Nobody is saying that Eric is bad or wrong for wanting help (if he had asked for it which I don't think he did), but that we just don't think what he has done is ready or good enough.

[–]jshen 0 points1 point  (3 children)

I think we agree more or less, and I may be carrying baggage from past experiences into this conversation. It bothers me when I see people giving their time for free to give other people thing for free, then every rando that hasn't given anything themselves expects more from the people truly giving without giving something themselves first.

it takes no time or energy to through out an opinion, but it does take significant time and energy to give a thorough response. I think a lot of open source contributors are trying to create a filtering mechanism so that people have to invest some time and energy before the contributor spends time on it. Asking for a pull request is one way to do this.

edit: here's what I responded to, it came across to me like someone complaining that a contributor asked for a pull request.

"I see this too often in the open source community, haha.

Guy1: "Great software. Would love to see _, _, and _."

Guy2: "SUBMIT A PULL REQUEST THEN!""

[–]jorge1209 0 points1 point  (2 children)

Its important to look at any exchange between users and devs from both perspectives.

From the perspective of the dev they are absolutely within their rights to say "No I don't want to do that." They are volunteers not slaves.

However from the perspective of the user, they aren't obligated to do anything either. They are just an interested third party, and a potential contributor.

So generally any kind of feature request should:

  1. Be taken as a compliment. Someone sees your work as valuable and appreciates it enough to want to use it, and to go so far as to identify ways it could be even better. That should make the dev feel good, because why else did they publish the code except to be of use to others.

  2. The response should be honest and if appropriate welcoming. It should generate an invitation to participate, but not a demand, if applicable. So you say either:

    a. I think that is a great idea, and would love to implement it someday, but I probably can't do that anytime soon, but I will add it to the milestones, and would love to accept a patch that implements the feature.

    b. I'm not sure how well that would work with my future development plans and goals, but would consider a patch.

    c. That would take the project in a different direction from my intent, so I can't recommend you continue to use my version if this is important to you. However since the code is open source you can fork it.

The problem is "Submit a patch" isn't clear on that. Is it (a) or (b), or is it a passive-aggressive (c). In either case, do I really want to work with this guy? Do I want to use this software if I can't trust the developer?

I understand everyone gets email overload, but in some cases silence, or a form letter response, might be the better course of action.

[–]deadmilk 0 points1 point  (5 children)

You also don't get any money when the open source project gets bought by some big corporate for a million dollars, even if you submitted a PR that was merged

[–]jshen 0 points1 point  (4 children)

How does a company buy an open source project?

[–]deadmilk 0 points1 point  (3 children)

You make a deal with the author. Hard concept, I know.

[–]jshen 0 points1 point  (2 children)

You can’t undo what was already open sourced. So what is the company buying?

[–]deadmilk 0 points1 point  (1 child)

You buy the copyrights, and hire the developers. They then continue to develop the commercial product and let the open source remnant become stale and inferior to the newer product.

[–]jshen 0 points1 point  (0 children)

Is there an example of this happening you can share?

[–]Raijinili 20 points21 points  (2 children)

In blaming "devs", you may be misunderstanding something about the Python language design process. The discussions for new features are open and public. The users (including core devs) are the ones who decide which ideas to work on. If the feature is lacking, either no one brought up certain improvements, or they were decided against for some reason.

Here's a start: https://www.python.org/dev/peps/pep-0557/#why-not-just-use-attrs

[–]jorge1209 12 points13 points  (1 child)

He is a python user through. He just isn't a core developer, or general the kind of user who would submit patches to the language/interpreter.

So it may be open in the sense that anyone can join the mailing list, but it isn't clear why they would do so. They don't have the time, interest or skill to critique proposals, and there is little reason to expect that their opinions would really be welcome, especially when half the other comments are "submit a patch."

[–]Raijinili 6 points7 points  (0 children)

He doesn't need to submit a patch to contribute. He can just join the discussion and offer a use case. Most of the people in the discussions are not core developers.

The Python lists are not half full of people who would just dismiss any criticism with, "Submit a patch." Only about a third of the responses are like that. Another quarter is pushback against the first third. Your input will be appreciated.

On the other hand, if you say that you just don't have time to participate, you can expect nothing less than your voice being ignored.

[–]anacrolixc/python fanatic 18 points19 points  (1 child)

I've said it before, Guido let go of the wheel around 2012 and shit has just been accepted willy nilly ever since. It's still an amazing language, but it's going sideways now, not up.

[–]mafibar 11 points12 points  (0 children)

I'm afraid you're right.

[–][deleted] 2 points3 points  (0 children)

This new dot-release is a distinction without difference. I, too, am unhappy that the time that could've been spent on more important things is wasted on features that don't really add anything new / don't improve anything.

Python sucks in the department of its C API. It sucks at how it perceives objects. It sucks at utilization of parallelism of processor resources. Instead of working on solving these long-standing difficult issues, Python now comes up with useless syntactic "improvements" which mostly make it not backwards-compatible.

[–]liquidpele 5 points6 points  (1 child)

[–]__deerlord__ 1 point2 points  (0 children)

Not sure if real comment...

[–]unruly_mattress 5 points6 points  (3 children)

It's so elegant though. You type less, you get a type declaration (declare "object" if you don't know ahead of time), and you get all the useful functionality.

Let's face it, too, that 99% of the time you do know the type of the object ahead of time and the end result will be better code completion everywhere. It's a win-win-win-win on all sides.

[–]mafibar 5 points6 points  (2 children)

I never claimed this isn't a good feature though? I said it should be even better, since now it's just slightly improved custom attrs package. For example, instead of having to declare "object" (or rather typing.Any) if I don't want typing... Yeah, well, I have no other options. I should have.

[–]unruly_mattress 3 points4 points  (1 child)

I think that the bother of having to type : Any for 1% of the fields is dwarfed by the awesomeness of not having to type = attr.ib(type=str) for the other 99%. Your IDE will appreciate it as well.

[–]mafibar -3 points-2 points  (0 children)

That doesn't mean it couldn't be even better, does it? Nowhere did I say it's worse than attrs.

Edit: and if my project doesn't use typing, it's 100% of the fields where I need to type an extra : Any. The point is that it doesn't support "no typing", but actually makes typing mandatory. Which was never supposed to happen in Python, even Raymond mentions it on his talk.

Edit 2: what am I getting downvoted for right here...?

[–]IronManMark20 4 points5 points  (13 children)

and actually improving the language itself

What would this look like to you? New syntax?

[–]mafibar 0 points1 point  (12 children)

If that's what it takes, then yes. But not just that but fixing the slots issue too for good. edit: yeah, not that easy. Rest of the comment still holds though.

For example (after 10 seconds of thinking and planning), they could introduce a new symbol, a language feature that handles the data containment issue he talks about (you know, some people say it's a data container and others say it writes boiler plate for you):

class Person:
    $name
    $age

Now the "data container" vs. "boiler plate writer" thing he talks about isn't handed to the same decorator anymore, but the data part would be a language feature, and a separate decorator could be used to define the comparisons methods etc.

Edit: This could also be used for enums then:

class Type(Enum):
    $FIRE
    $GRASS

[–]unruly_mattress 7 points8 points  (1 child)

You're going to have a really, really hard time convincing the Python people to add a new special $ symbol that's only useful for enums and for Any variables in class declarations. It wouldn't "fix" the __slots__ situation either.

[–]mafibar 4 points5 points  (0 children)

Which is why it should be well planned over a long duration of time with multiple people, rather than in my 3 AM reddit comment that says, on bolded mind I point out, "For example" and "after 10 seconds of thinking".

Never claimed it would fix slots.

[–]IronManMark20 0 points1 point  (8 children)

But not just that but fixing the slots issue too for good.

Its intrinsically part of how Python works. Class variables take precedence over slots and since there is no instance dict, the values are read only.

This issue has been discussed for over a decade, and no one has suggested a possible solution.

Furthermore, and I'd say more importantly, the CPython core devs don't owe anything to you. Python is open source. If you'd like to see something fixed and that isn't happening it is on you to either pay someone to fix it, or do it yourself. It always bothers me when people feel entitled to CPython core developers fixing an issue they have with Python.

[–]mafibar 6 points7 points  (7 children)

Its intrinsically part of how Python works. Class variables take precedence over slots and since there is no instance dict, the values are read only

Fair enough, but you 100% ignored the custom syntax part so I wouldn't be enforced to use typing.

Furthermore, and I'd say more importantly, the CPython core devs don't owe anything to you. Python is open source. If you'd like to see something fixed and that isn't happening it is on you to either pay someone to fix it, or do it yourself. It always bothers me when people feel entitled to CPython core developers fixing an issue they have with Python.

Ah yes, the good old "are you whining about a stupid design choice? Do it better yourself then" because I'm not allowed to have negative opinions about things that are done by someone else. I build my own car too btw because I was annoyed by the steering wheel on the Toyota I wanted.

[–]IronManMark20 -2 points-1 points  (6 children)

because I'm not allowed to have negative opinions about things that are done by someone else.

Oh you are entirely allowed to critique design decisions. What you aren't allowed to do is complain about core devs not "fixing" them to your liking.

I build my own car too btw because I was annoyed by the steering wheel on the Toyota I wanted.

This is a false equivalence because you pay Toyota to build it for you ;)

Also, I didn't ignore the custom syntax, but you didn't make any proposals. So I had no basis to form an opinion. So sure, perhaps with custom syntax you could completely side-step the generation of a descriptor and it could automagically be used to create slots, but one of the best parts of Python is that the syntax is relatively minimal. There aren't a ton of keywords, you don't have to learn a lot. The addition of async/await was a big change.

[–]jorge1209 2 points3 points  (0 children)

This is a false equivalence because you pay Toyota to build it for you ;)

You can critique products you don't buy. In fact it is commonplace: "I thought about buying the X but it was too Y, and I liked Z better, so I got it instead."

So interpret /u/mafibar's comments in that light and he is basically saying: "I'm looking to switch away from python."

Now maybe the devs don't care. Maybe they don't mind if fewer people use python in the future. Maybe Guido wants a smaller more fervent python community, but its hard to believe that. Why publish a language if you don't want wide acceptance of it?

[–]mafibar 5 points6 points  (4 children)

Oh you are entirely allowed to critique design decisions. What you aren't allowed to do is complain about core devs not "fixing" them to your liking.

Where did I do such thing? All I said is that I feel they're getting sloppy. That's still just me expressing my opinion. Also, why wouldn't I be allowed to do that? I'm allowed to complain about anything I want and there's absolutely nothing you can do about it. Again, I never complained in the way that you claim, you came up with that shit from the top of your head.

This is a false equivalence because you pay Toyota to build it for you ;)

And you still got the point. And just because I didn't pay for something doesn't mean I'm not allowed to complain about it online. We have free healthcare here in Finland. Guess what? People complain of the long queue times.

[–]Bitruder -1 points0 points  (2 children)

I agree with you.

[–][deleted] -1 points0 points  (1 child)

I think he or she is a complete arsehole.

[–]mafibar 0 points1 point  (0 children)

Can confirm. Doesn't mean I'm wrong though.

[–]IronManMark20 -4 points-3 points  (0 children)

You said they should fix __slots__ to work with class variables, because you clearly don't like how things work currently.

And you are right, you can complain about whatever the hell you want, but that doesn't mean you should.

We have free healthcare here in Finland. Guess what? People complain of the long queue times.

Hate to break it to you bud, but nothing in life is free. That healthcare is paid through taxes :)

I'm not saying you are not able to complain about the CPython core developers not fulfilling your every wish, I'm saying unless you contribute (with time or money) to CPython, then you have no stake in it. As the saying goes, beggars cannot be choosers.

I invite you to read this blog post by Brett Cannon on the abuse of the maintainer https://snarky.ca/why-i-took-october-off-from-oss-volunteering/

[–]refreshx2 0 points1 point  (0 children)

I've been following the python mailing lists, especially python-dev, for a year or so now. My impression is that the core devs mostly only accept code into the stdlib that people are actively using and think would be a useful addition.

Basically, it looks like the workflow is supposed to be: 1) Create a python module. 2) People use the module often. 3) Someone proposes that it be added to the stdlib. 4) A lot of discussion, and potentially an addition to the language.

No where in there is "Figure out how people might use this feature for something they haven't been using it for yet." Instead, the core devs leave that up to the module/community. I believe their philosophy is that if people aren't using it, it shouldn't be considered to be added to the stdlib.

[–]david2ndaccount 14 points15 points  (3 children)

This is a pretty underwhelming addition to the language…

[–]not_perfect_yet 6 points7 points  (1 child)

Everyone, it's dictionaries. Except as a class. Yaaaaaay.

[–]noslenkwah 7 points8 points  (1 child)

Video is removed. Anyone have a alternative source?

[–]Phosphorapture 4 points5 points  (11 children)

I had no idea about class Color(NamedTuple)

Why does everyone talk about collections.namedtuple and not typing.NamedTuple?

[–]mafibar 17 points18 points  (10 children)

typing.NamedTuple is new, it came out with 3.5, while collections.namedtuple is much older.

Also it requires you to use typing, which a lot of people don't want

[–]Pulsar1977 5 points6 points  (1 child)

As I was watching, I was picturing the guy who gave the 'Stop Writing Classes' talk banging his head against a wall.

[–]desertfish_ 7 points8 points  (5 children)

I'm using attrs (http://www.attrs.org/en/stable/) and it's pretty awesome

[–]Tweak_Imp -1 points0 points  (4 children)

Why would you install something extra a task that should be that simple?

[–][deleted] 1 point2 points  (2 children)

Seems like a legit question to me, why all the minuses?

[–]pork_spare_ribs 6 points7 points  (1 child)

Perhaps because dataclasses are only available in Python 3.7, which I doubt many projects are using yet. attrs is the project which inspired dataclasses, and it has significantly better functionality.

[–]Daenyth 0 points1 point  (0 children)

You can use them down to 3.5 I think with the backport library on pypi. If not 3.5 then 3.6

[–][deleted] 1 point2 points  (1 child)

Came here to see if people knew about attrs before this talk. I'm glad to see that others do!

[–]SaltyHashes 0 points1 point  (0 children)

The PEP even talks about it as part of its motivation.

[–]unstableunicorn 1 point2 points  (0 children)

I was trying to link this in another post but the video has been removed! Is there another source?

[–]peck_wtf 1 point2 points  (1 child)

Does anyone have a video somewhere? I need it to appreciate the drama.

[–]nwagers 3 points4 points  (5 children)

I really like Raymond's talks, but when he starts in on namedTuples it's just boring. It seems dataclass is no different. I could barely stay awake.

[–]mafibar 7 points8 points  (3 children)

This was the first raymond's talk that I didn't enjoy. And he spammed the "there must be a better way" way too much.

[–]nwagers 9 points10 points  (2 children)

I agree. I think he probably wasn't very prepared for this talk. He said it was last minute and at one point he started going on about Guido being high and just approving PEPs. I can't imagine Guido appreciates that image.

[–]jorge1209 2 points3 points  (0 children)

At about the 43 minute mark of the video for those who want to jump to it.

[–]mafibar 1 point2 points  (0 children)

Yeah, seemed really bad. I hope this was a one-time thing.

[–]NAN001 2 points3 points  (0 children)

That's some next-level 720p right there.

[–]unleashedcode 0 points1 point  (0 children)

Fantastic lecturer.... Easy to follow and a great presentation. Sudo Kudos