RSSAmplifier

Blog

S.Lott -- Software Architect

slott56.github.ioRSS feed ↗100 posts

Latest posts

We Write Code By Hand

Here's an interesting group: https://handcraftedcode.org I'm an "absolutely no LLM" bigot. I need to do the thinking. I like to do the fiddly, tedious hard parts. I always have liked it.

OpenD6 Tools Project -- Released

I have (finally) released a usable DSL for OpenD6 spells and characters. See the OpenD6 tag for a bunch of related content. See https://github.com/slott56/opend6-tools for the final product. I doubt there will ever be a PyPI package. For the few who want to use these tools …

OpenD6 Tools Project -- Status

See the OpenD6 tag for a bunch of related content. I have a DSL for OpenD6 spells and OpenD6 characters. At this moment, the test suite statistics are these: Statements Misses Coverage 2701 166 94% Background The OpenD6 tools have two extensive DSL's. These differ in a profound way: Spell …

OO Design and Card Games

Lets look at my favorite OO-Design problem domain: card games. We'll compare the design of two games: Cribbage and Canasta. Why? Because they have three common abstractions: cards, hands, and a score. Overall the player's are dealt cards, form hands, and at some point, accumulate a score. Of course, all …

AI Generated Code Means Software Is Worthless

What does the AI bubble mean? It means software has no intrinsic value. Since software is worthless, creating good software is a waste of effort. This is a conclusion of reached from observing the software industry for a half-century Gather 'Round The Fire All You Youngs Once upon a time …

Experience Points and Levels

See Writing Project -- perhaps a bad idea . I'm trying to dig around in my old notes to pull together a "World Book" with a fantasy setting I think has a lot of good gaming opportunities. I have a problem, though. History History is my problem. Some of this world-building and …

Revisiting Old Ideas

See Writing Project -- perhaps a bad idea . I'm trying to dig around in my old notes to pull together a "World Book" with a fantasy setting I think has a lot of good gaming opportunities. More important, I've got a pile of details for a fairly lengthy campaign. This isn't …

A Writing Project -- perhaps a bad idea

I'm trying to push the envelope in my writing. I write a fair amount of non-fiction. https://www.goodreads.com/author/list/4537706.Steven_F_Lott . This is a comfortable spot for me. I've got some self-published titles: Pivot to Python: A Guide for Professionals and skilled beginners Unlearning SQL: “When your …

Another D6 Dice Mechanic -- Equiprobable Choices

When playing a game using D6 -- and only D6 -- we're sometimes confronted with a need to make a selection from equiprobable items. For example, pick a random day of the week: 7 choices, but only 6 sides to a die. What can we do? How can we select fairly among …

The human.json Protocol

See https://codeberg.org/robida/human.json . This content is human-generated. All the mistakes are mine, without the taint of AI slop. I've added the needed human.json , and can update it if you want me to vouch for your content, also.

OpenD6 Deep Dive -- Area Effect Aspect

I went deep into OpenD6, chasing an idea through a maze of strange shapes. See this extract from a Jupyter Notebook: Area Effect Aspect Volume Computations . It was a lot of fun to uncover two errors in the rules, and work out what could have been used instead. TL;DR …

Python Illustrated -- a Purrfect Book for New Programmers

Maaike and Imke van Putten’s delightful Python Illustrated follows innocent Wiesje on a journey to learn the secrets only Zia seems to know. The journey is long and filled with discoveries about Python as well as the ways Wiesje needs to adapt and grow. No, you’re not reading …

OpenD6 TTRPG DSL -- Spell Definitions

The OpenD6 Table-Top Role-Playing Game (TTRPG) has a complicated bit of accounting around the definition for magical spells and invocations. For me, the accounting suggested a need for software tools. This -- in turn -- forced me to invent a Domain-Specific Language (DSL) to work with OpenD6 spells. I like the OpenD6 …

LLM Vibe Coding or Illiterate Programming

BLUF Your LLM conversations are emphatically not Literate Programming. The term "Literate Programming" cannot include code with separate documentation. I won't call it "Illiterate Programming." Sad Story An LLM coder had a lot of things to say about productivity, and explained their approach. They wrote 800 or so words, and …

TTRPG Progress Report

See The eval() Conundrum for background. Also, see https://github.com/slott56/writing-tools . Permit me a long story about budgeting and a language to describe magic. The story leaves footprints that reveal the impossibility of making the right design choices up front. Important TL;DR. Almost all software design seems …

LLM Conference Talks 2

Please do not use an LLM to create a conference talk. Please. If you can't be bothered to put in the effort to write your own material, why should we put in effort to read the LLM slop you had your LLM post to the submission form? What's in it …

LLM Conference Talks

Please do not use an LLM to create a conference talk. Please. We want to hear your actual words in your actual voice We do not want diluted words created for you by sparkling auto-complete. We really don't. The vibe around LLM slop may seem better to you. But it's …

The Python Object-Oriented Programming 5th Edition

In time for your Holiday Reading. Want guidance on OO design in Python? Want a lot of concrete examples, fully tested? Master OOP fundamentals with hands-on examples and expert insights Learn design patterns and type hinting with real-world Python 3.13 code Develop scalable programs using testing and concurrency best …

A get_object_size() Function -- Again

BLUF You rarely need this. Python handles memory management for you. Except in an edge case where you have a lot of objects to work with. How many is a lot? Enough that your app crashes with MemoryError exception. Or, is consuming so much memory other processes have trouble working …

A get_object_size() Function [Updated]

BLUF You rarely need this. Python handles memory management for you. Except in an edge case where you have a lot of objects to work with. How many is a lot? Enough that your app crashes with MemoryError exception. Or, is consuming so much memory other processes have trouble working …

OO Design Principles: GRASP patterns

Some quotes to provide context. "I read several times that ideally I should avoid inheritance with ABCs and if I do, then from a standard class. That is, I should avoid creating a typical base and subclass construct that is used in a strategy pattern, for example." "If I look …

OO Design Principles: CUPID

Some quotes to provide context. "I read several times that ideally I should avoid inheritance with ABCs and if I do, then from a standard class. That is, I should avoid creating a typical base and subclass construct that is used in a strategy pattern, for example." "If I look …

OO Design Principles: SOLID

Some quotes to provide context. "I read several times that ideally I should avoid inheritance with ABCs and if I do, then from a standard class. That is, I should avoid creating a typical base and subclass construct that is used in a strategy pattern, for example." "If I look …

OO Design Principles: ABC's

Some quotes to provide context. "I read several times that ideally I should avoid inheritance with ABCs and if I do, then from a standard class. That is, I should avoid creating a typical base and subclass construct that is used in a strategy pattern, for example." "If I look …

The eval() Conundrum and Python-as-DSL

Many people will proclaim that the eval() function is reprentnatly evil. Feel free to skip the two rants. BLUF The eval() function is relatively easy to work with. Important Limit the globals to the fewest possible names. Eval() Rant A too-common claim is that we can't use eval() because an …

Humble Bundle Offer

This is delightful: Packt has this Humble Bundle including The Modern Python Cookbook . The Humble Bundle with The Modern Python Cookbook Since it's right arund my birthday, consider this discount my gift to you. Invest in yourself.

Gloom and Despair -- LaTeX Edition

I write all my books using LaTeX. Parts of LaTeX are (at first) confusing. Recently, I had a moment of despair when my LaTeX processing tools no longer worked. BLUF Don't panic. Gather the data. If the logs aren't good enough to reveal what's going on, fix the logs. The …

Some Recommended Reading

Q: "Can you recommend books that are good for a beginner wanting to learn python?" Me: "Depends on the person’s background..." Q: "They has a deep background in the problem domain. Recently they've been doing a lot of reporting and analytics using SQL." Okay. That's excellent. One of the …

The Payout From Learning

The back-story. See Coping With Complexity . See https://github.com/cloud-custodian/cel-python for the code base. Back around May 26, I created this branch. Today -- July 2 -- I've got the tests to pass. BLUF (TL;DR) I made mistakes. I spent a lot of time making a some significant mistakes …

An Investment in Learning

The back-story. See Coping With Complexity . See https://github.com/cloud-custodian/cel-python for the code base. I've reached the point where progress is clearly impossible. A bad decision a few weeks ago has reached it's inevitable conclusion. I've made a terrible mistake. About 1,000 lines of code -- and tons …

Coping with Complexity

I'm struggling with brain cramps trying to understand something my past self wrote. Current me needs to go outside and do something that doesn't involve software or complexity. Sadly, current me is trying to make one small change and it feels like the software has passed out of the realm …

Testing Your AI

We test software. We test people. My lawyer, all my various doctors, even the coffee bar on main street is subject to testing. The coffee shop proudly posts their score from health inspections. Want to know about food safety? Ask them. My professionals all have walls full of diplomas and …

Comma Comma

Ugh. A painful stretch of hours looking for a problem. Working on this: https://github.com/cloud-custodian/cel-python/wiki/Evaluation-Design . I need to address a performance problem and upgrade things generally to get them ready for 3.13 and 3.14. You know how it goes, right? I touched something …

Ransomware Cause and Effect

This: https://www.theregister.com/2025/05/12/opinion_column_ransomware/ Shabby IT infrastructure built with criminally low budgets. What did we expect? Of course there will be ruthless exploitation of weakness. Clearly, minimal IT budgets -- just enought to "keep the lights on" -- will provide avenues for exploitation.

Domain-Specific Language

Generally, I try to frown on Domain-Specific Languages. Often, a tidy set of related functions, or a group of class definitions with a few decorators can create something that's every bit as expressive as a DSL in native Python syntax. There are a few cases where a DSL can be …

Joomla Conversion

Recently, we talked about extracting data from complex relational databases. This is -- in a way -- another case study for my Unlearning SQL book. This is a description of what comes next after the "low-level" conversion. Warning: it's complicated. BLUF : Take the time to get rid of SQL processing. Unlearning SQL …

Database Migration, Part IV

We're talking about extracting data from complex relational databases. This is -- in a way -- another case study for my Unlearning SQL book. Unlearning SQL KDP https://www.amazon.com/dp/B0DDMFMXNW Lulu https://www.lulu.com/shop/steven-lott/unlearning-sql/paperback/product-yvnm8zn.html?page=1&pageSize=4 Google Play https://play …

Database Migration, Part III

We're talking about extracting data from complex relational databases. This is -- in a way -- another case study for my Unlearning SQL book. Unlearning SQL KDP https://www.amazon.com/dp/B0DDMFMXNW Lulu https://www.lulu.com/shop/steven-lott/unlearning-sql/paperback/product-yvnm8zn.html?page=1&pageSize=4 Google Play https://play …

Database Migration, Part II

We're talking about extracting data from complex relational databases. This is -- in a way -- another case study for my Unlearning SQL book. Unlearning SQL KDP https://www.amazon.com/dp/B0DDMFMXNW Lulu https://www.lulu.com/shop/steven-lott/unlearning-sql/paperback/product-yvnm8zn.html?page=1&pageSize=4 Google Play https://play …

Database Migration, Part I

Let's talk about extracting data from complex relational databases. This is -- in a way -- another case study for my Unlearning SQL book. Unlearning SQL KDP https://www.amazon.com/dp/B0DDMFMXNW Lulu https://www.lulu.com/shop/steven-lott/unlearning-sql/paperback/product-yvnm8zn.html?page=1&pageSize=4 Google Play https://play …

Seasons Greetings 2024

I'm working on revisions to Python 3 Object-Oriented Programming. Meanwhile, I have big news on Packt's end-of-year promotions. I’m always striving to make the knowledge in Python Real-World Projects , as useful as possible. That’s why I’m so excited about Packt’s $9.99 End-of-Year Sale! This adds …

Stingray Reader Release 5.1

Starting back in 2011 I was working on a way to manage a variety of spreadsheets in a variety of layouts with a common schema. Over the last 13 years, I've been updating and maintaining this little project. It's not widely used, but it interests me. Fundamentally, the use of …

Better than grep

In the process of writing Unlearning SQL , I had a need to extract SQL blocks from Python programs. Of course, I tried grep . It wasn't ideal. Note Book is available here: https://www.amazon.com/dp/B0DDMFMXNW https://www.lulu.com/shop/steven-lott/unlearning-sql/paperback/product-yvnm8zn.html?page=1&pageSize …

Modern Python Cookbook and Type Hints

Modern Python Cookbook — with lots and lots of recipes — is something you might need. Find the results of checking all these recipes here: https://www.amazon.com/Modern-Python-Cookbook-updated-techniques/dp/1835466389 I (reluctantly) switched from using mypy to using pyright to check all of these recipes carefully. The type alias ( PEP …

Revised Books Available

Big Announcement: the 2024.8 version of Unlearning SQL , and the 2024.9 version of Pivot to Python are available from booksellers online. Both are revised and all the code tested with Python 3.12. Unlearning SQL This book shows you how to translate essential SQL concepts into the Python …

Sphinx EPUB and Print

Let's say you want to self-publish an ebook and a print-on-demand paperback book. This isn't impossible, nor is it particularly easy. Here's what I've learned. Basic Workflow You've got two obvious paths to make sure your EPUB book and your print-on-demand book match: Convert EPUB to Print. This generally means …

Unlearning SQL, revised

Book (pre) Announcement: KDP - See https://www.amazon.com/stores/Steven-Lott/author/B00HNRSLEK for my author's page. https://www.amazon.com/Unlearning-SQL-hammer-every-problem-ebook/dp/B0DDMFMXNW is the book. Google Play - See https://play.google.com/store/books/details?id=23WAEAAAQBAJ . Be sure to get the 2024.08 edition; there's a previous …

Modern Python Cookbook, 3e

Book Announcement: https://www.packtpub.com/en-us/product/modern-python-cookbook-9781835466384 There are about 130 recipes in here. Some new. Some revised. All examined (and tested) for Python 3.12. For the Python folks who are just starting as well as those looking to pick up some more skills, this is for …

Synthetic Data Tool

See Synthetic Data . I've updated the repository with a "Noisy Data" feature. This will generate bulk data with invalid field values. It helps with testing ETL pipelines to be sure they will scale to the expected volumes. Clone https://github.com/slott56/DataSynthTool Read https://slott56.github.io/DataSynthTool/_build …

Functional SQL in Pure Python

I've published a framework for doing SQL-like programming in Pure Python -- no database required. Here: https://github.com/slott56/functional-SQL . See the functional-SQL documentation. This allows us to transform SQL: SELECT n . name , v . c2 FROM names_table n , values_table v WHERE n . code = v . c1 To pure Python: Select ( name …