ptmcg
ptmcg-pm.bsky.social
ptmcg
@ptmcg-pm.bsky.social
Author/maintainer of pyparsing, littletable, plusminus, logmerger; co-author of Python in a Nutshell 4th edition
There's no link in this article, but if you like these pieces, many are available as phone cases and laptop skins at www.gelaskins.com/search?q=pau...
Search: 109 results found for "paul mcguire"
Personalize and protect your iPhone, iPad, MacBook, Dell, Microsoft and Samsung devices with artist-designed and custom skins and cases.
www.gelaskins.com
January 31, 2026 at 2:36 PM
Even though they have refactored pyparsing out of packaging, I'm proud of its prior inclusion in this core Python component.
January 10, 2026 at 6:58 AM
Add `time.sleep((366 if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0) else 365)*24*60*60)` to your loop, and you can just leave it running (barring future leap seconds).
December 31, 2025 at 9:15 AM
A TINY script for finding prime numbers
November 26, 2025 at 5:23 AM
The TINY interpreter was written with AI assistance (Junie in PyCharm), using the AI-targeted best practices that ship with this release of pyparsing. The interpreter examples include a transcript of the AI session, including prompts and the corresponding AI plans and actions taken.
November 26, 2025 at 3:52 AM
I just released version 0.13.0, with some significant performance speedups, and visibility to loading time while building the display DataTable. Changelog here: github.com/ptmcg/logmer...
November 15, 2025 at 5:08 PM
But do you pronounce it "toople" or "tupple"?
October 9, 2025 at 7:16 AM
And even a "<<=" operator!
October 1, 2025 at 12:14 PM
With the upcoming release of #pyparsing 3.3.0, this code would emit DeprecationWarnings: nestedExpr is deprecated in favor of nested_expr, and parseString in favor of parse_string. A conversion utility ships with pyparsing to auto-update all of these pre-PEP8 names to PEP-8 compliant snake case.
September 29, 2025 at 7:26 PM
`operator.attrgetter("first")` and `operator.attrgetter("last")` would work here too. `attrgetter` can also drill down into the structure of an object, like `operator.attrgetter("address.postal_code")`. Best of all, attrgetter runs at C speed, when lambdas are the Pokey Little Puppy of Python.
September 29, 2025 at 4:38 PM
Get a post-it note and write CUT ME on it. Attach it to the jacket's coat tail, but do so surreptitiously to avoid embarrassment.
September 29, 2025 at 3:17 PM
I pushed out version 3.3.0a1 late yesterday, so that folks with existing apps can upgrade their code from the deprecated pre-PEP8 API, or to try out the AI instructions to generate a new parser app. There is a discussion link here: github.com/pyparsing/py...
Pyparsing 3.3.0a1 · pyparsing pyparsing · Discussion #620
Supports Python 3.14 and free-threaded 3.14t. (Note: this does not mean that pyparsing is thread-safe, simply that pyparsing can safely run using the free-threaded build of Python.) The version 3.3...
github.com
September 29, 2025 at 2:05 PM
This pigment is a plot device in the book "Sacre Bleu", a fantasy/light horror with a heavy dose of art history, set in Paris during the Impressionist period.
September 29, 2025 at 7:31 AM
I should have added the #Art and #DigitalArt hashtags (always forgetting those hashtags...) :shrug-emoji:
September 28, 2025 at 4:43 PM
Oh, and you can type hint the hh variable as:

hh: Heapq[tuple[str, int]] = Heapq()
September 28, 2025 at 1:11 PM
Here is a Heapq class wrapper around those heapq functions, if you really want to en-class-ify them.

Code is in the ALT text.
September 28, 2025 at 1:09 PM