Python Decorators, redux

Tags

, ,

I wrote about Python decorators five years ago. [See Python Decorators, part 1 and Python Decorators, part 2] At the time, they were new to me, and I hadn’t thought of good use cases for them. Or really, even just good ways to use them.

But that changed during the last five years as I’ve had occasions to actually use decorators in code. They are extremely handy in certain situations. Today’s post takes a more useful look at Python decorators.

Continue reading

Byte Multiplication Trick

Tags

, , ,

I’ve been working on an arbitrary-precision numeric class (in Python) that stores numbers in what amounts to base-256 — that is to say, in machine-native binary. It differs from the variable-length integers in Python by supporting fractions (and from Python’s Decimal number type by being binary).

It occurred to me I could implement multiplication with a lookup table rather than actually doing the math (at the CPU level, that may be what in fact is going on). So, I thought I’d compare the two implementations.

Continue reading

Parsing Multipart Form Data

Tags

,

I have a suite of simple CGI webapps that run on my localhost Apache webserver. Long ago they were Perl scripts. These days they are Python scripts. However, in some areas, Python can be a moving target. Case in point, the cgi module and the FieldStorage dictionary object.

The module was deprecated since Python 3.11 and removed in Python 3.13. Which I just installed on my new laptop. Which broke all my webapps. Which forced me to update them. Which went fine except for one app using multipart form data. This post documents the changes and some new code I wrote.

Continue reading

Simple Python Tricks #18

Tags

,

Recently I found myself dividing my attention between watching the Minnesota Twins lose yet another ballgame and goofing around with an idea that popped into my head for no reason I can name.

The idea turned out better than imagined in terms of capability given its design simplicity, so I thought I’d document it here. It’s not super useful as is, but those relatively new to Python might find it educational or otherwise helpful.

Continue reading

Simple Python Tricks #17

Tags

, ,

This edition of Simple Tricks contains a random collection of bits and pieces. First, some cute bits from the interweb, then some more-or-less one-off bits I whipped up for a project and which were just barely useful enough to keep. (If for no other reason than to publish them here.)

I’ll end with a pair of simple Python functions, one to list the contents of an existing ZIP file, and one to create a new one from files in a subdirectory. The latter can be the basis for a more sophisticated archive function.

Continue reading

Simple Python Tricks #16

Tags

, ,

Simple Tricks #10 was about Python classes with a focus on the __new__ and __init__ built-in methods plus how to use them when extending Python’s built-in list, tuple, and dict classes.

In this edition of Simple Tricks, we’ll look at a number of possibly actually useful subclasses of Python’s dict class. Specifically, a “ticket” class, a “list of files” class, and an INI file class.

Continue reading

Rule #7: Never Repeat Yourself

Tags

,

In the previous post I semi-corrected a long-time oversight by revisiting the post The Thing About Constants and turning it into a Coding Rule, Rule #6. (I say “semi-corrected” because it really should have been Rule #3.)

In this post I semi-correct another oversight represented by the post The Synchronization Problem. It’s the other one that has been bugging me for a while because it should have been a rule (probably Rule #4). As they say, “Better late than never.”

Continue reading

Rule #6: Always Define Literals

Tags

, , , , , ,

It has been more than a few minutes since I posted a Coding Rule, so I thought it was high time I did. There are at least two things I’ve previously written about as important but didn’t elevate to Rules. Both have been bugging me; they should be rules. Today (and a week from now) I’m correcting that oversight.

To be honest, this Rule is so important, I’m not sure why I didn’t make it the third one. Rule #1 and Rule #2 are definitely more important, but the ones currently listed as #3 – #5 are not as important as today’s (they are very important, though).

Continue reading

Cellular Automaton Redux

Tags

,

In the previous post [see Elementary Cellular Automaton], I presented an implementation of a 1D elementary cellular automaton. Unfortunately, the code turned out to be an example of leaping into an idea without carefully reading the background information.

Long story short, while the code works and generates images, it doesn’t generate the correct images for all 256 rules. In this post, I present improved code that does.

Continue reading

Elementary Cellular Automaton

Tags

,

For quite some time, I’ve wanted to write some Python code to implement and elementary cellular automaton. In particular, I wanted to “investigate” (play around with) the famous Rule 110, which is known to be Turing complete.

Despite the name, this has nothing to do with cellphones. It’s a 1D variation on the well-known 2D Game of Life designed by British mathematician John Conway. [See the John Conway’s Life and Life With Class posts for Python versions]

Continue reading