Top all-time · #545
Glyph Lefkowitz
Personal blog · glyph.twistedmatrix.comprogrammingsystems
Glyph Lefkowitz writes Deciphering Glyph, a personal blog at glyph.twistedmatrix.com about programming and systems. Since 2008, 109 different Hacker News readers have linked it 203 times, most often “Unyielding (Concurrency Is Hard)”. It is still writing: the last post was on 2026-10-09, and you can follow it by feed.
Sometimes recommended · 7 of 40 sampled comments recommend it, 3 are critical?
Why HN links it
HN readers link Glyph Lefkowitz's posts mainly for 'Unyielding', the case for explicit yield points in async code over green threads, plus posts on string concatenation and packaging.
- Recommended for · 7 comments
- Called a good read, an excellent counterpoint on concurrency, and clearer than its precursor on typing.Protocols
- Criticised for · 3 comments
- One commenter finds its argument for explicit async unconvincing; another has a lot of issues with the article
Summarised by Claude from a sample of 40 HN comments that link here. Each comment is marked recommending, critical or neutral (citing without judging); how this works.
Deciphering Glyph, the blog of Glyph Lefkowitz.
Most-linked posts?
- Unyielding (Concurrency Is Hard)22 people · 42 mentions · first linked 2014-02-28
- Using attrs for everything in Python9 people · 9 mentions · first linked 2016-08-12
- Python Software You Can Use7 people · 9 mentions · first linked 2015-09-12
- When you install un-signed code into your editor, it might as well be malware6 people · 6 mentions · first linked 2015-11-12
- Toward a “Kernel Python”5 people · 5 mentions · first linked 2019-06-14
- Python packaging is good now4 people · 5 mentions · first linked 2016-08-14
- I Want a New Duck (2020)4 people · 5 mentions · first linked 2020-07-22
- Interfaces and Protocols in Python4 people · 5 mentions · first linked 2021-03-16
- Stop Working So Hard4 people · 4 mentions · first linked 2016-01-17
- What Am Container4 people · 4 mentions · first linked 2016-10-27
What Hacker News says?
An architecture like yours has certainly been done before, though AFAIK it never went mainstream. In particular, check out this post from Glyph Lefkowitz of Twisted Python fame, particularly the section about the (apparently dead) Mantissa application server: https://glyph.twistedmatrix.com/2008/06/this-word-scaling.ht...
Comment linking /2008/06/this-word-scaling.html
on “I'm all-in on server-side SQLite”Submitted Never run ‘python’ in your downloads folder as a story · 322 points
HN discussionThis post reminds me of a few old blog posts by Glyph Lefkowitz (of Twisted Python fame): 1. on what's wrong with web development: http://glyph.twistedmatrix.com/2009/09/oh-atangled-web-we-we... 2. on how to fix it: https://glyph.twistedmatrix.com/2009/09/web-untangled.html 3. earlier, on the problems with generating HTML through string concatenation: https://glyph.twistedmatrix.com/2008/06/data-in-garbage-out.... A…
Comment linking /2008/06/data-in-garbage-out.html
on “It’s time to kill the web app”Submitted Using attrs for everything in Python as a story · 246 points
HN discussionHere’s a more carefully elaborated version of the criticism of Graham’s sloppy thinking and lazy writing from his inequality essay: https://glyph.twistedmatrix.com/2016/01/premises.html Since life is short, that’s it for me for this thread.
Comment linking /2016/01/premises.html
on “Life is Short”Submitted Email Isn’t the Thing We’re Bad At as a story · 203 points
HN discussionI think you're right on one level: if your codebase is pervasively, implicitly multithreaded, then there's little value in explicitly marking yield points. But if your codebase is pervasively, implicitly multithreaded, then it's impossible to maintain without locking everywhere (and difficult even then), and combining async with (blocking) locking does not work well. In a codebase where concurrency is carefully cont…
Comment linking /2014/02/unyielding.html
on “Tokio 1.0 – async runtime for Rust”Submitted Python packaging is good now as a story · 160 points
HN discussionWith async/await you can tell from the type signature whether a given function might suspend, and then reading through the body you can see whether each function call is a non-suspending one or a possibly-suspending one. It makes it really obvious what's doing what. If suspension is your only effect then it probably doesn't matter (one unmanaged effect is ok), but when you have other effects that might interact, hav…
Comment linking /2014/02/unyielding.html
on “Rust 1.24”Submitted You Should Compile Your Python and Here’s Why as a story · 154 points
HN discussionIt may optimize down to string concatenation, or better yet streaming output, but you really shouldn't be doing that concatenation directly. https://glyph.twistedmatrix.com/2008/06/data-in-garbage-out....
Comment linking /2008/06/data-in-garbage-out.html
on ““Coding is basically just ifs and for loops.””Submitted A Container Is a Function Call as a story · 152 points
HN discussionAgreed. See also https://glyph.twistedmatrix.com/2008/06/data-in-garbage-out....
Comment linking /2008/06/data-in-garbage-out.html
on “Building Web Apps in Go”Submitted Attrs – the Python library everyone needs (2016) as a story · 151 points
HN discussionhttps://glyph.twistedmatrix.com/2014/02/unyielding.html is a good read - there are reasons why explicit sync-async "coloring" (i.e. await/yield) is better than green threads/coroutines which author admires.
Comment linking /2014/02/unyielding.html
on “What Color Is Your Function?”Submitted Apple iOffer (Offer letter done the Apple way) as a story · 150 points
HN discussionI still use gevent, even for brand new projects. I work much faster with it than with async/await, and the performance appears to be comparable. I've tried getting used to async/await, but I find gevent much simpler to work with, in spite of the arguments made in places like https://glyph.twistedmatrix.com/2014/02/unyielding.html . I wasn't aware of this particular inefficiency, but gevent is still fulfilling its pu…
Comment linking /2014/02/unyielding.html
on “We have to talk about this Python, Gunicorn, Gevent thing”Submitted Interfaces and Protocols in Python as a story · 134 points
HN discussionA common response here is to bash Adobe for its lax approach to software quality. I think it would be better for us to look in the mirror and ask ourselves what we can do to improve the robustness of our own software. A few ideas: - For production code, categorically reject any language that will happily treat an unset variable as an empty string. Or, if possible, configure the language implementation to run in a st…
Comment linking /2008/06/data-in-garbage-out.html
on “What Happened: Adobe Creative Cloud Update Bug”Submitted Interfaces and Protocols in Python as a story · 130 points
HN discussionI was just reading this last week talking about zope.interface https://glyph.twistedmatrix.com/2021/03/interfaces-and-proto...
Comment linking /2021/03/interfaces-and-protocols.html
on “Django 3.2”Submitted Twisted Python's lead hacker discusses Tornado as a story · 101 points
HN discussionIn Python I use async instead of threads for reasons unrelated to performance. https://glyph.twistedmatrix.com/2014/02/unyielding.html
Comment linking /2014/02/unyielding.html
on “Async-std: an async port of the Rust standard library”Submitted I Want a New Duck (2020) as a story · 96 points
HN discussionI still use and greatly prefer gevent to this day. They are indeed quite similar to goroutines. Asyncio is a different model, and more irritating for me to work with. (I'm sure this isn't the case for everyone. I'm just more productive with gevent, personally.) Performance is pretty close for both. I was disappointed to not see Python get an official green thread implementation. The counter-argument I commonly see c…
Comment linking /2014/02/unyielding.html
on “Why do we need Flask, Celery, and Redis? (2019)”Submitted No More Stories as a story · 80 points
HN discussionDo you really think packaging is still horrible? I tend to agree with Glyph Lefkowitz [0]. What issues are you still having? [0] https://glyph.twistedmatrix.com/2016/08/python-packaging.htm...
Comment linking /2016/08/python-packaging.html
on “Why People Should Learn Python”Submitted 1Password Legitimizing Blockchain as a story · 63 points
HN discussionMore like a "different Python" than a better one. Way more performant, way more verbose, and (IMO) way better concurrency. Not to go off on too much of a tangent, but I think asyncio is a huge mess and was a mistake. I still use gevent for everything in Python. https://glyph.twistedmatrix.com/2014/02/unyielding.html is frequently cited as an argument for why goroutines and gevent and green threads suck and why expli…
Comment linking /2014/02/unyielding.html
on “Go 1.13 Release Notes”Submitted The Sororicide Antipattern as a story · 37 points
HN discussion