Hacker Blogs
Work in progress: 15,409 of 181,233 sites checked so far, more every week · updated 2 Nov 2026Missing a blog? Tell us

Top all-time · #545

G

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.

Visit the blog
203mentions?
7recommend?
109HN people?
2008–2025first – last linked?
Links on Hacker News per year · peak 37 in 2016

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?

  1. Unyielding (Concurrency Is Hard)
    22 people · 42 mentions · first linked 2014-02-28
  2. Using attrs for everything in Python
    9 people · 9 mentions · first linked 2016-08-12
  3. Python Software You Can Use
    7 people · 9 mentions · first linked 2015-09-12
  4. When you install un-signed code into your editor, it might as well be malware
    6 people · 6 mentions · first linked 2015-11-12
  5. Toward a “Kernel Python”
    5 people · 5 mentions · first linked 2019-06-14
  6. Python packaging is good now
    4 people · 5 mentions · first linked 2016-08-14
  7. I Want a New Duck (2020)
    4 people · 5 mentions · first linked 2020-07-22
  8. Interfaces and Protocols in Python
    4 people · 5 mentions · first linked 2021-03-16
  9. Stop Working So Hard
    4 people · 4 mentions · first linked 2016-01-17
  10. What Am Container
    4 people · 4 mentions · first linked 2016-10-27

What Hacker News says?

  1. 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”
  2. Submitted Never run ‘python’ in your downloads folder as a story · 322 points

    HN discussion
  3. This 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”
  4. Submitted Using attrs for everything in Python as a story · 246 points

    HN discussion
  5. Here’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”
  6. Submitted Email Isn’t the Thing We’re Bad At as a story · 203 points

    HN discussion
  7. I 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”
  8. Submitted Python packaging is good now as a story · 160 points

    HN discussion
  9. With 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”
  10. Submitted You Should Compile Your Python and Here’s Why as a story · 154 points

    HN discussion
  11. It 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.””
  12. Submitted A Container Is a Function Call as a story · 152 points

    HN discussion
  13. Agreed. 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”
  14. Submitted Attrs – the Python library everyone needs (2016) as a story · 151 points

    HN discussion
  15. kmike84 · 2015-02-03Recommends
    https://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?”
  16. Submitted Apple iOffer (Offer letter done the Apple way) as a story · 150 points

    HN discussion
  17. I 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”
  18. Submitted Interfaces and Protocols in Python as a story · 134 points

    HN discussion
  19. A 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”
  20. Submitted Interfaces and Protocols in Python as a story · 130 points

    HN discussion
  21. I 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”
  22. Submitted Twisted Python's lead hacker discusses Tornado as a story · 101 points

    HN discussion
  23. In 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”
  24. Submitted I Want a New Duck (2020) as a story · 96 points

    HN discussion
  25. I 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)”
  26. Submitted No More Stories as a story · 80 points

    HN discussion
  27. Do 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”
  28. Submitted 1Password Legitimizing Blockchain as a story · 63 points

    HN discussion
  29. More 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”
  30. Submitted The Sororicide Antipattern as a story · 37 points

    HN discussion

Search all of HN for glyph.twistedmatrix.com

Linked by the same people?