<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>S.Lott -- Software Architect</title><link>https://slott56.github.io/</link><description></description><lastBuildDate>Sun, 18 Oct 2026 07:41:00 -0400</lastBuildDate><item><title>Clean Architecture API Lesson Learned</title><link>https://slott56.github.io/2026-10-18_clean_architecture_api.html</link><description>&lt;div class="section" id="bluf"&gt;
&lt;h2&gt;BLUF&lt;/h2&gt;
&lt;p&gt;Clean Architecture means implementation choices can be revoked.&lt;/p&gt;
&lt;p&gt;Ignore the &amp;quot;Dependency Inversion&amp;quot; part of the &lt;strong&gt;SOLID&lt;/strong&gt; design principles at your peril.&lt;/p&gt;
&lt;p&gt;Think through at least one alternative design and make sure the API covers more than one data structure.&lt;/p&gt;
&lt;p&gt;(Full disclosure. I failed to do this recently. Don't follow …&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Sun, 18 Oct 2026 07:41:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2026-10-18:/2026-10-18_clean_architecture_api.html</guid><category>Architecture &amp; Design</category><category>object-oriented design</category><category>clean architecture</category><category>api</category><category>solid</category></item><item><title>Object-Oriented Design: Binary or Enum?</title><link>https://slott56.github.io/2026-10-17_oo_design_binary_enum.html</link><description>&lt;div class="section" id="bluf"&gt;
&lt;h2&gt;BLUF&lt;/h2&gt;
&lt;p&gt;Some aspects of a problem are superficially binary, perhaps modeled as a boolean value.&lt;/p&gt;
&lt;p&gt;Don't be misled.
Some aspects of a problem are clearly &lt;strong&gt;not&lt;/strong&gt; binary, and a boolean is wrong.
Other aspects may or may not be binary, and a boolean might not be ideal.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="clearly-not-binary"&gt;
&lt;h2&gt;Clearly Not Binary …&lt;/h2&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Sat, 17 Oct 2026 07:41:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2026-10-17:/2026-10-17_oo_design_binary_enum.html</guid><category>Architecture &amp; Design</category><category>object-oriented design</category><category>enum</category><category>binary</category></item><item><title>Hard Problem? Use Test Cases as Debug Aids</title><link>https://slott56.github.io/2026-10-10_hard_problem_test_as_debug.html</link><description>&lt;div class="section" id="bluf"&gt;
&lt;h2&gt;BLUF&lt;/h2&gt;
&lt;p&gt;Can't get the software to work?&lt;/p&gt;
&lt;p&gt;The test cases are places to gather debugging details.
Some simple tricks:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Observability: add debugging outputs to the code&lt;/li&gt;
&lt;li&gt;Enable debugging output in failing test cases&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Make Failure an Option&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="the-detailed-example"&gt;
&lt;h2&gt;The Detailed Example&lt;/h2&gt;
&lt;p&gt;I've been struggling to create an accurate emulation of
the …&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Sat, 10 Oct 2026 12:28:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2026-10-10:/2026-10-10_hard_problem_test_as_debug.html</guid><category>Architecture &amp; Design</category><category>codebyhand</category><category>ibm1620</category><category>retrocomputing</category></item><item><title>Hard Problem? Stop Staring At The Code</title><link>https://slott56.github.io/2026-09-25_hard_problem_stop_staring.html</link><description>&lt;div class="section" id="bluf"&gt;
&lt;h2&gt;BLUF&lt;/h2&gt;
&lt;p&gt;Can't get the software to work?&lt;/p&gt;
&lt;p&gt;Stop Staring At It.&lt;/p&gt;
&lt;p&gt;Often, there are two problems:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;The code doesn't work.&lt;/li&gt;
&lt;li&gt;You're making faulty assumptions about why it doesn't work.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It's essential to stop staring (and hand-wringing) over the code and &lt;strong&gt;gather evidence.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This will allow you to challenge your faulty …&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Fri, 25 Sep 2026 09:32:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2026-09-25:/2026-09-25_hard_problem_stop_staring.html</guid><category>Architecture &amp; Design</category><category>codebyhand</category><category>ibm1620</category><category>retrocomputing</category></item><item><title>Hard Problem? Try Shifting Position</title><link>https://slott56.github.io/2026-09-20_hard_problem_shift_position.html</link><description>&lt;div class="section" id="bluf"&gt;
&lt;h2&gt;BLUF&lt;/h2&gt;
&lt;p&gt;Can't get the software to work?&lt;/p&gt;
&lt;p&gt;Rewrite it.&lt;/p&gt;
&lt;p&gt;Seriously.&lt;/p&gt;
&lt;p&gt;It's often faster to pick a new paradigm and start a rewrite than to bang your head against a wall.&lt;/p&gt;
&lt;p&gt;Modern languages (like Python) don't require a &lt;strong&gt;lot&lt;/strong&gt; of overhead or boilerplate to start again.&lt;/p&gt;
&lt;p&gt;Can't get the object model …&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Sun, 20 Sep 2026 13:32:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2026-09-20:/2026-09-20_hard_problem_shift_position.html</guid><category>Architecture &amp; Design</category><category>codebyhand</category><category>ibm1620</category><category>retrocomputing</category></item><item><title>A Review of Some Slopware</title><link>https://slott56.github.io/2026-08-24_a_review_of_some_slopware.html</link><description>&lt;p&gt;I've been subjected to two (obvious) examples of slopware apps.
I've read dozens and dozens of conference submissions that appeared to be slopware.
I have some observations.&lt;/p&gt;
&lt;div class="section" id="bluf"&gt;
&lt;h2&gt;BLUF&lt;/h2&gt;
&lt;p&gt;My observations:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#ai-writing-is-crap"&gt;AI Writing is Crap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#ai-written-apps-are-crap"&gt;AI-Written Apps are Crap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#ai-written-apps-reflect-second-espresso-bad-ideas"&gt;AI-Written Apps Reflect Second-Espresso Bad Ideas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#ai-written-apps-displace-problems"&gt;AI-Written Apps Displace Problems&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="admonition important"&gt;
&lt;p class="first admonition-title"&gt;Important&lt;/p&gt;
&lt;ul class="last simple"&gt;
&lt;li&gt;One …&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Mon, 24 Aug 2026 10:32:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2026-08-24:/2026-08-24_a_review_of_some_slopware.html</guid><category>Technologies</category><category>#noAI</category><category>codebyhand</category><category>slopware</category></item><item><title>We Write Code By Hand</title><link>https://slott56.github.io/2026-07-30_code_by_hand.html</link><description>&lt;p&gt;Here's an interesting group:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://handcraftedcode.org"&gt;https://handcraftedcode.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I'm an &amp;quot;absolutely no LLM&amp;quot; bigot.
I need to do the thinking.
I like to do the fiddly, tedious hard parts. I always have liked it.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Thu, 30 Jul 2026 13:54:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2026-07-30:/2026-07-30_code_by_hand.html</guid><category>Technologies</category><category>#noAI</category><category>#humanjson</category><category>codebyhand</category></item><item><title>OpenD6 Tools Project -- Released</title><link>https://slott56.github.io/2026-06-29_opend6_tools_released.html</link><description>&lt;p&gt;I have (finally) released a usable DSL for OpenD6 spells and characters.&lt;/p&gt;
&lt;p&gt;See the &lt;a class="reference external" href="https://slott56.github.io/tag/opend6.html"&gt;OpenD6&lt;/a&gt; tag for a bunch of related content.&lt;/p&gt;
&lt;p&gt;See &lt;a class="reference external" href="https://github.com/slott56/opend6-tools"&gt;https://github.com/slott56/opend6-tools&lt;/a&gt; for the final product.&lt;/p&gt;
&lt;p&gt;I doubt there will ever be a PyPI package.
For the few who want to use these tools …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Mon, 29 Jun 2026 09:31:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2026-06-29:/2026-06-29_opend6_tools_released.html</guid><category>TTRPG</category><category>OpenD6</category><category>#python</category></item><item><title>OpenD6 Tools Project -- Status</title><link>https://slott56.github.io/2026-06-21_opend6_tools_status.html</link><description>&lt;p&gt;See the &lt;a class="reference external" href="https://slott56.github.io/tag/opend6.html"&gt;OpenD6&lt;/a&gt; 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:&lt;/p&gt;
&lt;table border="1" class="docutils"&gt;
&lt;colgroup&gt;
&lt;col width="40%" /&gt;
&lt;col width="27%" /&gt;
&lt;col width="33%" /&gt;
&lt;/colgroup&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td&gt;Statements&lt;/td&gt;
&lt;td&gt;Misses&lt;/td&gt;
&lt;td&gt;Coverage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2701&lt;/td&gt;
&lt;td&gt;166&lt;/td&gt;
&lt;td&gt;94%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="section" id="background"&gt;
&lt;h2&gt;Background&lt;/h2&gt;
&lt;p&gt;The OpenD6 tools have two extensive DSL's.
These differ in a profound way:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Spell …&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Sun, 21 Jun 2026 09:31:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2026-06-21:/2026-06-21_opend6_tools_status.html</guid><category>TTRPG</category><category>OpenD6</category><category>#python</category></item><item><title>OO Design and Card Games</title><link>https://slott56.github.io/2026-06-17_oodesign_card_games.html</link><description>&lt;p&gt;Lets look at my favorite OO-Design problem domain: card games.&lt;/p&gt;
&lt;p&gt;We'll compare the design of two games: Cribbage and Canasta.&lt;/p&gt;
&lt;p&gt;Why? Because they have three common abstractions: cards, hands, and a score.&lt;/p&gt;
&lt;p&gt;Overall the players are dealt cards, form hands, and at some point, accumulate a score. Of course, all …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Wed, 17 Jun 2026 07:32:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2026-06-17:/2026-06-17_oodesign_card_games.html</guid><category>Architecture &amp; Design</category><category>python</category><category>object-oriented</category></item><item><title>AI Generated Code Means Software Is Worthless</title><link>https://slott56.github.io/2026-05-22_software_is_worthless.html</link><description>&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;This is a conclusion of reached from observing the software industry for a half-century&lt;/p&gt;
&lt;div class="section" id="gather-round-the-fire-all-you-youngs"&gt;
&lt;h2&gt;Gather 'Round The Fire All You Youngs&lt;/h2&gt;
&lt;p&gt;Once upon a time …&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Fri, 22 May 2026 18:20:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2026-05-22:/2026-05-22_software_is_worthless.html</guid><category>Management</category><category>#python</category><category>LLM</category><category>AI</category><category>FOSS</category></item><item><title>Experience Points and Levels</title><link>https://slott56.github.io/2026-05-06_experience_points_and_levels.html</link><description>&lt;p&gt;See &lt;a class="reference external" href="https://slott56.github.io/2026-04-23_a_writing_project.html"&gt;Writing Project -- perhaps a bad idea&lt;/a&gt;.
I'm trying to dig around in my old notes to pull together a &amp;quot;World Book&amp;quot; with a fantasy setting I think has a lot of good gaming opportunities. I have a problem, though.&lt;/p&gt;
&lt;div class="section" id="history"&gt;
&lt;h2&gt;History&lt;/h2&gt;
&lt;p&gt;History is my problem.&lt;/p&gt;
&lt;p&gt;Some of this world-building and …&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Wed, 06 May 2026 07:46:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2026-05-06:/2026-05-06_experience_points_and_levels.html</guid><category>TTRPG</category><category>OpenD6</category><category>#python</category></item><item><title>Revisiting Old Ideas</title><link>https://slott56.github.io/2026-04-30_revisting_old_ideas.html</link><description>&lt;p&gt;See &lt;a class="reference external" href="https://slott56.github.io/2026-04-23_a_writing_project.html"&gt;Writing Project -- perhaps a bad idea&lt;/a&gt;.
I'm trying to dig around in my old notes to pull together a &amp;quot;World Book&amp;quot; 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.&lt;/p&gt;
&lt;p&gt;This isn't …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Thu, 30 Apr 2026 17:37:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2026-04-30:/2026-04-30_revisting_old_ideas.html</guid><category>TTRPG</category><category>OpenD6</category><category>#python</category></item><item><title>A Writing Project -- perhaps a bad idea</title><link>https://slott56.github.io/2026-04-23_a_writing_project.html</link><description>&lt;p&gt;I'm trying to push the envelope in my writing.&lt;/p&gt;
&lt;p&gt;I write a fair amount of non-fiction.  &lt;a class="reference external" href="https://www.goodreads.com/author/list/4537706.Steven_F_Lott"&gt;https://www.goodreads.com/author/list/4537706.Steven_F_Lott&lt;/a&gt;.
This is a comfortable spot for me.&lt;/p&gt;
&lt;p&gt;I've got some self-published titles:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://play.google.com/store/books/details/Steven_F_Lott_Pivot_to_Python?id=fQ6IEAAAQBAJ"&gt;Pivot to Python: A Guide for Professionals and skilled beginners&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://play.google.com/store/books/details/Steven_F_Lott_Unlearning_SQL?id=23WAEAAAQBAJ"&gt;Unlearning SQL: “When your …&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Thu, 23 Apr 2026 14:37:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2026-04-23:/2026-04-23_a_writing_project.html</guid><category>TTRPG</category><category>OpenD6</category><category>#python</category></item><item><title>Another D6 Dice Mechanic -- Equiprobable Choices</title><link>https://slott56.github.io/2026-04-04_another_d6_mechanic.html</link><description>&lt;p&gt;When playing a game using D6 -- and only D6 -- we're sometimes confronted with a need to
make a selection from equiprobable items.&lt;/p&gt;
&lt;p&gt;For example, pick a random day of the week: 7 choices, but only 6 sides to a die.&lt;/p&gt;
&lt;p&gt;What can we do?&lt;/p&gt;
&lt;p&gt;How can we select fairly among …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Sat, 04 Apr 2026 15:37:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2026-04-04:/2026-04-04_another_d6_mechanic.html</guid><category>TTRPG</category><category>DSL</category><category>OpenD6</category><category>#python</category><category>dice</category><category>mechanic</category></item><item><title>The human.json Protocol</title><link>https://slott56.github.io/2026-03-20_human_json.html</link><description>&lt;p&gt;See &lt;a class="reference external" href="https://codeberg.org/robida/human.json"&gt;https://codeberg.org/robida/human.json&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This content is human-generated. All the mistakes are mine, without the taint of AI slop.&lt;/p&gt;
&lt;p&gt;I've added the needed &lt;a class="reference external" href="https://slott56.github.io/media/human.json"&gt;human.json&lt;/a&gt;, and can update it if you want me to vouch for your content, also.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Fri, 20 Mar 2026 09:20:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2026-03-20:/2026-03-20_human_json.html</guid><category>Technologies</category><category>#noAI</category><category>#humanjson</category></item><item><title>OpenD6 Deep Dive -- Area Effect Aspect</title><link>https://slott56.github.io/2026-03-05_opend6_deep_dive.html</link><description>&lt;p&gt;I went deep into OpenD6, chasing an idea through a maze of strange shapes.&lt;/p&gt;
&lt;p&gt;See this extract from a Jupyter Notebook: &lt;a class="reference external" href="https://slott56.github.io/pages/area-effect-aspect-volume-computations-v2.html"&gt;Area Effect Aspect Volume Computations&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It was a lot of fun to uncover two errors in the rules, and work out what &lt;em&gt;could&lt;/em&gt; have been used instead.&lt;/p&gt;
&lt;div class="section" id="tl-dr"&gt;
&lt;h2&gt;TL;DR …&lt;/h2&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Thu, 05 Mar 2026 16:20:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2026-03-05:/2026-03-05_opend6_deep_dive.html</guid><category>TTRPG</category><category>#python</category><category>math</category><category>mechanic</category></item><item><title>Python Illustrated -- a Purrfect Book for New Programmers</title><link>https://slott56.github.io/2026-03-04_python_illustrated.html</link><description>&lt;p&gt;Maaike and Imke van Putten’s delightful &lt;a class="reference external" href="https://www.packtpub.com/en-us/product/python-illustrated-9781836646327"&gt;Python Illustrated&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;No, you’re not reading …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Wed, 04 Mar 2026 13:28:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2026-03-04:/2026-03-04_python_illustrated.html</guid><category>Books</category><category>#python</category><category>BookReview</category></item><item><title>OpenD6 TTRPG DSL -- Spell Definitions</title><link>https://slott56.github.io/2026-02-18_opend6_ttrpg_dsl_spell_definition.html</link><description>&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;I like the OpenD6 …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Wed, 18 Feb 2026 13:28:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2026-02-18:/2026-02-18_opend6_ttrpg_dsl_spell_definition.html</guid><category>TTRPG</category><category>DSL</category><category>OpenD6</category></item><item><title>LLM Vibe Coding or Illiterate Programming</title><link>https://slott56.github.io/2026-01-31_llm_vibe_coding_or_illiterate_programming.html</link><description>&lt;div class="section" id="bluf"&gt;
&lt;h2&gt;BLUF&lt;/h2&gt;
&lt;p&gt;Your LLM conversations are emphatically &lt;strong&gt;not&lt;/strong&gt; Literate Programming.
The term &amp;quot;Literate Programming&amp;quot; cannot include code with separate documentation.&lt;/p&gt;
&lt;p&gt;I won't call it &amp;quot;Illiterate Programming.&amp;quot;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="sad-story"&gt;
&lt;h2&gt;Sad Story&lt;/h2&gt;
&lt;p&gt;An LLM coder had a lot of things to say about productivity, and explained their approach.
They wrote 800 or so words, and …&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Thu, 05 Feb 2026 11:13:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2026-02-05:/2026-01-31_llm_vibe_coding_or_illiterate_programming.html</guid><category>Literate Programming</category><category>AI</category><category>LLM</category><category>vibe coding</category></item><item><title>TTRPG Progress Report</title><link>https://slott56.github.io/2026-01-31_ttrpg_progress.html</link><description>&lt;p&gt;See &lt;a class="reference external" href="https://slott56.github.io/2025-09-28-the_eval_conundrum.html"&gt;The eval() Conundrum&lt;/a&gt; for background.
Also, see &lt;a class="reference external" href="https://github.com/slott56/writing-tools"&gt;https://github.com/slott56/writing-tools&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;div class="admonition important"&gt;
&lt;p class="first admonition-title"&gt;Important&lt;/p&gt;
&lt;p&gt;TL;DR.&lt;/p&gt;
&lt;p class="last"&gt;Almost all software design seems …&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Sat, 31 Jan 2026 10:31:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2026-01-31:/2026-01-31_ttrpg_progress.html</guid><category>TTRPG</category><category>#python</category><category>games</category><category>dsl</category></item><item><title>LLM Conference Talks 2</title><link>https://slott56.github.io/2026-01-07_llm_conference_talks_2.html</link><description>&lt;p&gt;Please do &lt;strong&gt;not&lt;/strong&gt; use an LLM to create a conference talk.&lt;/p&gt;
&lt;p&gt;Please.&lt;/p&gt;
&lt;p&gt;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?&lt;/p&gt;
&lt;p&gt;What's in it …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Wed, 07 Jan 2026 10:25:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2026-01-07:/2026-01-07_llm_conference_talks_2.html</guid><category>Books</category><category>ai</category><category>llm</category><category>conference</category></item><item><title>LLM Conference Talks</title><link>https://slott56.github.io/2026-01-01_llm_conference_talks.html</link><description>&lt;p&gt;Please do &lt;strong&gt;not&lt;/strong&gt; use an LLM to create a conference talk.&lt;/p&gt;
&lt;p&gt;Please.&lt;/p&gt;
&lt;p&gt;We want to hear &lt;strong&gt;your&lt;/strong&gt; actual words in &lt;strong&gt;your&lt;/strong&gt; actual voice
We do not want diluted words created for you by sparkling auto-complete.
We really don't.&lt;/p&gt;
&lt;p&gt;The vibe around LLM slop may seem better to you.
But it's …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Thu, 01 Jan 2026 08:29:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2026-01-01:/2026-01-01_llm_conference_talks.html</guid><category>Books</category><category>ai</category><category>llm</category><category>conference</category></item><item><title>The Python Object-Oriented Programming 5th Edition</title><link>https://slott56.github.io/python_object_oriented_programming_5e.html</link><description>&lt;p&gt;In time for your Holiday Reading.
Want guidance on OO design in Python?
Want a &lt;strong&gt;lot&lt;/strong&gt; of concrete examples, fully tested?&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Master OOP fundamentals with hands-on examples and expert insights&lt;/li&gt;
&lt;li&gt;Learn design patterns and type hinting with real-world Python 3.13 code&lt;/li&gt;
&lt;li&gt;Develop scalable programs using testing and concurrency best …&lt;/li&gt;&lt;/ul&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Fri, 12 Dec 2025 11:40:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2025-12-12:/python_object_oriented_programming_5e.html</guid><category>Books</category><category>python</category><category>object-oriented</category></item><item><title>A get_object_size() Function -- Again</title><link>https://slott56.github.io/2025-10-17-get_object_size_function_again.html</link><description>&lt;div class="section" id="bluf"&gt;
&lt;h2&gt;BLUF&lt;/h2&gt;
&lt;p&gt;You rarely need this.
Python handles memory management for you.
Except in an edge case where you have a &lt;strong&gt;lot&lt;/strong&gt; of objects to work with.&lt;/p&gt;
&lt;p&gt;How many is a lot?  Enough that your app crashes with &lt;tt class="docutils literal"&gt;MemoryError&lt;/tt&gt; exception.
Or, is consuming so much memory other processes have trouble working …&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Fri, 17 Oct 2025 13:08:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2025-10-17:/2025-10-17-get_object_size_function_again.html</guid><category>Python</category><category>oo</category><category>oodesign</category></item><item><title>A get_object_size() Function [Updated]</title><link>https://slott56.github.io/2025-10-16-get_object_size_function.html</link><description>&lt;div class="section" id="bluf"&gt;
&lt;h2&gt;BLUF&lt;/h2&gt;
&lt;p&gt;You rarely need this.
Python handles memory management for you.
Except in an edge case where you have a &lt;strong&gt;lot&lt;/strong&gt; of objects to work with.&lt;/p&gt;
&lt;p&gt;How many is a lot?  Enough that your app crashes with &lt;tt class="docutils literal"&gt;MemoryError&lt;/tt&gt; exception.
Or, is consuming so much memory other processes have trouble working …&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Thu, 16 Oct 2025 13:08:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2025-10-16:/2025-10-16-get_object_size_function.html</guid><category>Python</category><category>oo</category><category>oodesign</category></item><item><title>OO Design Principles: GRASP patterns</title><link>https://slott56.github.io/2025-10-04-oo_design_principles_grasp_patterns.html</link><description>&lt;!-- background:

I’ve been reading quite a lot in the book “Fluent Python”. It's a brilliant resource and is helping me understand details of Python that I hadn't even looked at before. In the last few chapters 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 at a principle like SOLID, where we have the Liskov Substitution Principle, the interface separation principle, and the dependency inversion principle, they all rely on a base class, which of course is created by inheriting from ABC. I think as long as we do not have concrete methods in the base class, this could be a protocol instead.

However, I've been thinking about the general meaning of SOLID for Python. I can see these principles in an object-oriented only language like Java. Since this is the first language I learned, my intuition tells me that the language is perfect for following the principles. Python, on the other hand, does not have the strong need to be object-oriented, but most of the principles assume that we are working with classes. Often it's just easier to use a functional approach. An example would be the strategy pattern, where instead of having a construct of different classes that handle a specific strategy, we just have different functions. The intent for a developer is very explicit when using those, and I don't see the need for an ABC and inheritance from it. The only advantage I would see is to put it in a class that uses Protocols to enable type hints.

I've also read about the GRASP principles, but some parts of it don't feel very natural to me in Python either. For example, very obviously, polymorphism, which is also not needed in Python. Of course, low coupling and high cohesion are rather language-agnostic concepts, and they seem to fit very well with Python.

I know that these principles are not a religion, and I don't have to follow any specific one. I know I can take ideas from multiple ones and stack them together. However, I like the basic idea of dependency inversion, interface segregation and Liskov Substitution and used it in one of my products. Working with Liskov Substitution can make it difficult to navigate through an IDE. This plus explanations I’ve read in Fluent Python make me think that I've made my life more difficult with it, but I wonder what would be pythonic here?

Since I couldn't find a helpful discussion online, I was wondering what others experience is and how they approach this? Do you follow any principles like SOLID or GRASP or do you find a mix to be the best option? I've been looking for articles that discuss this but haven't found a great resource. I'd love to hear your thoughts and experiences and if you know of a great resource. --&gt;
&lt;p&gt;Some quotes to provide context.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;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.&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;If I look …&lt;/p&gt;&lt;/blockquote&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Sat, 04 Oct 2025 09:46:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2025-10-04:/2025-10-04-oo_design_principles_grasp_patterns.html</guid><category>Python</category><category>oo</category><category>oodesign</category><category>design principles</category><category>grasp</category><category>patterns</category></item><item><title>OO Design Principles: CUPID</title><link>https://slott56.github.io/2025-10-03-oo_design_principles_cupid.html</link><description>&lt;!-- background:

I’ve been reading quite a lot in the book “Fluent Python”. It's a brilliant resource and is helping me understand details of Python that I hadn't even looked at before. In the last few chapters 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 at a principle like SOLID, where we have the Liskov Substitution Principle, the interface separation principle, and the dependency inversion principle, they all rely on a base class, which of course is created by inheriting from ABC. I think as long as we do not have concrete methods in the base class, this could be a protocol instead.

However, I've been thinking about the general meaning of SOLID for Python. I can see these principles in an object-oriented only language like Java. Since this is the first language I learned, my intuition tells me that the language is perfect for following the principles. Python, on the other hand, does not have the strong need to be object-oriented, but most of the principles assume that we are working with classes. Often it's just easier to use a functional approach. An example would be the strategy pattern, where instead of having a construct of different classes that handle a specific strategy, we just have different functions. The intent for a developer is very explicit when using those, and I don't see the need for an ABC and inheritance from it. The only advantage I would see is to put it in a class that uses Protocols to enable type hints.

I've also read about the GRASP principles, but some parts of it don't feel very natural to me in Python either. For example, very obviously, polymorphism, which is also not needed in Python. Of course, low coupling and high cohesion are rather language-agnostic concepts, and they seem to fit very well with Python.

I know that these principles are not a religion, and I don't have to follow any specific one. I know I can take ideas from multiple ones and stack them together. However, I like the basic idea of dependency inversion, interface segregation and Liskov Substitution and used it in one of my products. Working with Liskov Substitution can make it difficult to navigate through an IDE. This plus explanations I’ve read in Fluent Python make me think that I've made my life more difficult with it, but I wonder what would be pythonic here?

Since I couldn't find a helpful discussion online, I was wondering what others experience is and how they approach this? Do you follow any principles like SOLID or GRASP or do you find a mix to be the best option? I've been looking for articles that discuss this but haven't found a great resource. I'd love to hear your thoughts and experiences and if you know of a great resource. --&gt;
&lt;p&gt;Some quotes to provide context.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;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.&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;If I look …&lt;/p&gt;&lt;/blockquote&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Fri, 03 Oct 2025 09:46:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2025-10-03:/2025-10-03-oo_design_principles_cupid.html</guid><category>Python</category><category>oo</category><category>oodesign</category><category>design principles</category><category>cupid</category></item><item><title>OO Design Principles: SOLID</title><link>https://slott56.github.io/2025-10-02-oo_design_principles_solid.html</link><description>&lt;!-- background:

I’ve been reading quite a lot in the book “Fluent Python”. It's a brilliant resource and is helping me understand details of Python that I hadn't even looked at before. In the last few chapters 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 at a principle like SOLID, where we have the Liskov Substitution Principle, the interface separation principle, and the dependency inversion principle, they all rely on a base class, which of course is created by inheriting from ABC. I think as long as we do not have concrete methods in the base class, this could be a protocol instead.

However, I've been thinking about the general meaning of SOLID for Python. I can see these principles in an object-oriented only language like Java. Since this is the first language I learned, my intuition tells me that the language is perfect for following the principles. Python, on the other hand, does not have the strong need to be object-oriented, but most of the principles assume that we are working with classes. Often it's just easier to use a functional approach. An example would be the strategy pattern, where instead of having a construct of different classes that handle a specific strategy, we just have different functions. The intent for a developer is very explicit when using those, and I don't see the need for an ABC and inheritance from it. The only advantage I would see is to put it in a class that uses Protocols to enable type hints.

I've also read about the GRASP principles, but some parts of it don't feel very natural to me in Python either. For example, very obviously, polymorphism, which is also not needed in Python. Of course, low coupling and high cohesion are rather language-agnostic concepts, and they seem to fit very well with Python.

I know that these principles are not a religion, and I don't have to follow any specific one. I know I can take ideas from multiple ones and stack them together. However, I like the basic idea of dependency inversion, interface segregation and Liskov Substitution and used it in one of my products. Working with Liskov Substitution can make it difficult to navigate through an IDE. This plus explanations I’ve read in Fluent Python make me think that I've made my life more difficult with it, but I wonder what would be pythonic here?

Since I couldn't find a helpful discussion online, I was wondering what others experience is and how they approach this? Do you follow any principles like SOLID or GRASP or do you find a mix to be the best option? I've been looking for articles that discuss this but haven't found a great resource. I'd love to hear your thoughts and experiences and if you know of a great resource. --&gt;
&lt;p&gt;Some quotes to provide context.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;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.&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;If I look …&lt;/p&gt;&lt;/blockquote&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Thu, 02 Oct 2025 09:46:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2025-10-02:/2025-10-02-oo_design_principles_solid.html</guid><category>Python</category><category>oo</category><category>oodesign</category><category>design principles</category><category>solid</category></item><item><title>OO Design Principles: ABC's</title><link>https://slott56.github.io/2025-10-01-oo_design_principles_abcs.html</link><description>&lt;!-- background:

I’ve been reading quite a lot in the book “Fluent Python”. It's a brilliant resource and is helping me understand details of Python that I hadn't even looked at before. In the last few chapters 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 at a principle like SOLID, where we have the Liskov Substitution Principle, the interface separation principle, and the dependency inversion principle, they all rely on a base class, which of course is created by inheriting from ABC. I think as long as we do not have concrete methods in the base class, this could be a protocol instead.

However, I've been thinking about the general meaning of SOLID for Python. I can see these principles in an object-oriented only language like Java. Since this is the first language I learned, my intuition tells me that the language is perfect for following the principles. Python, on the other hand, does not have the strong need to be object-oriented, but most of the principles assume that we are working with classes. Often it's just easier to use a functional approach. An example would be the strategy pattern, where instead of having a construct of different classes that handle a specific strategy, we just have different functions. The intent for a developer is very explicit when using those, and I don't see the need for an ABC and inheritance from it. The only advantage I would see is to put it in a class that uses Protocols to enable type hints.

I've also read about the GRASP principles, but some parts of it don't feel very natural to me in Python either. For example, very obviously, polymorphism, which is also not needed in Python. Of course, low coupling and high cohesion are rather language-agnostic concepts, and they seem to fit very well with Python.

I know that these principles are not a religion, and I don't have to follow any specific one. I know I can take ideas from multiple ones and stack them together. However, I like the basic idea of dependency inversion, interface segregation and Liskov Substitution and used it in one of my products. Working with Liskov Substitution can make it difficult to navigate through an IDE. This plus explanations I’ve read in Fluent Python make me think that I've made my life more difficult with it, but I wonder what would be pythonic here?

Since I couldn't find a helpful discussion online, I was wondering what others experience is and how they approach this? Do you follow any principles like SOLID or GRASP or do you find a mix to be the best option? I've been looking for articles that discuss this but haven't found a great resource. I'd love to hear your thoughts and experiences and if you know of a great resource. --&gt;
&lt;p&gt;Some quotes to provide context.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;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.&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;If I look …&lt;/p&gt;&lt;/blockquote&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Wed, 01 Oct 2025 09:46:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2025-10-01:/2025-10-01-oo_design_principles_abcs.html</guid><category>Python</category><category>oo</category><category>oodesign</category><category>design principles</category><category>abc</category></item><item><title>The eval() Conundrum and Python-as-DSL</title><link>https://slott56.github.io/2025-09-28-the_eval_conundrum.html</link><description>&lt;p&gt;Many people will proclaim that the &lt;tt class="docutils literal"&gt;eval()&lt;/tt&gt; function is reprentnatly evil.&lt;/p&gt;
&lt;p&gt;Feel free to skip the two rants.&lt;/p&gt;
&lt;div class="section" id="bluf"&gt;
&lt;h2&gt;BLUF&lt;/h2&gt;
&lt;p&gt;The &lt;tt class="docutils literal"&gt;eval()&lt;/tt&gt; function is relatively easy to work with.&lt;/p&gt;
&lt;div class="admonition important"&gt;
&lt;p class="first admonition-title"&gt;Important&lt;/p&gt;
&lt;p class="last"&gt;Limit the globals to the fewest possible names.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="eval-rant"&gt;
&lt;h2&gt;Eval() Rant&lt;/h2&gt;
&lt;p&gt;A too-common claim is that we can't use &lt;tt class="docutils literal"&gt;eval()&lt;/tt&gt; because an …&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Sun, 28 Sep 2025 09:46:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2025-09-28:/2025-09-28-the_eval_conundrum.html</guid><category>TTRPG</category><category>python</category><category>games</category><category>dsl</category></item><item><title>Humble Bundle Offer</title><link>https://slott56.github.io/2025-09-10-humble_bundle_offer.html</link><description>&lt;p&gt;This is delightful: Packt has this &lt;a class="reference external" href="https://www.humblebundle.com/books/ultimate-programming-languages-bundle-packt-books"&gt;Humble Bundle&lt;/a&gt; including
&lt;em&gt;The Modern Python Cookbook&lt;/em&gt;.&lt;/p&gt;
&lt;div class="figure"&gt;
&lt;a class="reference external image-reference" href="https://www.humblebundle.com/books/ultimate-programming-languages-bundle-packt-books"&gt;
&lt;img alt="Humble Bundle Graphic" src="https://slott56.github.io/media/2025-humble-bundle.png" /&gt;
&lt;/a&gt;
&lt;p class="caption"&gt;The Humble Bundle with &lt;em&gt;The Modern Python Cookbook&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Since it's right arund my birthday, consider this discount my gift to you.&lt;/p&gt;
&lt;p&gt;Invest in yourself.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Wed, 10 Sep 2025 16:02:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2025-09-10:/2025-09-10-humble_bundle_offer.html</guid><category>Books</category><category>book</category><category>python</category><category>packt</category><category>cookbook</category></item><item><title>Gloom and Despair -- LaTeX Edition</title><link>https://slott56.github.io/2025-07-29-the_gloom_despair_latex.html</link><description>&lt;p&gt;I write all my books using LaTeX.
Parts of LaTeX are (at first) confusing.&lt;/p&gt;
&lt;p&gt;Recently, I had a moment of despair when my LaTeX processing tools no longer worked.&lt;/p&gt;
&lt;div class="section" id="bluf"&gt;
&lt;h2&gt;BLUF&lt;/h2&gt;
&lt;p&gt;Don't panic. Gather the data.&lt;/p&gt;
&lt;p&gt;If the logs aren't good enough to reveal what's going on, fix the logs.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="the-story"&gt;
&lt;h2&gt;The …&lt;/h2&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 29 Jul 2025 09:54:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2025-07-29:/2025-07-29-the_gloom_despair_latex.html</guid><category>Books</category><category>python</category><category>learning</category><category>latex</category></item><item><title>Some Recommended Reading</title><link>https://slott56.github.io/2025-07-16-recommended_reading.html</link><description>&lt;p&gt;Q: &amp;quot;Can you recommend  books that are good for a beginner wanting to learn python?&amp;quot;&lt;/p&gt;
&lt;p&gt;Me: &amp;quot;Depends on the person’s background...&amp;quot;&lt;/p&gt;
&lt;p&gt;Q: &amp;quot;They has a deep background in the problem domain. Recently they've been doing a lot of reporting and analytics using SQL.&amp;quot;&lt;/p&gt;
&lt;p&gt;Okay. That's excellent.&lt;/p&gt;
&lt;p&gt;One of the …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Wed, 16 Jul 2025 11:20:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2025-07-16:/2025-07-16-recommended_reading.html</guid><category>Books</category><category>python</category><category>learning</category></item><item><title>The Payout From Learning</title><link>https://slott56.github.io/2025-06-29-the_payout_from_learning.html</link><description>&lt;p&gt;The back-story.
See &lt;a class="reference external" href="https://slott56.github.io/2025-06-29-an_investment_in_learning.html"&gt;Coping With Complexity&lt;/a&gt;.
See &lt;a class="reference external" href="https://github.com/cloud-custodian/cel-python"&gt;https://github.com/cloud-custodian/cel-python&lt;/a&gt; for the code base.&lt;/p&gt;
&lt;p&gt;Back around May 26, I created this branch.
Today -- July 2 -- I've got the tests to pass.&lt;/p&gt;
&lt;div class="section" id="bluf-tl-dr"&gt;
&lt;h2&gt;BLUF (TL;DR)&lt;/h2&gt;
&lt;p&gt;I made mistakes.
I spent a lot of time making a some significant mistakes …&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Wed, 02 Jul 2025 15:46:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2025-07-02:/2025-06-29-the_payout_from_learning.html</guid><category>Architecture &amp; Design</category><category>uml</category><category>plantuml</category><category>solid</category><category>cel-python</category><category>cloud custodian</category><category>open source</category></item><item><title>An Investment in Learning</title><link>https://slott56.github.io/2025-06-29-an_investment_in_learning.html</link><description>&lt;p&gt;The back-story.
See &lt;a class="reference external" href="https://slott56.github.io/2025-06-21-coping_with_complexity.html"&gt;Coping With Complexity&lt;/a&gt;.
See &lt;a class="reference external" href="https://github.com/cloud-custodian/cel-python"&gt;https://github.com/cloud-custodian/cel-python&lt;/a&gt; for the code base.&lt;/p&gt;
&lt;p&gt;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 …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Sun, 29 Jun 2025 09:06:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2025-06-29:/2025-06-29-an_investment_in_learning.html</guid><category>Architecture &amp; Design</category><category>uml</category><category>plantuml</category><category>solid</category><category>cel-python</category><category>cloud custodian</category><category>open source</category><category>learning</category></item><item><title>Coping with Complexity</title><link>https://slott56.github.io/2025-06-21-coping_with_complexity.html</link><description>&lt;p&gt;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 …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Sat, 21 Jun 2025 08:01:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2025-06-21:/2025-06-21-coping_with_complexity.html</guid><category>Architecture &amp; Design</category><category>uml</category><category>plantuml</category><category>solid</category><category>cel-python</category><category>cloud custodian</category><category>open source</category></item><item><title>Testing Your AI</title><link>https://slott56.github.io/2025-06-14-tesing_your_ai.html</link><description>&lt;p&gt;We test software.
We test people.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;My professionals all have walls full of diplomas and …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Sat, 14 Jun 2025 18:11:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2025-06-14:/2025-06-14-tesing_your_ai.html</guid><category>Technologies</category><category>ai</category><category>testing</category></item><item><title>Comma Comma</title><link>https://slott56.github.io/2025-06-11-comma_comma.html</link><description>&lt;p&gt;Ugh.&lt;/p&gt;
&lt;p&gt;A painful stretch of hours looking for a problem.
Working on this: &lt;a class="reference external" href="https://github.com/cloud-custodian/cel-python/wiki/Evaluation-Design"&gt;https://github.com/cloud-custodian/cel-python/wiki/Evaluation-Design&lt;/a&gt;.
I need to address a performance problem and upgrade things generally to get them ready for 3.13 and 3.14.&lt;/p&gt;
&lt;p&gt;You know how it goes, right?&lt;/p&gt;
&lt;p&gt;I touched something …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Wed, 11 Jun 2025 07:58:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2025-06-11:/2025-06-11-comma_comma.html</guid><category>Python</category><category>#python</category><category>syntax</category><category>cel-python</category><category>cloud custodian</category><category>open source</category></item><item><title>Ransomware Cause and Effect</title><link>https://slott56.github.io/2025-05-12-ransomware_cause_and_effect.html</link><description>&lt;p&gt;This: &lt;a class="reference external" href="https://www.theregister.com/2025/05/12/opinion_column_ransomware/"&gt;https://www.theregister.com/2025/05/12/opinion_column_ransomware/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Shabby IT infrastructure built with criminally low budgets.&lt;/p&gt;
&lt;p&gt;What did we expect?&lt;/p&gt;
&lt;p&gt;Of course there will be ruthless exploitation of weakness.&lt;/p&gt;
&lt;p&gt;Clearly, minimal IT budgets -- just enought to &amp;quot;keep the lights on&amp;quot; -- will provide avenues for exploitation.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Mon, 12 May 2025 07:45:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2025-05-12:/2025-05-12-ransomware_cause_and_effect.html</guid><category>Management</category><category>ransomeware</category></item><item><title>Domain-Specific Language</title><link>https://slott56.github.io/2025-03-11-domain_specific_language.html</link><description>&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;There are a few cases where a DSL can be …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 11 Mar 2025 15:52:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2025-03-11:/2025-03-11-domain_specific_language.html</guid><category>Python</category><category>#python</category><category>domain-specific language</category><category>dsl</category></item><item><title>Joomla Conversion</title><link>https://slott56.github.io/2025-02-08-joomla_conversion.html</link><description>&lt;p&gt;Recently, we talked about extracting data from complex relational databases.
This is -- in a way -- another case study for my &lt;em&gt;Unlearning SQL&lt;/em&gt; book.
This is a description of what comes next after the &amp;quot;low-level&amp;quot; conversion.
Warning: it's complicated.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BLUF&lt;/strong&gt;: Take the time to get rid of SQL processing.&lt;/p&gt;
&lt;div class="sidebar"&gt;
&lt;p class="first sidebar-title"&gt;&lt;em&gt;Unlearning SQL …&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Sat, 08 Feb 2025 08:52:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2025-02-08:/2025-02-08-joomla_conversion.html</guid><category>Python</category><category>#python</category><category>database</category><category>sql</category><category>hugo</category></item><item><title>Database Migration, Part IV</title><link>https://slott56.github.io/2025-01-21_database_migration_part_iv.html</link><description>&lt;p&gt;We're talking about extracting data from complex relational databases.
This is -- in a way -- another case study for my &lt;em&gt;Unlearning SQL&lt;/em&gt; book.&lt;/p&gt;
&lt;div class="sidebar"&gt;
&lt;p class="first sidebar-title"&gt;&lt;em&gt;Unlearning SQL&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;KDP &lt;a class="reference external" href="https://www.amazon.com/dp/B0DDMFMXNW"&gt;https://www.amazon.com/dp/B0DDMFMXNW&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Lulu &lt;a class="reference external" href="https://www.lulu.com/shop/steven-lott/unlearning-sql/paperback/product-yvnm8zn.html?page=1&amp;amp;pageSize=4"&gt;https://www.lulu.com/shop/steven-lott/unlearning-sql/paperback/product-yvnm8zn.html?page=1&amp;amp;pageSize=4&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Google Play &lt;a class="reference external" href="https://play.google.com/store/books/details?id=23WAEAAAQBAJ"&gt;https://play …&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 21 Jan 2025 07:21:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2025-01-21:/2025-01-21_database_migration_part_iv.html</guid><category>Python</category><category>#python</category><category>database</category><category>sql</category></item><item><title>Database Migration, Part III</title><link>https://slott56.github.io/2025-01-14_database_migration_part_iii.html</link><description>&lt;p&gt;We're talking about extracting data from complex relational databases.
This is -- in a way -- another case study for my &lt;em&gt;Unlearning SQL&lt;/em&gt; book.&lt;/p&gt;
&lt;div class="sidebar"&gt;
&lt;p class="first sidebar-title"&gt;&lt;em&gt;Unlearning SQL&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;KDP &lt;a class="reference external" href="https://www.amazon.com/dp/B0DDMFMXNW"&gt;https://www.amazon.com/dp/B0DDMFMXNW&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Lulu &lt;a class="reference external" href="https://www.lulu.com/shop/steven-lott/unlearning-sql/paperback/product-yvnm8zn.html?page=1&amp;amp;pageSize=4"&gt;https://www.lulu.com/shop/steven-lott/unlearning-sql/paperback/product-yvnm8zn.html?page=1&amp;amp;pageSize=4&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Google Play &lt;a class="reference external" href="https://play.google.com/store/books/details?id=23WAEAAAQBAJ"&gt;https://play …&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 14 Jan 2025 07:21:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2025-01-14:/2025-01-14_database_migration_part_iii.html</guid><category>Python</category><category>#python</category><category>database</category><category>sql</category></item><item><title>Database Migration, Part II</title><link>https://slott56.github.io/2025-01-07_database_migration_part_ii.html</link><description>&lt;p&gt;We're talking about extracting data from complex relational databases.
This is -- in a way -- another case study for my &lt;em&gt;Unlearning SQL&lt;/em&gt; book.&lt;/p&gt;
&lt;div class="sidebar"&gt;
&lt;p class="first sidebar-title"&gt;&lt;em&gt;Unlearning SQL&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;KDP &lt;a class="reference external" href="https://www.amazon.com/dp/B0DDMFMXNW"&gt;https://www.amazon.com/dp/B0DDMFMXNW&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Lulu &lt;a class="reference external" href="https://www.lulu.com/shop/steven-lott/unlearning-sql/paperback/product-yvnm8zn.html?page=1&amp;amp;pageSize=4"&gt;https://www.lulu.com/shop/steven-lott/unlearning-sql/paperback/product-yvnm8zn.html?page=1&amp;amp;pageSize=4&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Google Play &lt;a class="reference external" href="https://play.google.com/store/books/details?id=23WAEAAAQBAJ"&gt;https://play …&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 07 Jan 2025 13:21:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2025-01-07:/2025-01-07_database_migration_part_ii.html</guid><category>Python</category><category>#python</category><category>database</category><category>sql</category></item><item><title>Database Migration, Part I</title><link>https://slott56.github.io/2024-12-31_database_migration_part_i.html</link><description>&lt;p&gt;Let's talk about extracting data from complex relational databases.
This is -- in a way -- another case study for my Unlearning SQL book.&lt;/p&gt;
&lt;div class="sidebar"&gt;
&lt;p class="first sidebar-title"&gt;&lt;em&gt;Unlearning SQL&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;KDP &lt;a class="reference external" href="https://www.amazon.com/dp/B0DDMFMXNW"&gt;https://www.amazon.com/dp/B0DDMFMXNW&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Lulu &lt;a class="reference external" href="https://www.lulu.com/shop/steven-lott/unlearning-sql/paperback/product-yvnm8zn.html?page=1&amp;amp;pageSize=4"&gt;https://www.lulu.com/shop/steven-lott/unlearning-sql/paperback/product-yvnm8zn.html?page=1&amp;amp;pageSize=4&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Google Play &lt;a class="reference external" href="https://play.google.com/store/books/details?id=23WAEAAAQBAJ"&gt;https://play …&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 31 Dec 2024 13:21:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2024-12-31:/2024-12-31_database_migration_part_i.html</guid><category>Python</category><category>#python</category><category>database</category><category>sql</category></item><item><title>Seasons Greetings 2024</title><link>https://slott56.github.io/2024-12-22_seasons_greetings_2024.html</link><description>&lt;p&gt;I'm working on revisions to Python 3 Object-Oriented Programming.
Meanwhile, I have big news on Packt's end-of-year promotions.&lt;/p&gt;
&lt;p&gt;I’m always striving to make the knowledge in &lt;em&gt;Python Real-World Projects&lt;/em&gt;, as useful as possible.
That’s why I’m so excited about Packt’s $9.99 End-of-Year Sale!
This adds …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Sun, 22 Dec 2024 07:21:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2024-12-22:/2024-12-22_seasons_greetings_2024.html</guid><category>Books</category><category>#python</category><category>packt</category><category>techbooks</category></item><item><title>Stingray Reader Release 5.1</title><link>https://slott56.github.io/2024-10-24_stingray_reader_release_5_1.html</link><description>&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Fundamentally, the use of …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Thu, 24 Oct 2024 08:00:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2024-10-24:/2024-10-24_stingray_reader_release_5_1.html</guid><category>Technologies</category><category>stingray reader</category><category>#python</category><category>CLI</category></item><item><title>Better than grep</title><link>https://slott56.github.io/2024-09-26-better_than_grep.html</link><description>&lt;p&gt;In the process of writing &lt;em&gt;Unlearning SQL&lt;/em&gt;, I had a need to extract SQL blocks from Python programs.
Of course, I tried &lt;tt class="docutils literal"&gt;grep&lt;/tt&gt;.
It wasn't ideal.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="first admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;Book is available here:&lt;/p&gt;
&lt;ul class="last simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://www.amazon.com/dp/B0DDMFMXNW"&gt;https://www.amazon.com/dp/B0DDMFMXNW&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://www.lulu.com/shop/steven-lott/unlearning-sql/paperback/product-yvnm8zn.html?page=1&amp;amp;pageSize=4"&gt;https://www.lulu.com/shop/steven-lott/unlearning-sql/paperback/product-yvnm8zn.html?page=1&amp;amp;pageSize …&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Thu, 26 Sep 2024 09:50:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2024-09-26:/2024-09-26-better_than_grep.html</guid><category>Python</category><category>parsing</category><category>ast</category><category>SQL</category><category>grep</category></item><item><title>Modern Python Cookbook and Type Hints</title><link>https://slott56.github.io/2024-09-18-cookbook_and_mypy.html</link><description>&lt;p&gt;Modern Python Cookbook — with lots and lots of recipes — is something you might need. Find the results of checking all these recipes here:
&lt;a class="reference external" href="https://www.amazon.com/Modern-Python-Cookbook-updated-techniques/dp/1835466389"&gt;https://www.amazon.com/Modern-Python-Cookbook-updated-techniques/dp/1835466389&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I (reluctantly) switched from using &lt;strong&gt;mypy&lt;/strong&gt; to using &lt;strong&gt;pyright&lt;/strong&gt; to check all of these recipes carefully. The type alias (&lt;a class="reference external" href="https://peps.python.org/pep-0695"&gt;PEP …&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Wed, 18 Sep 2024 16:03:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2024-09-18:/2024-09-18-cookbook_and_mypy.html</guid><category>Python</category><category>book</category><category>packt</category><category>cookbook</category></item><item><title>Revised Books Available</title><link>https://slott56.github.io/2024-09-03-revised_books_available.html</link><description>&lt;p&gt;Big Announcement: the 2024.8 version of &lt;em&gt;Unlearning SQL&lt;/em&gt;, and the 2024.9 version of &lt;em&gt;Pivot to Python&lt;/em&gt; are available from booksellers online. Both are revised and all the code tested with Python 3.12.&lt;/p&gt;
&lt;div class="section" id="unlearning-sql"&gt;
&lt;h2&gt;Unlearning SQL&lt;/h2&gt;
&lt;p&gt;This book shows you how to translate essential SQL concepts into the Python …&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 03 Sep 2024 14:35:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2024-09-03:/2024-09-03-revised_books_available.html</guid><category>Books</category><category>Python</category><category>SQL</category><category>database</category></item><item><title>Sphinx EPUB and Print</title><link>https://slott56.github.io/2024-08-27-sphinx_epub_and_print.html</link><description>&lt;p&gt;Let's say you want to self-publish an ebook and a print-on-demand paperback book.&lt;/p&gt;
&lt;p&gt;This isn't impossible, nor is it particularly easy. Here's what I've learned.&lt;/p&gt;
&lt;div class="section" id="basic-workflow"&gt;
&lt;h2&gt;Basic Workflow&lt;/h2&gt;
&lt;p&gt;You've got two obvious paths to make sure your EPUB book and your print-on-demand book match:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;Convert EPUB to Print. This generally means …&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 27 Aug 2024 16:31:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2024-08-27:/2024-08-27-sphinx_epub_and_print.html</guid><category>Books</category><category>sphinx</category><category>RST</category><category>LaTeX</category><category>epub</category><category>PDF</category></item><item><title>Unlearning SQL, revised</title><link>https://slott56.github.io/2024-08-20-unlearning_sql.html</link><description>&lt;p&gt;Book (pre) Announcement:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;dl class="first docutils"&gt;
&lt;dt&gt;KDP - See &lt;a class="reference external" href="https://www.amazon.com/stores/Steven-Lott/author/B00HNRSLEK"&gt;https://www.amazon.com/stores/Steven-Lott/author/B00HNRSLEK&lt;/a&gt; for my author's page.&lt;/dt&gt;
&lt;dd&gt;&lt;a class="reference external" href="https://www.amazon.com/Unlearning-SQL-hammer-every-problem-ebook/dp/B0DDMFMXNW"&gt;https://www.amazon.com/Unlearning-SQL-hammer-every-problem-ebook/dp/B0DDMFMXNW&lt;/a&gt; is the book.&lt;/dd&gt;
&lt;/dl&gt;
&lt;/li&gt;
&lt;li&gt;Google Play - See &lt;a class="reference external" href="https://play.google.com/store/books/details?id=23WAEAAAQBAJ"&gt;https://play.google.com/store/books/details?id=23WAEAAAQBAJ&lt;/a&gt;. Be sure to get the 2024.08 edition; there's a previous …&lt;/li&gt;&lt;/ul&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 20 Aug 2024 16:31:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2024-08-20:/2024-08-20-unlearning_sql.html</guid><category>Books</category><category>building skills</category><category>python</category><category>SQL</category><category>database</category></item><item><title>Modern Python Cookbook, 3e</title><link>https://slott56.github.io/2024-08-01-modern_python_cookbook_3e.html</link><description>&lt;p&gt;Book Announcement:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://www.packtpub.com/en-us/product/modern-python-cookbook-9781835466384"&gt;https://www.packtpub.com/en-us/product/modern-python-cookbook-9781835466384&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There are about 130 recipes in here. Some new. Some revised.
All examined (and tested) for Python 3.12.&lt;/p&gt;
&lt;p&gt;For the Python folks who are just starting as well as those looking to pick up some more skills, this is for …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Thu, 01 Aug 2024 13:41:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2024-08-01:/2024-08-01-modern_python_cookbook_3e.html</guid><category>Python</category><category>book</category><category>packt</category><category>cookbook</category></item><item><title>Synthetic Data Tool</title><link>https://slott56.github.io/2024-07-25-synthetic_data_tool.html</link><description>&lt;p&gt;See &lt;a class="reference external" href="https://slott56.github.io/2024-06-29-synthetic_data.html"&gt;Synthetic Data&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I've updated the repository with a &amp;quot;Noisy Data&amp;quot; feature.&lt;/p&gt;
&lt;p&gt;This will generate bulk data with invalid field values.&lt;/p&gt;
&lt;p&gt;It helps with testing ETL pipelines to be sure they will scale to the expected volumes.&lt;/p&gt;
&lt;p&gt;Clone &lt;a class="reference external" href="https://github.com/slott56/DataSynthTool"&gt;https://github.com/slott56/DataSynthTool&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Read &lt;a class="reference external" href="https://slott56.github.io/DataSynthTool/_build/html/index.html"&gt;https://slott56.github.io/DataSynthTool/_build …&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Thu, 25 Jul 2024 14:22:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2024-07-25:/2024-07-25-synthetic_data_tool.html</guid><category>Python</category><category>synthetic data</category><category>project</category></item><item><title>Functional SQL in Pure Python</title><link>https://slott56.github.io/2024-07-16-functional_sql_in_pure_python.html</link><description>&lt;p&gt;I've published a framework for doing SQL-like programming in Pure Python -- no database required.&lt;/p&gt;
&lt;p&gt;Here: &lt;a class="reference external" href="https://github.com/slott56/functional-SQL"&gt;https://github.com/slott56/functional-SQL&lt;/a&gt;.
See the &lt;a class="reference external" href="https://slott56.github.io/functional-SQL/_build/html/index.html"&gt;functional-SQL&lt;/a&gt; documentation.&lt;/p&gt;
&lt;p&gt;This allows us to transform SQL:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;c2&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;names_table&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;values_table&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;c1&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;To pure Python:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name …&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 16 Jul 2024 08:14:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2024-07-16:/2024-07-16-functional_sql_in_pure_python.html</guid><category>Python</category><category>SQL</category><category>project</category><category>functional programming</category><category>functional python programming</category></item><item><title>DataSynthTool Repository</title><link>https://slott56.github.io/2024-07-01-datasynthtool_repository.html</link><description>&lt;p&gt;I've published
a framework for making tools to leverage formal schema definitions to synthesize bulk data for performance tuning.&lt;/p&gt;
&lt;p&gt;Here: &lt;a class="reference external" href="https://github.com/slott56/DataSynthTool"&gt;https://github.com/slott56/DataSynthTool&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;See the &lt;a class="reference external" href="https://slott56.github.io/DataSynthTool/synthetic_data.slides.html#/"&gt;original talk&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;See the &lt;a class="reference external" href="https://slott56.github.io/DataSynthTool/_build/html/index.html"&gt;documentation&lt;/a&gt;&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Mon, 01 Jul 2024 19:22:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2024-07-01:/2024-07-01-datasynthtool_repository.html</guid><category>Python</category><category>synthetic data</category><category>project</category></item><item><title>Synthetic Data</title><link>https://slott56.github.io/2024-06-29-synthetic_data.html</link><description>&lt;p&gt;&lt;strong&gt;Book?&lt;/strong&gt; Second draft (with tech review comments addressed) off to editors.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Boat?&lt;/strong&gt; Still on the hard during Hurricane Season.&lt;/p&gt;
&lt;div class="section" id="synthetic-data-1"&gt;
&lt;h2&gt;Synthetic Data&lt;/h2&gt;
&lt;p&gt;I've had a passing interest in data synthesis for decades.&lt;/p&gt;
&lt;p&gt;Early on in my career, I figured out how the Z/OS IEDBG utility worked.
See &lt;a class="reference external" href="https://www.ibm.com/docs/en/zos/3.1.0?topic=utilities-iebdg-test-data-generator-program"&gt;https://www.ibm …&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Sat, 29 Jun 2024 09:22:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2024-06-29:/2024-06-29-synthetic_data.html</guid><category>Python</category><category>synthetic data</category><category>project</category></item><item><title>Git Nightmare</title><link>https://slott56.github.io/2024-05-07-github_nightmare.html</link><description>&lt;p&gt;My sailing blog, &lt;a class="reference external" href="https://itmaybeahack.com/TeamRedCruising2/index.html"&gt;Team Red Cruising&lt;/a&gt;
is very large: 859 postings over the last few years. 2,334 image files.&lt;/p&gt;
&lt;p&gt;This is a LOT of content.&lt;/p&gt;
&lt;p&gt;A few of the files (were) Movies, which tend to create immense files.&lt;/p&gt;
&lt;p&gt;The whole mess was so big&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How Big Was It?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 07 May 2024 08:01:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2024-05-07:/2024-05-07-github_nightmare.html</guid><category>Python</category><category>git</category><category>github</category><category>memory</category></item><item><title>DBLock Context Manager</title><link>https://slott56.github.io/2024-03-10-dblock-context-manager.html</link><description>&lt;p&gt;Consider, for a moment, the &lt;tt class="docutils literal"&gt;shelve&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;dbm&lt;/tt&gt; packages for storing things in a “database.”
Built-in. Lightweight. The database is essentially a mapping from identifiers to objects.
It can be quite nice.&lt;/p&gt;
&lt;p&gt;The &lt;tt class="docutils literal"&gt;shelve&lt;/tt&gt; module directly puts Python objects in a file.
It’s an ideal database structure for Python …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Sun, 10 Mar 2024 08:01:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2024-03-10:/2024-03-10-dblock-context-manager.html</guid><category>Python</category><category>database</category><category>dbm</category><category>shelve</category><category>multiprocessing</category><category>context manager</category></item><item><title>Functional Python and Lambdas</title><link>https://slott56.github.io/2024-02-09-functional_python_and_lambdas.html</link><description>&lt;p&gt;I saw a confusing post on &lt;a class="reference external" href="https://fosstodon.org"&gt;https://fosstodon.org&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I won't link to it, but I will quote it because it repeats some common misconceptions.&lt;/p&gt;
&lt;pre class="literal-block"&gt;
I have some iterator chain (in reality longer and more complex than this example).
And now in one or more steps, I need to add …&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Fri, 09 Feb 2024 08:01:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2024-02-09:/2024-02-09-functional_python_and_lambdas.html</guid><category>Python</category><category>functional programming</category><category>functional python programming</category></item><item><title>Rewrites are NOT hazardous</title><link>https://slott56.github.io/2024-02-06-rewrites_are_not_hazardous.html</link><description>&lt;p&gt;First, read this: &lt;a class="reference external" href="https://www.industriallogic.com/blog/rewrites-hazardous/"&gt;Hazards And Safeguards for Software Rewrites&lt;/a&gt;.
This is an infuriating article. The first part is nonsense. I wonder if it's intended to be read ironically?
Maybe it's a list of bad ideas?
Skip straight to the &lt;strong&gt;Safeguards for Rewrites&lt;/strong&gt; section. It's really good.&lt;/p&gt;
&lt;p&gt;Also, this &lt;a class="reference external" href="https://www.industriallogic.com/blog/characterization-testing-in-nuclear-power-and-software/"&gt;Characterization Testing …&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 06 Feb 2024 08:01:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2024-02-06:/2024-02-06-rewrites_are_not_hazardous.html</guid><category>Management</category><category>test-driven reverse engineering</category><category>refactoring</category><category>legacy-code</category><category>estimating</category></item><item><title>More Reasons to Stop Bash-ing</title><link>https://slott56.github.io/2023_12_19-more_reasons_to_stop_bashing.html</link><description>&lt;p&gt;There are many good reasons to use shell scripts.
Mostly, a script can be useful when it's an alias that launches an application.
Beyond that, I have doubts.&lt;/p&gt;
&lt;div class="section" id="bluf"&gt;
&lt;h2&gt;BLUF&lt;/h2&gt;
&lt;p&gt;Incumbency is a popular argument for bash.&lt;/p&gt;
&lt;p&gt;It's not a good argument, however.&lt;/p&gt;
&lt;p&gt;Use &lt;a class="reference external" href="https://pypi.org/project/invoke/"&gt;invoke&lt;/a&gt; and you'll be much happier.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="background"&gt;
&lt;h2&gt;Background …&lt;/h2&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 19 Dec 2023 08:01:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-12-19:/2023_12_19-more_reasons_to_stop_bashing.html</guid><category>Python</category><category>shell</category><category>bash</category><category>unit-testing</category></item><item><title>Understanding the Abstraction -- matplotlib Edition</title><link>https://slott56.github.io/2023-12-12-understanding_the_abstraction.html</link><description>&lt;p&gt;I wasted three days because I refused to get a grip on how &lt;a class="reference external" href="https://matplotlib.org"&gt;matplotlib&lt;/a&gt; &lt;strong&gt;really&lt;/strong&gt; works.&lt;/p&gt;
&lt;p&gt;Most of the time, folks like me are happy and successful using the &lt;a class="reference external" href="https://matplotlib.org/stable/api/pyplot_summary.html"&gt;pyplot&lt;/a&gt; module.
The &lt;a class="reference external" href="https://matplotlib.org/stable/users/explain/quick_start.html"&gt;Quickstart&lt;/a&gt; provides brilliant, working
examples.&lt;/p&gt;
&lt;p&gt;As my partner's grandfather used to say, &amp;quot;We're off to the races in …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 12 Dec 2023 08:01:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-12-12:/2023-12-12-understanding_the_abstraction.html</guid><category>Python</category><category>language</category><category>semantics</category></item><item><title>It's Not THE Ternary Operator -- there are many</title><link>https://slott56.github.io/2023_12_05-not_the_ternary_operator.html</link><description>&lt;p&gt;I'm sick of reading about &lt;strong&gt;THE&lt;/strong&gt; Ternary Operator.&lt;/p&gt;
&lt;p&gt;There is not merely &lt;strong&gt;a&lt;/strong&gt; single operator that is ternary.
There are many operators that are ternary.&lt;/p&gt;
&lt;p&gt;Here's one example:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
&amp;gt;&amp;gt;&amp;gt; 6+1 &amp;gt;= 6 &amp;gt;= 6-1
&lt;/pre&gt;
&lt;p&gt;The &lt;tt class="docutils literal"&gt;&amp;gt;= &amp;gt;=&lt;/tt&gt; operator is ternary. It has 3 operands.  Count them.&lt;/p&gt;
&lt;p&gt;There are a 36 of these ternary operators …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 05 Dec 2023 08:01:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-12-05:/2023_12_05-not_the_ternary_operator.html</guid><category>Python</category><category>language</category><category>semantics</category></item><item><title>Cleaning up Examples</title><link>https://slott56.github.io/2023-11-17-example_cleanup.html</link><description>&lt;p&gt;Stand-alone document files for tech writing are awful.
They should &lt;em&gt;not&lt;/em&gt; be used as widely as they are.&lt;/p&gt;
&lt;div class="section" id="bluf-don-t-use-ms-word"&gt;
&lt;h2&gt;BLUF: Don't Use MS-Word&lt;/h2&gt;
&lt;p&gt;We used to call editors like MS-Word &lt;em&gt;WYSIWYG&lt;/em&gt; -- What You See Is What You Get.
Once upon a time, an editor that immediately presented the final rendered doc …&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Fri, 17 Nov 2023 08:01:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-11-17:/2023-11-17-example_cleanup.html</guid><category>Books</category><category>writing</category><category>latex</category></item><item><title>This is Awful</title><link>https://slott56.github.io/2023-11-14-this_is_awful.html</link><description>&lt;p&gt;This is a disheartening thing to read&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;As someone who doesn't do a ton of JSON parsing on the command line, I tend to forget &lt;a class="reference external" href="https://jqlang.github.io/jq/manual/"&gt;jq&lt;/a&gt; syntax.&lt;/p&gt;
&lt;p&gt;Two tools I really like are &lt;a class="reference external" href="github.com/tomnomnom/gron"&gt;gron&lt;/a&gt; (make JSON greppable) from &amp;#64;tomnomnom and &lt;a class="reference external" href="github.com/noahgorstein/jqp"&gt;jqp&lt;/a&gt; ..., which provides a &amp;quot;tui playground for exploring jq.&amp;quot;&lt;/p&gt;
&lt;p&gt;98 …&lt;/p&gt;&lt;/blockquote&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 14 Nov 2023 08:01:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-11-14:/2023-11-14-this_is_awful.html</guid><category>Python</category><category>bash</category><category>json</category></item><item><title>The Debugger</title><link>https://slott56.github.io/2023_10_10-the_debugger.html</link><description>&lt;p&gt;See &lt;a class="reference external" href="https://www.bitecode.dev/p/python-312-what-didnt-make-the-headlines"&gt;Python 3.12: what didn't make the headlines&lt;/a&gt;. This is &lt;strong&gt;very&lt;/strong&gt; helpful.&lt;/p&gt;
&lt;p&gt;It is a great list of 7 key features of Python 3.12.&lt;/p&gt;
&lt;p&gt;With one tiny point I need to object to.&lt;/p&gt;
&lt;div class="section" id="i-don-t-like-debuggers"&gt;
&lt;h2&gt;I don't like debuggers&lt;/h2&gt;
&lt;p&gt;This is a strongly-held position.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Debuggers are harmful.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I say this …&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 10 Oct 2023 18:21:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-10-10:/2023_10_10-the_debugger.html</guid><category>Python</category><category>games</category><category>tutorial</category></item><item><title>Analyzing the "Worst-of-2D6" Dice Mechanic</title><link>https://slott56.github.io/2023_09_14-analyzing_a_dice_mechanic.html</link><description>&lt;p&gt;A &amp;quot;Dice Mechanic&amp;quot;? Yes. The thing you do with the dice to determine an outcome.
We'll use Python to see how the dice shake out.&lt;/p&gt;
&lt;div class="section" id="a-little-backstory"&gt;
&lt;h2&gt;A little backstory&lt;/h2&gt;
&lt;p&gt;For a casino game of craps, the roll of the dice can be 7 or 11 for an immediate win,
2, 3 …&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Thu, 14 Sep 2023 14:57:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-09-14:/2023_09_14-analyzing_a_dice_mechanic.html</guid><category>TTRPG</category><category>games</category><category>tutorial</category><category>dice</category><category>mechanic</category></item><item><title>Preorder the Python Real-World Projects Book</title><link>https://slott56.github.io/2023_09_05-preorder_project_book.html</link><description>&lt;p&gt;Want a book with dozens of project ideas?&lt;/p&gt;
&lt;p&gt;Each has a description, and approach, and deliverables.
It's a lot like ordinary development work, but with some detailed guidance from the author.
(And no deadline imposed by your team lead or manager.)&lt;/p&gt;
&lt;p&gt;These are projects you can do. You can post …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 05 Sep 2023 09:00:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-09-05:/2023_09_05-preorder_project_book.html</guid><category>Books</category><category>community</category><category>projects</category><category>portfolio</category></item><item><title>The Echo-Pipe Trap [Updated]</title><link>https://slott56.github.io/2023-08-30-the_echo_pipe_trap.html</link><description>&lt;p&gt;This is a &lt;strong&gt;great&lt;/strong&gt; question.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://fosstodon.org/&amp;#64;JustineSmithies/110979871574705636"&gt;https://fosstodon.org/&amp;#64;JustineSmithies/110979871574705636&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This works, they said.&lt;/p&gt;
&lt;blockquote&gt;
echo -en &amp;quot;Firefox\0icon\x1fweechat&amp;quot; | fuzzel -d -w 100 -l 10&lt;/blockquote&gt;
&lt;p&gt;But. The superficial switch to &lt;tt class="docutils literal"&gt;subprocess.Popen()&lt;/tt&gt; doesn't work.&lt;/p&gt;
&lt;p&gt;Why?&lt;/p&gt;
&lt;p&gt;The way &lt;tt class="docutils literal"&gt;echo&lt;/tt&gt; works varies from shell to shell. When MacOSX changes to zsh, things …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Wed, 30 Aug 2023 09:00:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-08-30:/2023-08-30-the_echo_pipe_trap.html</guid><category>Python</category><category>shell</category><category>bash</category></item><item><title>More Python Quirks Debunking</title><link>https://slott56.github.io/2023-08-15-more_python_quirk_debunking.html</link><description>&lt;p&gt;Stuff I found on the internet that I have to disagree with.&lt;/p&gt;
&lt;p&gt;(And no, I didn't ask for clarification.
If the author posts things without supporting details it suggests they might lack the supporting
details. I can be charitable and assume they don't really care about providing useful information,
but …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 15 Aug 2023 09:00:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-08-15:/2023-08-15-more_python_quirk_debunking.html</guid><category>Python</category><category>community</category><category>quirks</category></item><item><title>Python Quirks that aren't very quirky</title><link>https://slott56.github.io/2023-08-01-python_quirks_that_arent_very_quirky.html</link><description>&lt;p&gt;See &lt;a class="reference external" href="https://writing.peercy.net/p/python-quirks"&gt;https://writing.peercy.net/p/python-quirks&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Superficially, most of these are true.&lt;/p&gt;
&lt;p&gt;Looking a little more deeply, most of them are also presented in a somewhat misleading way.
A few set up a good punch-line. The &lt;strong&gt;Inheritance&lt;/strong&gt; one, for example, is funny.&lt;/p&gt;
&lt;p&gt;If the point is to force a …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 01 Aug 2023 09:00:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-08-01:/2023-08-01-python_quirks_that_arent_very_quirky.html</guid><category>Python</category><category>community</category><category>quirks</category></item><item><title>Two Problems with Python</title><link>https://slott56.github.io/2023-07-25-two_problems_with_python.html</link><description>&lt;p&gt;I want to call out two huge problems with Python.
I'm not the first to point these out, but they've been bothering me for a while.&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#surprising-changes"&gt;Surprising Changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#dependency-hell"&gt;Dependency Hell&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I've provided them here to save folks from repeating these.
They're now officially &amp;quot;known&amp;quot; and there's no point in repeating …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 25 Jul 2023 09:00:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-07-25:/2023-07-25-two_problems_with_python.html</guid><category>Python</category><category>community</category></item><item><title>Literate Programming with PyWebLP</title><link>https://slott56.github.io/2023-07-18-literate_programming_with_pyweblp.html</link><description>&lt;p&gt;See &lt;a class="reference external" href="https://github.com/slott56/py-web-tool"&gt;https://github.com/slott56/py-web-tool&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And &lt;a class="reference external" href="https://pypi.org/project/py-web-lp/"&gt;https://pypi.org/project/py-web-lp/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I finally made the PyWeb LP tool installable from PyPI.&lt;/p&gt;
&lt;p&gt;I need to fix the name of the GitHub repo (some day) to make it also say &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;py-web-lp&lt;/span&gt;&lt;/tt&gt;.
I should also fixup my tag cloud to say pyweblp …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 18 Jul 2023 09:00:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-07-18:/2023-07-18-literate_programming_with_pyweblp.html</guid><category>literate programming</category><category>#python</category><category>pyweb</category></item><item><title>An Implementation of Annotated Types</title><link>https://slott56.github.io/2023-07-11-an_implementation_of_annotated_types.html</link><description>&lt;p&gt;The &lt;tt class="docutils literal"&gt;typing&lt;/tt&gt; module includes the mysterious-looking &lt;tt class="docutils literal"&gt;Annotated&lt;/tt&gt; type hint.
See &lt;a class="reference external" href="https://docs.python.org/3/library/typing.html#typing.Annotated"&gt;https://docs.python.org/3/library/typing.html#typing.Annotated&lt;/a&gt; for details.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference internal" href="#what-does-this-do"&gt;What does this do?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="reference internal" href="#why-do-i-need-it"&gt;Why do I need it?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="reference internal" href="#where-can-i-see-examples"&gt;Where can I see examples?&lt;/a&gt;&lt;/p&gt;
&lt;div class="section" id="what-does-this-do"&gt;
&lt;h2&gt;What does this do?&lt;/h2&gt;
&lt;p&gt;The &lt;tt class="docutils literal"&gt;Annotated&lt;/tt&gt; type hint lets us append &amp;quot;details&amp;quot; to a …&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 11 Jul 2023 09:00:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-07-11:/2023-07-11-an_implementation_of_annotated_types.html</guid><category>Python</category><category>patterns</category><category>type-hints</category></item><item><title>any() and all() and Identity Elements</title><link>https://slott56.github.io/2023-06-27-any_and_all_and_identity_elements.html</link><description>&lt;p&gt;This was a surprising thing (for me) to see.
Surprising because -- after writing a book about functional programming,
I'd forgotten that some of the ideas are actually really new to people.&lt;/p&gt;
&lt;p&gt;(I've omitted the source of the quote because I want to reuse this
without worrying about link rot. Some …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 27 Jun 2023 09:00:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-06-27:/2023-06-27-any_and_all_and_identity_elements.html</guid><category>Technologies</category><category>patterns</category><category>python</category><category>functional-programming</category></item><item><title>Python and Encapsulation -- How do I private?</title><link>https://slott56.github.io/2023_06_20-python_and_encapsulation.html</link><description>&lt;p&gt;Central to OO design is &amp;quot;encapsulation.&amp;quot; It's so central it is part of several separate principles.&lt;/p&gt;
&lt;p&gt;In the S. O. L. I. D. design principles it's the &lt;strong&gt;Interface Segregation Principle&lt;/strong&gt;.
And a significant part of the &lt;strong&gt;Single Responsibility Principle&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;In some cases, Python n00bz -- folks who already know some OO …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 20 Jun 2023 08:00:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-06-20:/2023_06_20-python_and_encapsulation.html</guid><category>Technologies</category><category>architecture</category><category>software design</category><category>design patterns</category><category>python</category></item><item><title>Software Rewrites to Add Hints</title><link>https://slott56.github.io/2023_05_04-software_rewrites_to_add_hints.html</link><description>&lt;p&gt;Let's reach way, way back. 1989 - 1990.
This will let me talk about OO programming and Python Type Hints. (really)
And doing OO design for things that are as pervasive (and transparent) as air.
Things that &lt;strong&gt;need&lt;/strong&gt; to be part of a design, but don't appear in
any documentation.&lt;/p&gt;
&lt;p&gt;In …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Thu, 04 May 2023 08:00:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-05-04:/2023_05_04-software_rewrites_to_add_hints.html</guid><category>TTRPG</category><category>architecture</category><category>object-oriented design</category><category>patterns</category><category>python</category><category>games</category></item><item><title>Some Design Pattern Thoughts</title><link>https://slott56.github.io/2023_04_25-some_design_pattern_thoughts.html</link><description>&lt;p&gt;The question was &amp;quot;Favorite Design Patterns.&amp;quot;&lt;/p&gt;
&lt;p&gt;This is tricky because -- well -- so many patterns appear and re-appear in software.
Picking a few from the vast world of patterns is fraught with difficulties.&lt;/p&gt;
&lt;p&gt;Here are some thoughts:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://slott56.github.io/2007_01_03-code_quality_which_implementation_is_better.html"&gt;Code Quality - Which Implementation is &amp;quot;Better&amp;quot;?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://slott56.github.io/2007_06_25-state_based_object_modeling.html"&gt;State-Based Object Modeling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://slott56.github.io/2022_11_29-functional_programming_and_finite_state_automata_fsa.html"&gt;Functional Programming and Finite State …&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 25 Apr 2023 08:00:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-04-25:/2023_04_25-some_design_pattern_thoughts.html</guid><category>Technologies</category><category>architecture</category><category>software design</category><category>design patterns</category><category>python</category></item><item><title>Side Quest</title><link>https://slott56.github.io/2023_04_04-side_quest.html</link><description>&lt;p&gt;Few things are as distracting as those god-awful side quests.&lt;/p&gt;
&lt;p&gt;In this case, I had to search out all of the examples in my new book drafts.&lt;/p&gt;
&lt;div class="section" id="previously"&gt;
&lt;h2&gt;Previously&lt;/h2&gt;
&lt;p&gt;Once upon a time, it was a manual check of code in the book to be sure it made sense.&lt;/p&gt;
&lt;p&gt;Ugh. Not …&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 04 Apr 2023 08:00:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-04-04:/2023_04_04-side_quest.html</guid><category>Technologies</category><category>architecture</category><category>software design</category><category>writing</category><category>workflow</category></item><item><title>EDI Message Parsing</title><link>https://slott56.github.io/2023_03_17-edi_message_parsing.html</link><description>&lt;p&gt;Reaching back to 2008. Yes. Decade(s) ago. Python 2.5.&lt;/p&gt;
&lt;p&gt;I was reminded of this when a former colleague
pinged me about this: &lt;a class="reference external" href="https://github.com/slott56/TigerShark"&gt;https://github.com/slott56/TigerShark&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Yes, it's an X12/EDI message parsing library from -- well -- decades ago.&lt;/p&gt;
&lt;div class="section" id="what-is-all-this-about"&gt;
&lt;h2&gt;What is all this about?&lt;/h2&gt;
&lt;p&gt;Short answer: Parsing X12 …&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Fri, 17 Mar 2023 08:00:00 -0400</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-03-17:/2023_03_17-edi_message_parsing.html</guid><category>Technologies</category><category>architecture</category><category>software design</category><category>data structure</category><category>algorithm</category><category>edi</category><category>x12</category></item><item><title>Programming Languages -- In Time Order</title><link>https://slott56.github.io/2023_02_21-programming_languages.html</link><description>&lt;p&gt;See &lt;a class="reference external" href="https://slott56.github.io/2008_09_28-programming_languages_ive_learned_more_or_less_in_order_update.html"&gt;Programming Languages I've Learned (more-or-less in order) [Update]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This came up on Twitter and Fosstodon.&lt;/p&gt;
&lt;p&gt;See &lt;a class="reference external" href="https://fosstodon.org/&amp;#64;vpavlyshyn/109908255464181943"&gt;https://fosstodon.org/&amp;#64;vpavlyshyn/109908255464181943&lt;/a&gt;
and &lt;a class="reference external" href="https://fosstodon.org/&amp;#64;slott56/109908527412493172"&gt;https://fosstodon.org/&amp;#64;slott56/109908527412493172&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I omitted a few things from the list because -- well -- there are a LOT of languages.&lt;/p&gt;
&lt;p&gt;For example, in the 90's I …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 21 Feb 2023 08:00:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-02-21:/2023_02_21-programming_languages.html</guid><category>Technologies</category><category>books</category><category>building skills</category><category>learning</category><category>programming languages</category></item><item><title>New Monitor</title><link>https://slott56.github.io/2023_02_18-new_monitor.html</link><description>&lt;p&gt;The (almost) 10-year old 27&amp;quot; Thunderbolt display finally died.&lt;/p&gt;
&lt;p&gt;Well, it didn't really &lt;strong&gt;die&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The Thunderbolt connector had gotten impossibly flaky.
If I looked at it wrong, the monitor glitched or disonnected.&lt;/p&gt;
&lt;p&gt;It was dead enough that I wasn't going to deal with it.&lt;/p&gt;
&lt;p&gt;It involved this morass of adapters …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Sat, 18 Feb 2023 08:00:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-02-18:/2023_02_18-new_monitor.html</guid><category>Technologies</category><category>hardware</category><category>macosx</category><category>macintosh</category><category>work-life</category><category>writing</category></item><item><title>Jupyter Notebook for Tide Table Analysis</title><link>https://slott56.github.io/2023_02_14-tide_table_analysis.html</link><description>&lt;p&gt;I'm undecided if this goes into the next book.
Maybe this is a teaser...
And yes, this is a &lt;strong&gt;Python to the Rescue&lt;/strong&gt; story.&lt;/p&gt;
&lt;p&gt;I live on a boat. See &lt;a class="reference external" href="https://itmaybeahack.com/TeamRedCruising2/index.html"&gt;Red Ranger Blog&lt;/a&gt; for details.
What's essential is this little complication.&lt;/p&gt;
&lt;p&gt;The &lt;a class="reference external" href="https://www.charlottecountyfl.gov/departments/public-works/maintenance-operations/south-gulf-cove-boat-lock.stml"&gt;South Gulf Cove Boat Lock&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The lock keeps …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 14 Feb 2023 08:00:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-02-14:/2023_02_14-tide_table_analysis.html</guid><category>Architecture &amp; Design</category><category>#python</category><category>jupyter lab</category><category>functional programming</category><category>navigation</category><category>books</category><category>python</category></item><item><title>Python Confusion</title><link>https://slott56.github.io/2023_02_07-python_confusion.html</link><description>&lt;p&gt;For social contact, I'm generally following people on &lt;a class="reference external" href="https://fosstodon.org/home"&gt;https://fosstodon.org/home&lt;/a&gt;.
I'm &lt;a class="reference external" href="https://fosstodon.org/&amp;#64;slott56"&gt;https://fosstodon.org/&amp;#64;slott56&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Or &lt;cite&gt;&amp;#64;slott56&amp;#64;fosstodon.org &amp;lt;https://fosstodon.org/&amp;#64;slott56&amp;gt;&lt;/cite&gt; as they say in the Fediverse.&lt;/p&gt;
&lt;p&gt;But I saw some stuff on Twitter that was disheartening.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I thought Python🐍wasn't strongly typed.🤔
But this code …&lt;/p&gt;&lt;/blockquote&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 07 Feb 2023 08:00:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-02-07:/2023_02_07-python_confusion.html</guid><category>Technologies</category><category>#python</category><category>learning</category></item><item><title>Book Offers</title><link>https://slott56.github.io/2023_02_03-book_offers.html</link><description>&lt;div class="section" id="packt-publishing"&gt;
&lt;h2&gt;Packt Publishing&lt;/h2&gt;
&lt;p&gt;See &lt;a class="reference external" href="https://www.packtpub.com/product/functional-python-programming-third-edition/9781803232577"&gt;https://www.packtpub.com/product/functional-python-programming-third-edition/9781803232577&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Much newness here.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="apple-books"&gt;
&lt;h2&gt;Apple Books&lt;/h2&gt;
&lt;div class="section" id="pivot-to-python"&gt;
&lt;h3&gt;Pivot to Python&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="section" id="a-guide-for-professionals-and-skilled-beginners"&gt;
&lt;h3&gt;A Guide for professionals and skilled beginners&lt;/h3&gt;
&lt;p&gt;&lt;a class="reference external" href="https://books.apple.com/us/book/pivot-to-python/id1586977675"&gt;https://books.apple.com/us/book/pivot-to-python/id1586977675&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I've recently updated this to fix some cosmetic problems with title
pages, the table of contents and …&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Fri, 03 Feb 2023 08:48:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-02-03:/2023_02_03-book_offers.html</guid><category>Technologies</category><category>ebook</category><category>#python</category><category>SQL</category></item><item><title>Behave Tests and Fixtures</title><link>https://slott56.github.io/2023_01_27-behave_tests_and_fixtures.html</link><description>&lt;div class="section" id="bluf"&gt;
&lt;h2&gt;BLUF&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Behave&lt;/strong&gt; fixtures totally rock for testing
complex applications.&lt;/p&gt;
&lt;p&gt;I had been doing them wrong. Doing them right is simpler.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="history"&gt;
&lt;h2&gt;History&lt;/h2&gt;
&lt;p&gt;I'm a fan of the Gherkin language for specifying
the behavior of software.&lt;/p&gt;
&lt;pre class="literal-block"&gt;
Scenario: Works for Me

Given a configuration
When a request is made
Then the response can …&lt;/pre&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Fri, 27 Jan 2023 08:00:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-01-27:/2023_01_27-behave_tests_and_fixtures.html</guid><category>Python</category><category>books</category><category>software design</category><category>test driven development</category></item><item><title>Link Rot and Editing</title><link>https://slott56.github.io/2023_01_17-link_rot_and_editing.html</link><description>&lt;p&gt;As noted in &lt;a class="reference external" href="https://slott56.github.io/2023_01_10-finished_moving_lessons_learned.html"&gt;Finished Moving: Lessons Learned&lt;/a&gt;
link rot is real.&lt;/p&gt;
&lt;p&gt;Links vanish.&lt;/p&gt;
&lt;p&gt;I've got 23 ancient (2004 to 2006, ancient) posts
with clearly broken links. These are easy to identify
because the service vanished years ago.&lt;/p&gt;
&lt;p&gt;The tricky part is figuring out of there's any
content worth preserving. In …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 17 Jan 2023 08:00:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-01-17:/2023_01_17-link_rot_and_editing.html</guid><category>Technologies</category><category>blogging</category><category>markup</category><category>rst</category></item><item><title>Finished Moving: Lessons Learned</title><link>https://slott56.github.io/2023_01_10-finished_moving_lessons_learned.html</link><description>&lt;p&gt;Moved everything from blogger.com to &amp;quot;here&amp;quot; (&lt;a class="reference external" href="https://slott56.github.io"&gt;https://slott56.github.io&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;What did I learn?&lt;/p&gt;
&lt;div class="section" id="bluf"&gt;
&lt;h2&gt;BLUF&lt;/h2&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;Don't use WYSIWYG editors. Always use plain text markup.&lt;/li&gt;
&lt;li&gt;Think about your categories and tags.&lt;/li&gt;
&lt;li&gt;Links rot.&lt;/li&gt;
&lt;li&gt;Have a data model and tooling to process entries.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class="section" id="history"&gt;
&lt;h2&gt;History&lt;/h2&gt;
&lt;p&gt;Back in the early '00's (up to …&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 10 Jan 2023 08:00:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-01-10:/2023_01_10-finished_moving_lessons_learned.html</guid><category>Technologies</category><category>blogging</category><category>markup</category><category>rst</category></item><item><title>DZone's lack of a Python Zone</title><link>https://slott56.github.io/2023_01_03-dzones_lack_of_a_python_zone.html</link><description>&lt;p&gt;Check out DZone's Coding zone: &lt;a class="reference external" href="https://dzone.com/coding"&gt;https://dzone.com/coding&lt;/a&gt;. Hover over the
&amp;quot;Coding&amp;quot; drop-down menu.&lt;/p&gt;
&lt;p&gt;Notice anything lacking?&lt;/p&gt;
&lt;p&gt;I'll give you a hint: Python.&lt;/p&gt;
&lt;p&gt;They have &amp;quot;Frameworks&amp;quot;, &amp;quot;Java&amp;quot;, &amp;quot;Javascript&amp;quot;, &amp;quot;Languages&amp;quot; and &amp;quot;Tools&amp;quot;.&lt;/p&gt;
&lt;p&gt;The &amp;quot;Languages&amp;quot; seems to be general programming, and the posts include
Java, JavaScript and numerous other languages.&lt;/p&gt;
&lt;p&gt;Let's …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 03 Jan 2023 10:00:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2023-01-03:/2023_01_03-dzones_lack_of_a_python_zone.html</guid><category>Technologies</category><category>blogging</category><category>dzone</category></item><item><title>Christmas Book Offers</title><link>https://slott56.github.io/2022_12_20-christmas_book_offers.html</link><description>&lt;div class="section" id="apple-books"&gt;
&lt;h2&gt;Apple Books&lt;/h2&gt;
&lt;div class="section" id="pivot-to-python"&gt;
&lt;h3&gt;Pivot to Python&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="section" id="a-guide-for-professionals-and-skilled-beginners"&gt;
&lt;h3&gt;A Guide for professionals and skilled beginners&lt;/h3&gt;
&lt;p&gt;&lt;a class="reference external" href="https://books.apple.com/us/book/pivot-to-python/id1586977675"&gt;https://books.apple.com/us/book/pivot-to-python/id1586977675&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I've recently updated this to fix some cosmetic problems with title
pages, the table of contents and stuff like that. The content hasn't
changed. Yet. It's still an introduction to …&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 20 Dec 2022 11:00:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2022-12-20:/2022_12_20-christmas_book_offers.html</guid><category>Technologies</category><category>ebook</category><category>#python</category><category>SQL</category></item><item><title>On Algorithm Design</title><link>https://slott56.github.io/2022_12_13-on_algorithm_design.html</link><description>&lt;p&gt;Some background: &lt;a class="reference external" href="https://slott56.github.io/2022_11_22-faerie_dusttm.html"&gt;FAERIE DUST™&lt;/a&gt;,
&lt;a class="reference external" href="https://slott56.github.io/2022_11_22-obstinate_idiocy_updated.html"&gt;Obstinate Idiocy&lt;/a&gt;,
&lt;a class="reference external" href="https://slott56.github.io/2022_11_22-obstinate_idiocy_expanded.html"&gt;Obstinate Idiocy, Expanded&lt;/a&gt;,
and even &lt;a class="reference external" href="https://slott56.github.io/2022_11_22-permutations_combinations_and_frustrations.html"&gt;Permutations, Combinations and Frustrations&lt;/a&gt;.
I want to set up algorithm design as the diametric opposite of Obstinate
Stupidity. To do that, let's look at Obstinate Stupidity.&lt;/p&gt;
&lt;p&gt;The theme?&lt;/p&gt;
&lt;blockquote&gt;
&lt;strong&gt;We did something wrong, and we don't want to fix it …&lt;/strong&gt;&lt;/blockquote&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 13 Dec 2022 11:00:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2022-12-13:/2022_12_13-on_algorithm_design.html</guid><category>Technologies</category><category>algorithm</category><category>software design</category><category>Design Principles</category><category>asycnio</category><category>faerie dust</category></item><item><title>My algorithm performs badly, do I need asyncio?</title><link>https://slott56.github.io/2022_12_06-my_algorithm_performs_badly_do_i_need_asyncio.html</link><description>&lt;p&gt;Real Question (somewhat abbreviated): &amp;quot;My algorithm performs badly, do I
need asyncio?&amp;quot;&lt;/p&gt;
&lt;p&gt;Short answer: No.&lt;/p&gt;
&lt;p&gt;Long answer: Sigh. No. Do you need a slap upside the head?&lt;/p&gt;
&lt;p&gt;Here's how it plays out:&lt;/p&gt;
&lt;p&gt;Q: &amp;quot;We figured that if we 'parallelize' it, then we can apply multiple
cores, and it will run …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 06 Dec 2022 11:00:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2022-12-06:/2022_12_06-my_algorithm_performs_badly_do_i_need_asyncio.html</guid><category>Technologies</category><category>algorithm</category><category>software design</category><category>analysis</category><category>asyncio</category><category>concurrency</category></item><item><title>Functional Programming and Finite State Automata (FSA)</title><link>https://slott56.github.io/2022_11_29-functional_programming_and_finite_state_automata_fsa.html</link><description>&lt;p&gt;When I talk about functional programming in Python, folks like to look
for place where functional programming isn't appropriate. They latch
onto finite-state automata (FSA) because &amp;quot;state&amp;quot; of an automata doesn't
seem to fit with stateless objects used in functional programming.&lt;/p&gt;
&lt;p&gt;This is a false dichotomy.&lt;/p&gt;
&lt;p&gt;It's emphatically false in …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 29 Nov 2022 11:00:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2022-11-29:/2022_11_29-functional_programming_and_finite_state_automata_fsa.html</guid><category>Technologies</category><category>functional python programming</category><category>software design</category><category>#python</category></item><item><title>Permutations, Combinations and Frustrations</title><link>https://slott56.github.io/2022_11_22-permutations_combinations_and_frustrations.html</link><description>&lt;p&gt;The issue of permutations and combinations is sometimes funny.&lt;/p&gt;
&lt;p&gt;Not funny weird. But, funny &amp;quot;haha.&amp;quot;&lt;/p&gt;
&lt;p&gt;I received an email with 100's of words and 10 attachments. (10.
Really.) The subject was how best to enumerate 6! permutations of
something or other. With a goal of comparing some optimization algorithm
with …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 22 Nov 2022 17:21:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2022-11-22:/2022_11_22-permutations_combinations_and_frustrations.html</guid><category>Technologies</category><category>algorithm</category><category>software design</category></item><item><title>Obstinate Idiocy, Expanded</title><link>https://slott56.github.io/2022_11_22-obstinate_idiocy_expanded.html</link><description>&lt;p&gt;See &lt;a class="reference external" href="https://slott56.github.io/2022_11_22-obstinate_idiocy_updated.html"&gt;Obstinate Idiocy&lt;/a&gt;
for some background.&lt;/p&gt;
&lt;p&gt;Here are three warning signs I was able to deduce.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;No Rational Justification&lt;/li&gt;
&lt;li&gt;Ineffective Tool Choice&lt;/li&gt;
&lt;li&gt;Random Whining&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To which I can now add two more.&lt;/p&gt;
&lt;p&gt;Symptom 4 of Obstinate Idiocy is that &lt;strong&gt;all questions are rhetorical&lt;/strong&gt;
and they often come with pre-argued answers …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 22 Nov 2022 17:15:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2022-11-22:/2022_11_22-obstinate_idiocy_expanded.html</guid><category>Technologies</category><category>software process improvement</category><category>software design</category><category>analysis</category><category>spreadsheet</category></item><item><title>FAERIE DUST™</title><link>https://slott56.github.io/2022_11_22-faerie_dusttm.html</link><description>&lt;p&gt;Here's how to recognize a &lt;strong&gt;Faerie Dust&lt;/strong&gt; request:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;We have identified a problem. It can be with almost anything:
scalability, reliability, auditability, any Quality Measure.&lt;/li&gt;
&lt;li&gt;We're pursuing a specific technology. Typically, something that has
the lowest impact on our architecture.&lt;/li&gt;
&lt;li&gt;We can't address anything other than this specific technology
variation …&lt;/li&gt;&lt;/ol&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 22 Nov 2022 16:39:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2022-11-22:/2022_11_22-faerie_dusttm.html</guid><category>Technologies</category><category>design</category><category>architecture</category></item><item><title>Testing with PySpark</title><link>https://slott56.github.io/2022_11_22-testing_with_pyspark.html</link><description>&lt;p&gt;This isn't about details of pySpark. This is about the philosophy of
testing when working with a large, complex framework, like pySpark,
pandas, numpy, or whatever.&lt;/p&gt;
&lt;div class="section" id="bluf"&gt;
&lt;h2&gt;BLUF&lt;/h2&gt;
&lt;p&gt;Use data subsets.&lt;/p&gt;
&lt;p&gt;Write unit tests for the functions that process the data.&lt;/p&gt;
&lt;p&gt;Don't test pyspark itself. Test the code you write.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="some-history"&gt;
&lt;h2&gt;Some …&lt;/h2&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 22 Nov 2022 11:00:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2022-11-22:/2022_11_22-testing_with_pyspark.html</guid><category>Technologies</category><category>unit testing</category><category>pySpark</category><category>gherkin</category><category>#python</category></item><item><title>Buzz in the general public regarding software bugs</title><link>https://slott56.github.io/2022_11_22-buzz_in_the_general_public_regarding_software_bugs.html</link><description>&lt;p&gt;I got this the other day: &amp;quot;there seems to be a lot of buzz out in the
general public regarding software bugs&amp;quot;.&lt;/p&gt;
&lt;p&gt;Attached to this was an article from The Economist in 2003 plus one
from 2010. To me, this doesn't seem to be a &amp;quot;lot&amp;quot; of buzz. But what …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">S.Lott</dc:creator><pubDate>Tue, 22 Nov 2022 10:17:00 -0500</pubDate><guid isPermaLink="false">tag:slott56.github.io,2022-11-22:/2022_11_22-buzz_in_the_general_public_regarding_software_bugs.html</guid><category>Technologies</category><category>software process improvement</category><category>API Design</category><category>defensive programming</category></item></channel></rss>