(May 20, 2026)
We have a thin treasure/inventory capability wired in. Let's review our notes and pick something to add. We add visible treasures and console announcements with just a little code.
(May 19, 2026)
We have some content that is fixed throughout game play, and some that varies. We're getting close to needing to handle that. Perilously close.
(May 18, 2026)
I have a bit of time at the keyboard. Let's improve the dungeon contents code a bit.
(May 18, 2026)
Let's take a look at what might be good next steps toward a game. I'd like to get to some code today. A second personality emerges from my mind, the PDP.
(May 16, 2026)
This morning I'm going to put a Camera2D into my dungeon and see if I can figure out how to zoom and pan and such. I am hopeful but also expect confusion.
(May 15, 2026)
Let's see what we can figure out about the Arcade camera. I think we'll look at an example, and maybe bash it a bit to see what it does.
(May 14, 2026)
I think Arcade is in place. Do we like it? Is the code where we want it? What are our longer-term ideas?
(May 13, 2026)
I've added in Dot and it's clear we have work to do. Result: 1000X faster.
(May 13, 2026)
I think we'll take a cut at converting from pygame to Arcade today. I have a tentative idea, and I'm prepared to fail spectacularly.
(May 12, 2026)
Let's explore the Arcade platform, which we plan to use in our dungeon program. Here's how I like to learn a new system: by example.
(May 11, 2026)
That `make_lines` method is horrid. Let's continue cleaning things up a bit, starting there.
(May 10, 2026)
Are we close enough to having the right Border classes to try to draw them? Let's take a look at how we might do that.
(May 9, 2026)
We want to change border calculations to create a permanent structure. We proceed with a few very tiny objects. I think it goes quite well, though the article gets rather long.
(May 7, 2026)
I think about my code while writing it, and at other times. Here's what I think today.
(May 6, 2026)
Let's look around, see what we might do that might improve things.
(May 6, 2026)
Cleaning up Cell fixed a big design issue. Now we are left with a smaller one. We'll see what we can do about that.
(May 5, 2026)
We're engaged in a long series of small steps, moving capability from the Cell up to the classes that hold onto Cells. The good news: small steps can be done over a long period of time. Bad: it is often not very interesting. Did not use the word "gallimaufry". Could have.
(May 4, 2026)
We couldn't get in the straightforward way. Is there a more sneaky way to do this? Tiny steps, many commits, very tedious. One semi-interesting refactoring.
(May 4, 2026)
Cells know what room they are in. What will it take to undo this? The bear gets really close to taking a bite today.
(May 1, 2026)
Should we start to address the Horrendous Mess™, or do something else? Something else: work toward removing room knowledge from Cell.
(May 1, 2026)
A short session Friday, another Saturday, and we have Cell disconnected from it container. A triumph of small steps!
(Apr 30, 2026)
I just want to do a little more this afternoon. Can we move `at_offset` yet? Yes. Just one more use of `current` remains.
(Apr 30, 2026)
We are making a Horrendous Mess™, and we're glad of it.
(Apr 29, 2026)
Just for fun, let's see about moving `find_path` into DungeonLayout.
(Apr 28, 2026)
We'll begin the morning adjusting more tests to use the new Layout idea. This iterative incremental stuff? It really works! The Niagara Falls Method.
(Apr 27, 2026)
I've had an obvious but seemingly decent idea. Let's try it. Here's my cunning plan ...
(Apr 27, 2026)
What happens when right in the middle of things, what seems like a much better idea appears? Includes: musing on the balance between code quality and shipping.
(Apr 26, 2026)
None of my notes on cards appeal. Let's look at the code and see what it suggests. Sort of an odd result.
(Apr 25, 2026)
I'm not up for a lot today. Let's review those methods that can optionally return `None` and see what we can learn, maybe what we can do. Results: acceptable if not entirely satisfactory.
(Apr 24, 2026)
I was thinking this morning, while trying not to get up yet, about the programmer, the programmer's code, and their care. As to my recent defect, I really don't see what to do better. Yet.
(Apr 23, 2026)
I've been chasing a serious intermittent defect for five or six hours. This is almost unheard of, due largely to the way I work. But I finally figured it out. Brief comments on LLM-"AI"
(Apr 21, 2026)
Five or six hours of slogging here. Maybe scan, maybe just read 'Found It!'.
(Apr 20, 2026)
Today I think we'll see about using Flood directly, perhaps removing the convenience method on Cell, but adding some to Flood.
(Apr 19, 2026)
An exchange with Bill triggers some ideas for the flood. It's 0330 hours. Let's see what we can do.
(Apr 18, 2026)
The `flood` method is my current darling. Should we kill it? Is it just too cool to live? Let's examine it.
(Apr 17, 2026)
Today we start by actually finding furthest points. We need also to remove the path map code. The morning goes well: geek joy FTW!
(Apr 16, 2026)
I think the new generator is working well. Let's see if we can improve the way it's written. A very nice refactoring sequence, if I do say so myself. Thanks to Bill for the nudge.
(Apr 15, 2026)
Let's see what's up with that new generator. I think it's about 0.75 done.
(Apr 14, 2026)
A nudge from a friend impels what seems like a much better idea. But appearances deceive: it's more tricky than I thought. We build an interesting new capability.
(Apr 13, 2026)
We have a test that seems to compute what we want. Let's try to see where it should go, and put it there.
(Apr 12, 2026)
I've had what seems like a good idea. Let's find out.
(Apr 11, 2026)
We're working on finding a cell that is maximally distant from a given cell. What are our next steps?
(Apr 10, 2026)
Sometimes we focus on the application, sometimes on the making of the application. We begin with making.
(Apr 9, 2026)
I think ensure_connected can fail. Let's prove it, then fix it.
(Apr 9, 2026)
Having completed the basics of the contents vs layout design, it's time to look around and see what needs improvement.
(Apr 8, 2026)
The FGNO OGs gave me some good ideas about my design: thanks, OGs. This morning I'll start following some of those ideas. I use test doubles!
(Apr 6, 2026)
Today, we'll start populating our dungeon. We'll start with an intrepid adventurer named Dot.
(Apr 5, 2026)
This morning, I think we'll look at some code. As a start, I have a question about Room. Brief LLM-AI digression.
(Apr 3, 2026)
I did a little off-article cleaning of Cell. We'll look at that. And I have an idea which may be good, or then again, not. Weirdly, things go better than expected.
(Apr 2, 2026)
Yesterday's closing idea looks good to me. Let me know what you think, if you care to. We find that we're not quite finished. A serious lesson is relearned. LLM-AI diversion at end.
(Apr 1, 2026)
With our new path deviation operation working, it's time to look at the code and see if it's asking for anything. We end with a seriously questionable choice.
(Mar 31, 2026)
We need the validity check in PathHelper. And I see how to generalize it. Which should be first? Updated: found a test.
(Mar 30, 2026)
Let's see if we can make PathHelper less bad, perhaps even make it better.
(Mar 30, 2026)
We still get straight paths sometimes. I have an idea ...
(Mar 27, 2026)
We can make most of our paths wander, except for the straight left-right or up-down ones. I've had an idea. Is it a good one? I decide to use a prior idea, in an interesting spike.
(Mar 26, 2026)
When last we met, we had just discovered a nice way to make a wiggly path. Since then, I've improved the code a bit. We'll look at that and then see what we see.
(Mar 25, 2026)
Our minimal paths are too straight for most purposes. Is there a nice way to make them adjustably not so good? Is 'adjustably` a word? It is now. A nice discovery arises.
(Mar 24, 2026)
Yesterday at session end, I tried to hack in a minimal-path idea. Failed. Today let's try to fail better.
(Mar 23, 2026)
It is certainly no surprise that the day after something first works, there is plenty of room for improvement. We'll be looking for some of those things this morning. We learn from a small step.
(Mar 22, 2026)
Let's finish up the path between suites and see what it looks like. I suspect we'll want to try to tune it.
(Mar 21, 2026)
Nothing deep here, I mean a path in the dungeon, not a way of life.
(Mar 20, 2026)
We are working toward making dungeon description easier. I think of it as creating a little language. Today, adding randomness, if my luck holds. It holds, and we belay the whole plan.
(Mar 17, 2026)
Well, dungeon CREATION. We'll start with a little refactoring. I remember why I recommend testing bug fixes.
(Mar 16, 2026)
Making a dungeon seems generally to require looping and even conditionals. Do we want special support for those?
(Mar 14, 2026)
Suppose we wanted to create many different kinds of maps. How might we make it easier?
(Mar 13, 2026)
We sometimes get rooms within rooms by accident. Let's see if we can do it on purpose.
(Mar 11, 2026)
FGNO had some ideas. I'm not ready to work on holes. What about paths? A weird solution emerges.
(Mar 10, 2026)
The new jaggy room shapes sometimes include holes. Makes me think about secret rooms. And, not unrelatedly, about paths. Just thinking, and an interesting experiment.
(Mar 9, 2026)
Now that we can have as many room shapes as we can imagine, let's imagine some. The results may surprise you. They surprised me, in a good way.
(Mar 8, 2026)
I veer into philosophy and LLM/AI, based on thinking about many small changes, and how they add to understanding.
(Mar 7, 2026)
I had a few moments and decided to do a round room. At which point I realized that something can be improved.
(Mar 7, 2026)
A common but rookie mistake needs fixing. Using the same RoomMaker to make multiple rooms engenders chaos. Today, as often happens, I don't do what I thought I might.
(Mar 6, 2026)
I have a bit of time and a bit of energy. Let's scavenge Room to make a RoomFactory.
(Mar 6, 2026)
Yesterday's work has been taken as an experiment in having different room shapes, via different room builders. today, Let's get started on the real thing. I have some ideas. That's never a good sign.
(Mar 5, 2026)
FGNO Wants Better Shapes. We do an inadvertent spike. Along the way we discover an issue in generate, and learn the difference between a square and a circle. A superior day!
(Mar 4, 2026)
Recording some small changes.
(Mar 4, 2026)
With a little help from my friends, I set out to smooth some rough edges. Lots of small things. Nothing to see here, aside from one excellent name change. A metaphor issue discussed at the end.
(Mar 3, 2026)
The PathFinder code now uses Cell.generate, but there are signs that make us wonder.
(Mar 2, 2026)
PathFinder uses `generate`. But there's work to be done. And let's talk about generalizing `generate`.
(Feb 28, 2026)
Now let's see if PathFinder can benefit from the new `generate` method on Cell. Saturday: absolute debacle. Sunday: perfect.
(Feb 28, 2026)
Let's look into a suggestion from @blackoverflow. Turns out to be a good idea needing a little improvement. (Minor edit, courtesy @blackoverflow.)
(Feb 27, 2026)
Our cell generator looks pretty good. Let's test it on a copy of our suite test, then see how to put it in play.
(Feb 26, 2026)
I think a generator might be an interesting way to do this flooding thing. Let's see if we can gin one up. And we can!!
(Feb 26, 2026)
Let's see if we can make our SuiteFinder object more expressive. Arguably, it needs it. Arguably, we'll go too far. Too far? We went hog-wild!
(Feb 25, 2026)
What we need here, I reckon, is Method Object. Let's try it. Oddly enough, that's actually what happens. There might be something better still ...
(Feb 25, 2026)
We continue the prior article's session in a new article but same session, refactoring another bit of code that could use a little improvement.
(Feb 25, 2026)
This code isn't very good. I'll tell you why, and we'll try to do something about it.
(Feb 24, 2026)
We'll start with a review of existing code, possibly clean up the border logic a bit. But we'll at least start thinking about "continents" and paths between them.
(Feb 23, 2026)
I think I'm ready to draw smarter borders. I have chunks of a plan. Green shoes.
(Feb 21, 2026)
Thinking about how we could detect rooms that are adjacent. Warning: contains Philosophy of Programming as this old guy does it.
(Feb 21, 2026)
My design fantasies and experiments need to stop. Let's do the periphery feature. I have an idea. Results are satisfactory.
(Feb 20, 2026)
Let's look around, get aligned, decide what to do, then do it. Well, we do a little, but not much. Have I learned anything? PSA: Eat the rich!
(Feb 19, 2026)
Let's try a different approach this afternoon. I have a good feeling about this one. Things go fairly well, but not fantastically well.
(Feb 19, 2026)
Yesterday's experiment successfully showed me that I had a terrible idea. Today ... a similar success!
(Feb 18, 2026)
I think I'll experiment with a kind of cell that has x and y but really only as data for display, using just neighbors to show relationships. This may get weird. Experiment succeeds: Not a good idea.
(Feb 18, 2026)
It feels as if my objects aren't helping enough. It's important to recognize that feeling and see what can be done about it. Think, speculate, sleep on it, try something.
(Feb 17, 2026)
Starting the game seems too slow. How much? Why? Measure. Measure better. Think. Realize something. Plus: help from a new friend.
(Feb 16, 2026)
OK, we made the change easier. Now can we do the change? Yes! Slow is smooth: smooth is fast.
(Feb 16, 2026)
Let's see if we can do this with good testing and really small steps. It could happen.
(Feb 15, 2026)
Some small refactoring steps, very small. One rollback, no idea what happened.
(Feb 14, 2026)
I want to complete the path finding, and I think some of these objects would appreciate being better designed. Includes: a Great Lie wasn't ... this time.
(Feb 13, 2026)
I feel sure that I know just what to do next with paths, but I'm not sure how to test it in a reasonable fashion. Results: Happy!
(Feb 12, 2026)
For a program with no point, there sure are a lot of interesting things we might do. I'll try to make these articles more useful.
(Feb 11, 2026)
While I like the new bordered look, I still don't like the rooms all packed together. I have an easy idea that comes with a puzzle.
(Feb 10, 2026)
Drawing a room looks good. Let's generate a whole space of them and see how the map looks. An interesting drawing, and a small curious effect.
(Feb 9, 2026)
Drawing a room looks good. Let's generate a whole space of them and see how the map looks. We'll want some design improvement along the way.
(Feb 8, 2026)
We're drawing a grid. Let's try drawing a room.
(Feb 7, 2026)
I want to be able to see what the rooms look like, so I guess it's time to bring in PyGame and get something displaying on the screen. I plan to cheat. Good result!
(Feb 6, 2026)
I guess I'll set up an approval test with a random seed. Then see if we can create a better test.
(Feb 6, 2026)
Still nerd-sniped by dungeon allocation, I begin to get a sense of an approach. Let's see what happens. Python fits my hand. What's your preference?
(Feb 5, 2026)
GeePaw Hill is undertaking a dungeon sort of thing, in Kotlin, using a very interesting room allocation scheme. So I was thinking, what if ...
(Feb 2, 2026)
Kind of at loose ends this morning. Let's look at the Game of Life code and see if anything comes to mind. Just some small changes, other than reorganizing the files.
(Jan 29, 2026)
... not necessarily most beautiful, but there seems always to be something to talk about even in simple programs like the Game of Life. Today we remove the façade.
(Jan 28, 2026)
Of the two approaches I've tried, I have a preference. Let's discuss that and align the code with my wishes. Takes two tries. So it goes.
(Jan 27, 2026)
Let's review yesterday's conversion of the Game of Life from an object-oriented design to simple functions. I have at least one idea already.
(Jan 26, 2026)
The Game of Life code is quite simple. What if we didn't use classes, just vanilla functions?
(Nov 14, 2025)
The ArcRod from yesterday defines the center and one end of a longer rod in 'real life'. I propose what would be called a hack if we did something like it in code. I stumble, but recover. Small steps FTW.
(Nov 13, 2025)
Past time to get back to the linkage. I'm glad I'm not on a deadline—other than the big one—and I don't know when that is. Anyway, let's add a link or two. Result: WOOT!
(Nov 3, 2025)
Studying the Walschaerts linkage, I think I see a path that my scheme can support. So let's see if we can inch into it.
(Oct 30, 2025)
Upcoming Components challenge us. XP has design thinking. Names are dropped. Brief descent to politics. Cute Video.
(Oct 28, 2025)
Bell Crank is kind of an inflection point. Let's see what we should do next.
(Oct 27, 2025)
Time for a new component, the bell crank. Not your regular crank, no, but a bell crank.
(Oct 24, 2025)
Maybe tables would be a useful way to express a linkage.
(Oct 24, 2025)
I've come up with a better way. At least I think it is. Herewith, a report. Green shoes.
(Oct 22, 2025)
We need an easier way to define a Linkage.
(Oct 21, 2025)
Give me an "AI" that cleans the bathroom and leave me to my art.
(Oct 20, 2025)
Log for the Record. Crash and burn. Read only if you want to see me confused.
(Oct 20, 2025)
There are two possible solutions for the ArcRod's position. We need to specify which one we want. Result promising but I'm sent back to the drawing board.
(Oct 19, 2025)
Tests notwithstanding, there's both satisfaction and discovery in animating the linkage. So let's do. (It works!!)
(Oct 18, 2025)
As much as I'd like to futz with the drawing code, I think it's time to continue work on the ArcRod. I'm goin' in!
(Oct 17, 2025)
Why, only yesterday, I thought I had made a mistake. Turns out I was wrong, I hadn't made a mistake after all!
(Oct 16, 2025)
Starting late today, might end early. Let's see if there are right-sized things to do. Good thinking, but the work does not go as I anticipated.
(Oct 14, 2025)
Today we do a very nice step by step refactoring to a Method Object. Quite pleasing, really. Yummy.
(Oct 13, 2025)
Long ago, Kent Beck described 'simple code' with four rules. One of them was about expressing ideas in code.
(Oct 11, 2025)
I'm making a small improvement to the ArcRod. I have a good reason for doing it, if I'm not mistaken. Then some renames, possibly improving things.
(Oct 10, 2025)
The upcoming component needs DESIGN. I hate when that happens. Let's talk about this. Something special happens!
(Oct 9, 2025)
I thought I might have done something, well, pretty silly. That particular concern turns out not to be the case.
(Oct 7, 2025)
Offline, I improved the Linkage collection rather nicely. Now we need a bit more improvement. Seems to be a pattern.
(Oct 6, 2025)
Am I losing my edge, if I ever had an edge? I realized something interesting about the evolving design. I decide my edge is no more dull than usual.
(Oct 5, 2025)
During my morning prep for being found alive again, I recognized an issue with my lovely new scheme. How troubling is it?
(Oct 3, 2025)
We need lots of small steps to unwind the previous design while moving toward the scheme of doing everything without reference to parent. It goes ... OK.
(Oct 3, 2025)
Moving toward everything running on `start` / `finish`, I think we need a place to stand. And not on a wheel. HOWEVER: Plan Dashed Immediately.
(Oct 1, 2025)
We reviewed the linkage program a bit at FGNO on Tuesday night. Some thoughts arose. My big lesson: Shut up and listen.
(Sep 30, 2025)
One nice thing about gentle refactoring is that often we get ideas for how to make things better. Today ...
(Sep 30, 2025)
One nice thing about gentle refactoring is that often we get ideas for how to make things better. Today ...
(Sep 29, 2025)
Let's carry on with changing the API of these classes. Where were we?
(Sep 29, 2025)
Let's see what else we can improve in our four existing components. I can name some things that I'd like to improve.
(Sep 28, 2025)
With four components in place, let's look at the code and see how it can be improved.
(Sep 27, 2025)
Let's do a simple piston this morning. I am hopeful that it'll be easy.
(Sep 26, 2025)
I'm very confident that our connecting rod is working properly. The code could use a little improvement.
(Sep 25, 2025)
Presumably, I "just" have to plug this function into a class and I should be good to go. We'll see. (Hmm, seems to have gone smoothly. What am I missing?)
(Sep 23, 2025)
One might think that what just happened was bad. In fact, I was recently reminded that it was quite normal.
(Sep 22, 2025)
In which, your intrepid author parameterizes a test. P.S. But not enough! But a quick patch saves me.
(Sep 22, 2025)
Time to start on the rotation part of this idea.
(Sep 21, 2025)
Let's keep inching forward, supported by careful tests. I want to get this thing right.
(Sep 19, 2025)
This is why I drew the pictures, but I am still Very Disappointed to find defects in my ConRod. Further disappointment follows.
(Sep 18, 2025)
I'm psyched to add another linkage component, but there are some issues in the code that could use improvement. What should we do?
(Sep 5, 2025)
Could an LLM-human relationship be like pair programming? And if it were .. ?
(Sep 4, 2025)
I have some strong objections to the so-called 'AI' LLM systems that are all the latest thing. But with some regrets, I have tried whatever is built in to Google search.
(Aug 1, 2025)
I've been reading and thinking about objects not based in classes, in Lua/Luau. Let's explore and consider.
(Jul 23, 2025)
Minimal syntax and access to meta-programming yields a close-to-the-metal language that we can shape to our liking.
(Jul 21, 2025)
I figure I'd better do at least a rudimentary frame display, to show more clearly what is happening and that it is as we wish.
(Jul 20, 2025)
We need to make the little marks that show up on the scoresheet, at which point I think our point will be made. Result: Point made!
(Jul 19, 2025)
The PinCount object isn't all that pleasing. Let's find a better way to deal with an unknown future.
(Jul 18, 2025)
The current frame works perfectly, except that it needs to know the future. That should be easy to fix: just know the future.
(Jul 18, 2025)
The knock on our bowling TDD demo is that the assumptions make it too easy. Therefore ... let's make those assumptions come true.
(Jul 17, 2025)
A casual remark at FGNO a few weeks ago turns my attention, once again, to bowling. Are you even serious?
(Jul 1, 2025)
A small aspect of the game "nonograms" captures my attention. Darn it, I was trying to contaminate others, not myself! Also Anti-nerd-sniped.
(Jun 9, 2025)
I see yesterday's mistake. We complete the spike. Result: Works as expected. Not worth using.
(Jun 8, 2025)
In this session, I make some progress and then get stuck. Maybe worths kimming this, but no even good insights follow.
(Jun 7, 2025)
Today I'll try to make my new "holes" scheme work. Wish me luck.
(Jun 6, 2025)
I'm imagining a new way of scoring bowling. Recording the idea with intent to try it if it seems tasty upon reflection. Take this, "AI"!
(Jun 4, 2025)
Last night at FGNO we were reviewing a bowling exercise we had all tried. Today, I want to try something ... in Lua.
(Feb 18, 2025)
A few words with GeePaw lead me to envision an even simpler Collator. Let's see. (Very smooth refactoring to a different, possibly better version.)
(Feb 16, 2025)
It is a fundamental premise of my work that we can (nearly?) always refactor from a design that no longer serves to one that is better. Can I refactor from my previous OK Collator design to yesterday's most excellent one? Let's find out.
(Feb 15, 2025)
Third time's a charm, they say. New idea feels very good. Woot! It is!
(Feb 14, 2025)
Just a few small refinements, because I was sitting here anyway.
(Feb 14, 2025)
The new Collator seems very nice by my standards. Let's make it even better. 🎉 🎊 🍾 🥂
(Feb 13, 2025)
Yesterday's "diversion" wasn't a debacle, quite. The code solution is OK, but the development process not so much. Let's try again. Outcome: Redeemed! This is up to my standards!
(Feb 12, 2025)
Continuing Diversion. It's working. I am not proud of what it is nor of what I've done. We can improve what it is.
(Feb 12, 2025)
Continuing Diversion. It's just too long!
(Feb 12, 2025)
GeePaw Hill has proposed a little problem, and he'd like to see how some of us solve it. Here we go! Outcome: I get a nice solution, much as I imagined, but my process was quite poor. Weird.
(Jan 14, 2025)
A followup to yesterday's article 'Why does this work?', with questions and answers and some references to folks from whom I have learned.
(Jan 13, 2025)
A reader wonders why I seem never to dig a hole I can't readily get out of. It is curious, isn't it? If this article raises questions for you, please ask them! (More in subsequent article.)
(May 3, 2024)
During our FGNO Zoom session, Ken brought up an interesting little problem. Let's play with it a bit. Gets a bit long, but it's really pretty light work. Fun effort, meant as such.
(Dec 16, 2023)
I plan to implement a Game Over screen soon. The first one will just display GAME OVER. But could we build a somewhat smart attract mode? One that learned to play the game? Let's think.
(Dec 16, 2023)
How many ways can we think of to do a thing? How can we decide among them? CW: Ignorant Savages.
(Dec 15, 2023)
We'll make sure that our tests check the production generator function, but mainly I want to talk about small steps and TDD.
(Oct 10, 2022)
First, some thoughts on TDD.
(Jun 24, 2022)
TCP. I think I know what I did wrong yesterday. If I can make this work, it'll help me TDD the server's main loop. Bonus: Kitty!
(Jun 22, 2022)
Something in last night's Friday Coding Zoom struck me. I need to think about this and try it.
(Jun 16, 2022)
Rotation Matrices? Why not, might be better. Let's spike. Warning, this is gonna get a tiny bit mathematical.
(Jun 14, 2022)
I think we're ready to draw something. How can we make the drawing more testable? I have a p-baked idea, for small p.
(Jun 8, 2022)
Tuesday night's Friday Night Coding Zoom has hooked me. This is the beginning of the result of that hook.
(May 27, 2022)
I was asked what I tell people to do that I don't do myself. The answer may surprise you.
(May 24, 2022)
We should have it. What should we do when we haven't?.
(Apr 13, 2022)
The experiment i did yesterday deserves a bit of commentary. Something to think about.
(Mar 14, 2022)
You'd think that software developers would realize that they are prone to error. Yet we are often more opinionated than we probably should be. Here's my opinion on that.
(Feb 27, 2022)
In which: Our intrepid author attempts to find some use for the FP library he has been toiling on for over four hours.
(Feb 26, 2022)
Today, for your delectation, I offer: the Library Trap! (Update: I looked at XSet2.)
(Feb 25, 2022)
Let's see if we can find a decent way to provide filter, map, reduce functions in Codea Lua.
(Feb 24, 2022)
Yesterday's search for strawberries in the XST patch discovered problems. I want to at least double check what we did. TL;DR: It all works. Odd morning.
(Feb 23, 2022)
We're taught to 'make it work; make it right; make it fast'. We're taught that if it's hard to test, it's not right. Let's explore. TL;DR: No strawberry here?
(Feb 15, 2022)
One 'reason' why folx don't want to learn technical practices seems to be that they expect no benefit. Sometimes that's more about futility than actual benefit.
(Feb 12, 2022)
Some developers show little or no interest in learning practices that could make their lives better. I'd like to understand that.
(Jan 29, 2022)
Agile Software Development is about people working together. For that to happen, it helps to be kind, respectful, and helpful. Let's talk about that.
(Jan 28, 2022)
I'm pressing forward with the Lispy thing, but I have some concerns. I find it difficult to think about but I think I have an angle. (Spoiler: It's a wrap!)
(Jan 17, 2022)
GeePaw Hill is workin on an idea. I urged him to publish his thoughts because I knew it would help him to make things concrete. Also I wanted to comment here.
(Jan 17, 2022)
I wasn't really planning to write about Sudoku again, but here we are.
(Jan 11, 2022)
Just a bit more playing with the Lispy Calculator to while away a few minutes in the afternoon.
(Jan 11, 2022)
Thoughts and observations. Stuff and nonsense.
(Jan 10, 2022)
I'm going to push forward with this LISP / Scheme dialect. I'll begin by explaining why, and why not.
(Jan 9, 2022)
It's still the weekend, so I'm going to follow Peter Norvig's Python LISP Implementation a while and see where it takes me.
(Jan 8, 2022)
It's my weekend and I'll try if I want to. You could try too if it happened to you. Spoiler: This takes a very weird turn. Final line: Your move, Bill!
(Jan 7, 2022)
I guess there's nothing for it but to figure out how to rewrite, i.e. refactor, a set operation based on the existence of helper structures. But how? I have ideas but are any of them any good?
(Jan 6, 2022)
Bill Wake is trying to get me to think in terms of trees. I don't want to, but he does have some good ideas. Thanks, Bill!
(Jan 5, 2022)
Today I plan to experiment with creating some form of expressions that might be optimized. I expect to stumble a lot. Come along, point, and laugh.
(Jan 4, 2022)
No, not smiles and frowns. Algebra. At this moment I don't think much code will be done today. Feel cute, might delete later.
(Jan 3, 2022)
It's 6 AM and I have an idea. This could be very good or very bad.
(Jan 2, 2022)
I don't love the interface for adding functions into an XSet. And I want to add them 'one level in'. Will hilarity ensue? Probably not, but something will happen.
(Jan 1, 2022)
Some HNY thoughts, and more on the function as an element idea. Joy, philosophy, code. What's not to like?
(Dec 31, 2021)
I was thinking before I got up about median and mode. Then I had a truly marvelous idea.
(Dec 30, 2021)
I want Lua tables to be more useful as XSets. There's a hard way. But the current design also offers an easy way. (The answer will surprise you. It surprised me.)
(Dec 29, 2021)
I'm on a path to make ordinary tables behave like XSets. But first, I have to figure out how this thing actually works! Much musing, then some code.
(Dec 28, 2021)
I have in mind small things for today, starting with an interesting and confusing mistake left over from yesterday.
(Dec 27, 2021)
No, I'm not hearing voices. But the code does tell us things, just like any working material. We need to learn to listen. Today, we listen and the result is good.
(Dec 26, 2021)
A look at the code. Maybe a bit more on stats. P.S. I learn something and ditch almost all the code I wrote this morning.
(Dec 25, 2021)
It's Christmas, I'm waiting for the household to wake up, and I enjoy what I'm doing. Perfect holiday so far!
(Dec 24, 2021)
Today I plan to get grouping and summing working. Who knows, it might happen. If not, there's always tomorrow or my birthday.
(Dec 23, 2021)
Let's think about what the current drafts of summing and grouping tell us about our system. Then code (anyway).
(Dec 22, 2021)
Today, rather than make any deep progress, I plan to work on something I consider interesting, sums, averages, and grouping. I promise to publish this even if it explodes. (It doesn't, quite.)
(Dec 21, 2021)
Transformations, optimizations, and the relationship between OO and XST. Got some thinking to do. You get to watch, if you're tough enough. At least a tiny bit of code.
(Dec 20, 2021)
Step by step, inch by inch, slowly we turn long searches into more direct accesses.
(Dec 18, 2021)
I don't want to get stuck in a never-ending series of new setops: there won't be much learning there. Where's the beef?
(Dec 17, 2021)
I'm sure a lot of you have been saying 'Yes, but what about tuples?', or 'Why XST anyway?'. Today, we address those fascinating concerns.
(Dec 16, 2021)
Let's work on those new operations a bit.
(Dec 16, 2021)
Short morning today. I have a tentative plan for indexes. I'll scribble some sets. Might code.
(Dec 15, 2021)
Last night's Zoom Ensemble netted me a few ideas. I'll start exploring those today. Hilarity or perhaps something good will ensue. I can't wait to find out.
(Dec 14, 2021)
Further reading leads me to think about design, and design motivation. Castles in the air. Or underground. Good stuff happens.
(Dec 13, 2021)
In conversation with Bill Wake and with the Internet, I have an idea for something to try. And I'm just about ready to assess where we are and where we should go.
(Dec 12, 2021)
I'm not sure whether this will be useful, but Bill Wake gets the credit if it is.
(Dec 11, 2021)
Bill Wake was trying to hammer an idea into my head. I must think about that. And I have a small idea of my own.
(Dec 10, 2021)
Time to work on the actual restrict operator for CSV, since the pattern-maker experiment was a success.
(Dec 9, 2021)
There's no way around it, I've got to work on the fast restrict today. Might not finish. We'll see.
(Dec 8, 2021)
Getting started with CSV data. And reporting a conversation.
(Dec 7, 2021)
Reflection leads me to focus a bit more on set operations, and less on internal methods. Does this call for a new layer? Also: real technical debt! Updated with idea from Carl Manaster!
(Dec 6, 2021)
I'm going to try to create pipelines using coroutines. I think they may make for a more expressive interface. I turn out to be partially right.
(Dec 6, 2021)
How do you design a thing like this, Brain? Same as everything else? Or not?
(Dec 5, 2021)
I was puzzling over an issue with 'union' and gained an insight that either I've never had, or that I had lost. Whee!
(Dec 3, 2021)
I found the easy way to build an iterator in Lua, so we'll do that and see whether it improves the code as much as I think it will.
(Dec 2, 2021)
I think I'm going to start on restrict today. There are some issues around atoms.
(Dec 1, 2021)
Last night I understood how to do something with XST that I've not in the past been able to do. So let's talk about why XST is interesting and what one might do with it.
(Nov 30, 2021)
I have a random idea about the data structure for sets, so thought I'd give it a try.
(Nov 30, 2021)
Save me, I'm thinking about Extended Set Theory again.
(Nov 12, 2021)
Just because I think I should do SOMETHING, I think I'll improve how CodeaUnit displays results on the screen.
(Nov 10, 2021)
I'm going to try to build a 'fluid interface' feature for Codea's graphical style capability. Why? I don't know.
(Nov 9, 2021)
Let's improve CodeaUnit a bit. But first, what's the deal with iOS shortcuts? An odd report on an odd morning.
(Nov 8, 2021)
Driven by some Slack chatter, I've been thinking about feedback. How does that fit into life, and into this little program?
(Nov 4, 2021)
Some refactoring, and some thoughts on a Twitter thread. And an odd surprise: the code says No.
(Nov 3, 2021)
Rules, rules. TDD rules, Beck Rules, OK. And a cat.
(Nov 2, 2021)
I'm just not up for going back into the Dung mines. Gonna put plain function detection into the stats instead. Also, random subtweeting. Also bear bites man.
(Nov 1, 2021)
At last, I get to apply Dave's scrolling thing. It's simple, and obvious, and I never thought of it. And a couple of stories of a great programmer.
(Oct 31, 2021)
This morning, I plan to add detailed method reporting to the full report. I am expecting no real trouble but have recognized a mismatch.
(Oct 30, 2021)
Let's get some output up in this baby. I plan to steal two good ideas while I do this.
(Oct 28, 2021)
I wonder what we could do about comments. They're tricky.
(Oct 27, 2021)
"If this is his idea of fun, he must be a laugh riot at parties." -- A Reader
(Oct 25, 2021)
Backward? Or forward? Which was it?
(Oct 24, 2021)
We continue working on our little 'Making App', because it's kind of fun. Today, I foresee a 'major refactoring'.
(Oct 23, 2021)
Let's do methods, and try to drive out some objects.
(Oct 21, 2021)
In the interest of variety, let's do some work for the makers here. Let's see how we can collect some interesting statistics from Codea programs.
(Oct 13, 2021)
We were thinking about words for code. Let's consider these. New! Improved! Now with more words!
(Jul 23, 2021)
I mentioned that the dungeon program is boring me on Twitter and asked for ideas. Andreas asked about software design. Practice, folks, practice!
(Jul 5, 2021)
Herewith, some remarks pro-Scrum, and a reminder that Scrum is not as good for developers as it might be. Even some advice to developers.
(Jul 5, 2021)
On June 19th, I sent this email to the CPO of the Scrum Alliance. I have had no reply. In a second article today I will offer some related ideas.
(Jun 24, 2021)
Scrum asks for an Increment every Sprint. Of all the Scrum rules, this one is most important for developer success and survival.
(Jun 11, 2021)
Some odds and ends, a nice feature, and a bit of trouble. And the most distracting thing ever!
(Jun 10, 2021)
Let's pretend we care about that inefficiency in drawingOrder. Also a momentary loss of momentum.
(Jun 9, 2021)
I don't usually predict an outcome but today I think something good is going to happen. Let's find out.
(Jun 8, 2021)
Today, more refactoring to remove connections between dungeon objects and their tiles. And, as always, some thinking.
(Jun 5, 2021)
Maybe some wind for my sails. A need for better notes. An idea from Bryan's experiment with Unity. A thought about apps without programming. Everything is hopeless. Not necessarily in that order.
(Jun 3, 2021)
Doors, or I'll know the reason why! Just in: Ron bites bear!
(Jun 1, 2021)
What are you doing, Ron, how do you do it, and most of all, WHY?
(May 31, 2021)
Let's set some direction. I'm concerned that I'm off track on what is of value to work on. Possibly it's residual fear from decades ago.
(May 29, 2021)
I think we'll do a bit more on our 'Making App', the part of our code that helps us make the 'Shipping App', the product we ship. (We decide to bless this effort.)
(May 28, 2021)
One more challenge in the class/method finder, then maybe we'll think about what we actually need in our Making App.
(May 27, 2021)
I've had an idea about a change--perhaps an improvement--to the class/method reporter. As I write this, even I don't know what happens next.
(May 26, 2021)
More work on our nascent Making App. Dave1707 has some interesting tricks in his programs. And we have a fine small example of refactoring 'legacy' code.
(May 25, 2021)
Dave1707 from the Codea forum provided an interesting program. I would like to bring it under control.
(May 6, 2021)
I was going to move back into the dungeon today, but realized I wanted to talk about what I learned doing the ominoes exercise. Here goes ...
(May 5, 2021)
It is of course necessary to display yesterday's polyominoes, for our viewing pleasure.
(May 4, 2021)
The Zoom Ensemble folks have been playing with polyominoes. I can't resist embarrassing myself by trying them.
(Mar 19, 2021)
I really want to make some progress on the creatures that hang around the WayDown. But first, I am going to write a Coda on CodeaUnit and my simple toolset.
(Jan 28, 2021)
Let's try a more conventional approach to our deferred collection. First, some words on why it's a good idea.
(Oct 14, 2020)
A Slack conversation brought up the question of why I do ... the things that I do.
(Oct 13, 2020)
The Agile Manifesto says that working software is the primary measure of progress. What does that mean?
(Sep 24, 2020)
This isn't Houston, but we definitely have a problem. And it's not a new one. And I'm tired of it.
(Sep 18, 2020)
A couple of interesting articles crossed my virtual desk yesterday. Links and some reflection within.
(Sep 14, 2020)
In which our intrepid author makes a grievous error: disagreeing with Kent Beck. Or does he?
(Sep 11, 2020)
A couple of small changes to CodeaUnit and my CUBase template. Then let's see what we can improve about Space Invaders. (Saturday: Arrgh, a defect!)
(Aug 6, 2020)
A friendly demo of shield damage techniques leads to an examination of an interesting coding approach. I need to figure out what I think about it.
(May 13, 2020)
I needed to test some floats the other day. Let's improve CodeaUnit to help with that.
(May 5, 2020)
The Gilded Rose 'kata' exists in many languages, but I've not seen Codea Lua. Maybe I should fix that bug. This is pretty boring. Skim, don't read. Needed for the record.
(May 2, 2020)
Some final thoughts on the Gilded Rose exercise. Well, final for now ...
(Apr 30, 2020)
To round out a dozen, we simplify things a lot. Too much? What do you think?
(Apr 29, 2020)
Experiment with lambda.
(Apr 28, 2020)
Today I think I'll double-check that double-decrement issue. Then I want to see if we can combine those two parallel if nests.
(Apr 27, 2020)
Some really nice progress today ... and one open question.
(Apr 25, 2020)
Dave Nicolette mentioned on Twitter that he was wondering whether a Mob Programming Gilded Rose kata, using Arlo Belshee's 'Read by Refactoring' would make a good video. That gave me an idea.
(Apr 24, 2020)
We're on a path more like re-implementing the program than refactoring it. That's a concern. Can we do better?
(Apr 22, 2020)
Today I plan to move the Conjured item code to the new scheme, and see what that tells me. Something will probably go wrong.
(Apr 21, 2020)
It's noon on Tuesday. I've whiled away the morning. Let's try to make a bit more progress on this code.
(Apr 20, 2020)
Monday, Monday ...
(Apr 18, 2020)
Are we doing it right? Are we in trouble already?
(Apr 17, 2020)
It's April 17th. It's snowing. We're on lockdown. Let's look at Gilded Rose and see what we might do that would be interesting.
(Apr 16, 2020)
Chet, Amitai Schleier, and I played with the Gilded Rose exercise the other day. I think I'll write about it a bit, starting from scratch. [edited]
(Feb 10, 2020)
Despite its great value in the hands of experienced TDDers, the uptake is slow and the practice is often hard to sustain. What's up with that?
(Jan 20, 2020)
>Alex Bunardzic has been part of a rambling Twitter thread about TDD and people who object to it. One of his concerns is that TDD proponents agree that TDD isn't always appropriate but don't say when. Let's explore that.
(Jan 18, 2020)
I tweeted this on the 18th, in response to something left frustratingly vague by one of my dear colleagues, which caused me to think more deeply about what they said.
(Jan 8, 2020)
Some folks who don't know TDD, and some folks who should know better, have been describing TDD in ways that don't match what I experience. Herewith, some thoughts.
(Jan 8, 2020)
In a Twitter conversation a week or so ago, I was asked to do a TDD video, to show how I do it. A video isn't within scope just now, but here's an article with real TDDed code in it.
(Nov 25, 2019)
Despite my concerns about experienced coaches advocating against practices that are often quite useful, there are a few things where I'd at least advise great caution.
(Nov 24, 2019)
Some thoughts from Twitter on 'technical debt', what it is, what it isn't, and why we avoid it.
(Nov 24, 2019)
Why do we do that? One word: Productivity
(Sep 10, 2019)
When I was blurting about the Increment as the most important thing, just the other day, GeePaw Hill mused about collaboration as the most important thing. Today, I'll muse on that and his notion of makers-making-made.
(Sep 5, 2019)
If you are not producing working, running, tested usable software in every single Sprint or iteration, you are not [yet] 'doing' Agile, you are not [yet] 'doing' Scrum.
(Aug 29, 2019)
A question on AgileMentoring.com triggered this little article. Perhaps repetition is the mother of something ...
(Aug 24, 2019)
Kate chats with people at the KALE Society meetup. They discuss some small issues and then one big one. Test Doubles come up. Darts are thrown.
(Aug 5, 2019)
A bit of a screed about naming, triggered by a super idea from Dan Terhorst-North.
(Apr 13, 2019)
A couple of people asked me to list all the technical skills required in order to do Agile Software Development. I can't do that, but I can do this.
(Mar 25, 2019)
Probably not a good thing to say. Possibly a good thing to think about.
(Mar 13, 2019)
A lovely post by GeePawHill led to a Twitter conversation about up front design, inspiring this article.
(Mar 4, 2019)
First some refactoring - then some behavior.
(Mar 4, 2019)
I decide to follow Braitenberg's approach a bit more closely, driving the wheels at different speeds rather than rotating the vehicle.
(Mar 4, 2019)
Let's Turn - making our little guy turn. And see the comments on Gross Hackery at the end of the article.
(Mar 4, 2019)
I'm playing in Codea with 'Braitenberg Vehicles', just for fun. I'll be sharing what I do with you all.
(Sep 21, 2017)
Just a bit of reflection after two weeks off. Next week, I hope we'll actually do something. Today I remember the Boy Scout Refactoring Rule.
(Sep 8, 2017)
Responding to a mistaken TDD flowchart.
(Sep 7, 2017)
It has been a week since Tozier and I last worked, and I spent most of the time under repair. I'm thinking we'll work on the date-sensitive stuff. I'm mostly wrong.
(Aug 29, 2017)
Chet has me nearly convinced to move my site base to Dropbox. Today we'll talk further about that and about moving the product forward.
(Aug 25, 2017)
I decide to spike a bit on folder and file manipulation.
(Aug 24, 2017)
When this article appears, it will have been processed by our new (MVP) iPad Transfer Mechanism. 'Thank you for pressing the self-destruct button.'
(Aug 23, 2017)
Tozier and I learned something about habitable code yesterday. Topics may include bits of Confirmation Bias and fragments of Coding Morality.
(Aug 15, 2017)
I thought today we'd work on the triggering mechanism for the iPad build. Instead something important happened! (Clickbait)
(Aug 4, 2017)
I'm wondering, today, whether the Increment could be the driver for all 'Agile' software development.
(Aug 3, 2017)
If I were a REAL product owner, I'd be pressuring the hell out of my team right now. So I will. How did that work out, Ron?
(Aug 1, 2017)
We'll try to focus on building features today, but there are lurking issues in those magical incantations we do about Dir and FTP classes.
(Jul 31, 2017)
Today, let's talk about cadence. Iterations, Sprints, to have them or not, that is the question.
(Jul 28, 2017)
Thoughts about Technical Debt
(Jul 28, 2017)
Time to do some work after the heavy refactorings involving quantum mechanics. Let's see if we remember how.
(Jul 26, 2017)
I was asked a question about one of today's modern approaches to Agile software development. Here are some general thoughts.
(Jul 25, 2017)
In this short session, we inch forward and wind up in a better place. Not THAT better place. I just mean the code is better.
(Jul 20, 2017)
What's next for the iPad project? Refactoring, it turns out.
(Jul 13, 2017)
We knew last Thursday that we had an issue with folders and folder names. A week later, we dig back in.
(Jul 6, 2017)
We really hope to get from end to end today. You won't believe what happens next. Unless you're paying attention.
(Jul 4, 2017)
Tozier and I shoot again for end to end on the iPad project. What happens next? As I write these words, I don't know either.
(Jun 30, 2017)
We're clearly closer than we were, and it feels very close. But not as close as we thought.
(Jun 28, 2017)
Bill and I decided to do a bit more on the iPad publication project. You won't believe what happened next. Unless you expect trouble.
(Jun 26, 2017)
What if I were to create a new software development framework? I'd never do that, but if I did, what might I do? Let's find out. Let's talk today about Whole Team.
(Jun 25, 2017)
Terms seem important to me today. (Revised 2017-07-05: Techniques)
(Jun 25, 2017)
Some Notes on the theme "If I were going to create a new framework, what would it be?".
(Jun 20, 2017)
Today Tozier and I will do a Quick Design Session and start TDDing something that will, I hope, turn into the actual app.
(Jun 16, 2017)
In which we suddenly realize something about Tozier.
(Jun 15, 2017)
Tozier and I start with some Ruby code for FTP or something.
(Jun 14, 2017)
Tozier and I try some things.
(Jun 10, 2017)
I'm told the iPad is the new Mac, or something. Anyway, it'd be nice to be able to write articles on the iPad and get them on my web site without lugging around my Macbook.
(Jun 24, 2016)
A foray into Google App Engine turns into a Tibetan adventure with Bos grunniens. No real lesson is learned.
(Apr 21, 2016)
I found this picture of a roulette wheel. I wonder how hard it would be to make my little game use it.
(Apr 20, 2016)
Let's finish wiring up our second pass at Jim Jeffries' roulette example, and see what we can see.
(Apr 19, 2016)
I felt I owed it to myself to do Jim Jeffries' roulette exercise, this time with more tests. You won't believe what happened next. (Sorry, I have a click-bait virus.)
(Apr 18, 2016)
Jim Jeffries (no relation) proposed a TDD exercise / challenge. I took it on. The results may surprise you. (Sorry.)
(Nov 27, 2015)
Going too far is quite difficult to do.
(Nov 12, 2015)
It's common to tweet things objecting to high automated test coverage as if it's irrelevant, incompetent, or stupid. I suggest otherwise with a thought experiment.
(Nov 9, 2015)
In which we discuss the technical debt metaphor, bright code, and the inevitable decline of civilization.
(Nov 3, 2015)
A Twitter thread gets me thinking about Mock objects and whether they're more than just a matter of personal taste.
(Apr 11, 2015)
Kate Oneal chats about testing with the Ann Arbor KALe Society.
(Mar 12, 2015)
Jonathan Rasmusson wrote an interesting article. I agree. It's not about unit tests. It's about skill and understanding.
(Feb 13, 2015)
Content from XProgramming has been moved to this site. Some brief retrospective thoughts.
(Jan 24, 2015)
As Tozier and I work on Scraper, I find the pairing to be quite difficult, though not unrewarding.
(Dec 22, 2014)
It's good to have people watching over me. Already got some feedback on this morning's article.
(Dec 22, 2014)
True to my word, for once, I'm learning RSpec. Follow along and laugh at my ignorance.
(Dec 6, 2014)
Channeling ELO. Also a Codea Diamond that you might find interesting.
(Dec 5, 2014)
A number of people have tried the Diamond Problem now. Let's look at their work and see what we learn.
(Nov 30, 2014)
The trouble with thinking is, you keep getting new ideas. I wanted to try this one. Turned out quite oddly.
(Nov 29, 2014)
Alistair Cockburn published an article about thinking in solving a problem with TDD. I'm all for thinking. Let's see how I do it. UPDATED.