Lazy shortcuts lead to mistakes

 /  [22.00.0178]

Lazy shortcuts lead to mistakes

I just un-published post 22.00.0177 as it shouldn't have appeared. It's not finished and was published by mistake. Here's how.

Without getting too technical, I add things to this site using the ubiquitous software git. Normally this is a conscious action, and it takes two steps.

First:

git add 22.00.0177

– to say please add this file to the list of things I'd like to commit.1

And then:

git commit [some message to say what you did]

– to commit those changes to the site.

Well, why do in two steps what can be done in one? Long ago I created an alias -- a shortcut -- that merges these two steps. So now I just:

git addcommit [some message to say what I did]

The problem is that this git addcommit alias adds every new file to the commit. Which is very often what you want: but clearly not always. In this case, it added this unfinished post.

There's a reason this isn't a built-in command. It's a bad idea. I was being lazy.

I've deleted the shortcut. The post will be finished and re-published tomorrow. Apologies for the error.


100% human. 0% AI. Always.

Footnotes

  1. These git commands are what we call pseudocode. They're not the exact commands, but they vaguely resemble them. The idea is to give the layperson an idea of what's going on while not getting caught up in the details.

Standard zero 'AC.00 JDex for …' – what's it for?

There's a reason the standard zeros live in the site's 12 Advanced section. Including them all in our standard systems was a difficult decision.1

Let's look at one of these specifically, the AC.00 JDex for … entry.

00.00 JDex for the system

This one is the clearest. As the 'first' ID in any system, 00.00 serves as its introductory document.

If there's anything that you need to know about the system, it should go here. I think of it like, if I got amnesia, what's the one thing I'd need to know? It's the location of this note. From here, you should be able to find everything else.

Here's what I've written at 00.00 in my personal system:

00.00 JDex for P76 Johnny's personal system

  • JDex for this system is right here in Bear. You're reading it.
  • Filesystem for this system is primarily at iCloud Drive/Documents/P76 Johnny's personal system.
    • When folders live elsewhere, that location is specifically noted in the JDex entry.

Area-level entry

Let's go down to the area level, 10.00, 20.00 and so on. In exactly the same way, the JDex entries for the area serve as the documentation for that area.

What's in it? Why did you decide to put these things in it? What isn't in it?

I just did a bit of a tidy-up and I created myself a new area. (I use the Life Admin system but it's specifically not designed to handle all the other stuff we do: our hobbies and jobs and whatnot.)

I don't have a single hobby because I'm the sort of person who creates a bunch of stupid little 'projects'. These have accumulated over the years and I have an archive I'd like to save. And I'll need IDs for new projects from now on.

I also need a place to store stuff that I've downloaded. So I created a new area, 20-29 Create & collect.

An area is little more than the categories it contains, so the JDex entry 20.00 is very simple. I've just told myself:

This area is for all the crazy ideas. See the category JDex for more details.

– and then linked to 21.00, 22.00, and 29.00.

Category-level entry

Here are my categories:

  • 21 🧠 Imaginarium2
  • 22 😍 Humans are brilliant
  • 29 🏛️ The Omnium3

And here are their JDex entries:

21.00 JDex for Imaginarium

This is a place for all the crazy projects. But not for learning about, and documenting, technology and code. That's more useful in a work context, and is going to be way more useful for linking in Obsidian, so code learning and notes are at D25.4

22.00 JDex for Humans are brilliant

A place for 'collected works' but only things that are made by other humans.

29.00 JDex for The Omnium

This is a place for your historical collected works. You shouldn't be working in here day-to-day. Things here shouldn't ever change.

  • And don't move completed things from 21.00 JDex for Imaginarium here. They just stay there and age out per the Johnny.Decimal system design.
  • Only add entries here if, in the process of tidying up old hard drives/folders, you find more old things.

Summary

So in summary, these JDex notes are your documentation of your own system's structure and purpose, at each level.

  • 00.00 is your description of the entire system.
  • A0.00 is your description of this area.
  • AC.00 is your description of this category.

And if you don't need them, or that's confusing, you can just ignore or delete them.


100% human. 0% AI. Always.

Footnotes

  1. In the end, we included them. It's easier to delete what you don't want than it is to create what you do.

  2. A name gratefully borrowed from Lucy, who came up with it when she built her own system.

  3. Yes, I pushed this out to 29, further reinforcing its archive-ness.

  4. D25 is my Small Business System and it lives in Obsidian.

Commercial licence

 /  [22.00.0175]

Commercial licence

The Johnny.Decimal system will always be free for everyone, including for commercial use. The licence places no restrictions on use of the system.

But you might work for an enlightened company who recognises that ideas like this need to be sustained. So we just created a commercial licence with 3 tiers.

The employee numbers are total at your company, and the currency is USD:

Full details are at 01.02/Commercial licence.


100% human. 0% AI. Always.

Finder folders to Markdown links in Bear

 /  [22.00.0174]

Finder folders to Markdown links in Bear

I was just trying to get a list of Finder folders as a bullet list in a Bear note. (I'm finally upgrading my own LAS to v2 and am making it super neat as I go.)

I've known for a while that you can do this:

  1. Select some folders in the Finder. Typically I find myself shift-selecting a whole range, e.g. 20 dated subfolders within another folder.
  2. Cmd+C to copy.
  3. Now if you Cmd+V to paste, and you paste into a text field, you'll get the titles of the folders.

What you get depends where you're pasting. If I do that into this Visual Studio Code window, I get a long file path. If I do it in to a TextEdit window in the default rich text view, it tries to paste the contents of the folders!

I have TextEdit set to open a plain text window by default vs. RTF. That's Settings > New Document (tab) > Format > Plain text. And now when I paste there, I get a really simple list of the folder names.

If you paste into Bear (or, I presume, other Markdown-compatible apps), you get a Markdown link that, when clicked, opens the folder in Finder!

That's brilliant. Just what I want for my JDex: now it tells me what's in my filesystem folders, and I can just click to go there.

Note: only with 2+ folders

Robert points out on Mastodon that this only works if you have 2 or more folders selected. If you 'copy' a single folder, that will paste as a massive blue folder icon!

There's a lot more going on when you press 'copy' than you thought...

A video

Here this is a quick video.


100% human. 0% AI. Always.

Obsidian links (redux)

 /  [22.00.0173]

Obsidian links (redux)

Previously:
Things: cross-link to Obsidian and back
Obsidian tip: link directly to a header

I'm going to start creating 'permalinks' for each of my Obsidian notes using the ^block syntax.

I link to my notes prolifically from outside Obsidian. My primary use-case is Things, where every project has this block at the top (mirrored in the Obsidian note).1

The notes section at the top of a Things project. I have two Markdown links, one to Obsidian, one to Things.

If that Obsidian URL is the traditional format, where you link to the title of the note, it's very fragile. My note titles are fluid; I shouldn't be afraid to change them.

So I use the Advanced URI plugin which allows you to link to a ^block, and at the top of every note I create a permalink using the ID of the note.

Links as described in the post at the top of an Obsidian note.

Note that right-clicking on the block and selecting Copy URI for current block gives you a longer URI which contains the note's title. If you're strict about making your block identifiers unique – easy when they mirror the ID of the note they're in – you can remove that part of the URI, leaving it much neater.

obsidian://adv-uri?vault=D25%20JDex&block=50105

– because now I can leave that URI string in the templates for both Obsidian notes and Things projects, and all I need to do each time is change the last couple of digits of that block ID. So this only takes a few seconds and is low-friction.

A note on the experimental 50105~14.54 syntax

That's the note: it's experimental. There's a healthy debate over on Discord and there'll be a blog post shortly.


100% human. 0% AI. Always.

Footnotes

  1. Yes, Things links to itself, as does Obsidian when I copy it over. But now this block of links is copy/pastable anywhere as it's complete.

    This is why I use Markdown bullets and not Obsidian's properties: I prefer that my frontmatter be human-readable, and copy/pastable to other Markdown-compatible apps. I don't need to query it or use Bases.

Terminal tricks

 /  [22.00.0172]

Terminal tricks

Since writing this page years ago, I've become a bit better at using the Terminal.1 I just realised how simple it is to move to a Johnny.Decimal folder. Here's how.

I'll explain why this works, as you'll need to tweak it for your own setup. So the first thing you need to know is where my system lives on my filesystem. My personal system, folder name P76 Johnny's personal system, is in my ~/Documents folder.

To make the examples here simpler I'll assume we've already cd ~/Documents.

Wildcards

Two quick things to know.

A wildcard * means 'any text'. So instead of P76 Johnny's personal system I can just write P76*. This works uniquely well in Johnny.Decimal because the majority of your folders start with a unique number.

You can expand this by using the amazingly-named globstar pattern. Within a path, ** will match any folder. It's like a really-wildcard.

Globs

Seriously, this pattern is called a glob. You weren't allowed to have those when I was at school.

If I want to navigate to my ID 15.53, this is what I do.

cd P76*/**/15.53*

That's it! We're saying please change directory to the folder that starts P76, of which there is only one. Then, search all of its subfolders **, until you find one that starts 15.53. There's only one of those.

Open the folder in Finder

If you want to actually open a Finder window, vs. staying in the Terminal:

open P76*/**/15.53*

Amaaaaazing.

Advanced script

How's this update to the cdj script, from Murrax on Discord.

setopt extended_glob
setopt dot_glob

cdj() {
  # Update with your document root folder
  if [ -z "$2" ]; then
  pushd ~/Documents/JD/*/*/${1}*/
  else
  pushd ~/Documents/JD/*/*/${1}*/*(#i)($2)**([1])
  fi
}

export cdj

I'll quote Murrax for the details:

it lets you go into subfolders too, searching by substring, e.g. cdj 31.14 COMSM0067 puts me in ~/Documents/31 Formal Education/31.14 University of Bristol/+COMSM0067 Advanced Topics in Programming Languages, or if I forget the unit code I can do cdj 31.14 languages

A-maaaa-zing.


100% human. 0% AI. Always.

Footnotes

  1. That cdj() script came from someone else, I didn't write it. If you did, let me know! Authorship is lost to the sands of time.

Configuration management

 /  [22.00.0171]

Configuration management

A few weeks ago I was admiring Japanese train drivers' very 'deliberate' behaviour. And I talked about it in the new task and project management (T&PM) course, specifically in the context of setting up a dashboard and 'logging' your work (link requires access to the course).

Effective immediately, I'm committing myself to a new set of behaviours. I don't think this will be easy, but I'm going to stick with it, and document it here. This will be one of my major themes for 2026.

In summary:

  1. Every action I take on my business MUST start and end in my JDex.
  2. Every thing that I create, reference, or update, MUST be contained in my JDex. This includes technical details e.g. all changes to this website and JDHQ.
  3. This documentation needs to be good enough such that a competent stranger could understand what I've done.

To reinforce point 1: there are no exceptions. Everything that I touch or do MUST be documented in my JDex. This might not be practical or helpful; I'm not committing to do this for all of time. But let's find out.

Case study: our recent 'BOGO' offer

I was late in dealing with Black Friday and for reasons that aren't relevant, setting up a 'buy one, gift one' offer was felt simpler than, say, a 20% discount.

Regardless of the offer, there's still a ton of complexity in building something like this. In this case:

  • Inject some sort of notice of the offer onto a whole bunch of pages.
  • Create a public database to receive people's invitation data.
    • Make it so a stranger can't randomly add a record to this database.
  • Modify the template that sends you the 'create an account' email so that it includes a link to this database, pre-filled with your details.
  • Track which account is a gift purchase, and which is a recipient, so that recipients don't also get a link to gift an account, creating a never-ending chain.
  • Check the database every day and manually create these gift accounts.

And more. A whole bunch of work! The point here isn't these specific details. It's that many things in business are this complex.

It's not like driving a train

Not to take away from the skill of driving a Japanese train, but there I think it's orders of magnitude easier to be more deliberate. Each station, each action, the same. Check the time. Check the doors. Pull away. Check your speed. Slow down. Apply the brakes. Repeat.

Very little of modern knowledge work is like this.1

What's worth remembering?

All day long, people in PKM forums ask a variant of the question: how do I remember everything that I read?

I get why they ask. They've been told by Big PKM that you're a better person if you remember everything. And if you didn't have so much to remember, you wouldn't need to spend money on that 'second brain'. ;-)

But I disagree, in the most part. (If you're studying for a degree, you might ignore this section.)

I think you'll remember what you're naturally inclined to remember. When I read a book my primary goal isn't internalising every piece of information. That sounds exhausting. And, to what end?

This is why I've always seen Johnny.Decimal more as PRM vs. PKM.

Configuration

But some things are worth remembering. All that stuff I did to my website: now I want to un-do it. The deal's over: let's revert to normal. It sure would be nice if I could just reverse my steps.

I did it in the first place. Surely I can just remember what I did in order to un-do it?2

Well, spoiler: I can't. It's just too complex.3

In the corporate IT world we call this sort of stuff 'configuration'. There's a whole field of 'configuration management': staff, processes, and software. And it's really difficult. I've never seen it done right.

Because humans, what are we good at? What do we enjoy? Work! Changing things. Making things better. We dive in and change stuff; we hack away and get it done.

What isn't fun? Keeping records! Stopping, after the fact, and writing down what you did. Who wants to do that, vs. getting on with the next fun job? We're so bad at it. So it never happens.4

My 'BOGO' configuration

So what configuration should I have recorded in the context of this BOGO offer? I think it's sufficient to be complete, but concise. Especially so in the context of computer code: I don't need to describe exactly what my code does. To determine that, I can read the code.

But I need to describe which pieces I created, updated, and deleted. What changed, at a high level? Because that's what allows me to trivially un-wind the thing.

I think if I'd written 5 bullet points, each of less than 50 words, that would have done the job. Hardly onerous.

This will slow me down

Another theme from the T&PM course was that, to do things well, I think it's necessary to do them more slowly.

Computers allow us to be fast. You should see me using this Mac: it can be a blur. I'm good at computers.

But does this help? We just saw how my haste actually got me into trouble. Doing things quickly can be a false economy. When I exhorted you to be neither lazy nor stupid I noted that 'being lazy now just means that I have to do it again later'. There's no net time saved.

I'll YouTube this (in 2026)

I've long wanted to publish an ongoing series of 'how Johnny works'. This is it. I'll give it some thought and, when I start, show my working here and on YouTube.


100% human. 0% AI. Always.

Footnotes

  1. Almost by definition? If it becomes rote it ceases to become knowledge work. Now its outsourceable.

  2. I know, I should have been better at controlling my git commits and then I could have just reverted those changes. I didn't do that either.

  3. There are 13,573 lines of code in the Astro files that make JDHQ work. That doesn't include any of the content.

  4. At work there's an accompanying field of change management that theoretically helps. I see parallels there too, and might explore this in a future post.

Decimal Diary: TGIF and vintage annual reports

 /  [22.00.0170]

Decimal Diary: TGIF and vintage annual reports

Dear Decimal Diary,

Last week I did a little TGIF – Thank God I Filed it – time. And when I was nosing around I found a fun folder I'd forgotten about in 43 Images in our Small Business System.

TGIF is Johnny's idea about spending some time on Friday afternoons filing things properly and neatening your system. When your brain is too tired for other stuff.1 It's the kind of thing I put off, and then when I start I can't stop. Now I know about how files sort beautifully using the date, I get a small thrill from tidying up messy filenames.2

The ID I neatened last week was 43.21 Vintage annual reports. It has some PDFs I'd downloaded for inspiration at some point. The filenames were haphazard and as-downloaded. And since they're annual reports, putting the year out the front makes sense to me. Now they're all lined up and tidy. It's a small win, but satisfying. And I'll remember I have these in the chamber.

A nicely sorted ID
Figure 22.00.0170A. A nicely sorted ID.

Some reports

The Bureau of Economic Geology
Figure 22.00.0170B. The Bureau of Economic Geology.
The Ford Foundation
Figure 22.00.0170C. The Ford Foundation.
The Deep East Texas MHMR
Figure 22.00.0170D. The Deep East Texas MHMR.
A page with a financial report
Figure 22.00.0170E. A page with a financial report.
The Philippine Wood Products Association
Figure 22.00.0170F. The Philippine Wood Products Association.
The Jet Propulsion Laboratory
Figure 22.00.0170G. The Jet Propulsion Laboratory.
A page with a photo by the Voyager probe
Figure 22.00.0170H. A page with a photo by the Voyager probe.
The Electricity Supply Board
Figure 22.00.0170I. The Electricity Supply Board.
The Jet Propulsion Laboratory
Figure 22.00.0170J. The Jet Propulsion Laboratory.
The Jet Propulsion Laboratory
Figure 22.00.0170K. The Jet Propulsion Laboratory.

If you have any leanings this way, the vintage annual report world can be a dangerous rabbit hole.3 And so can filing using the date to sort.

From Lucy


100% human. 0% AI. Always.

Footnotes

  1. Our Friday afternoon soundtrack is often the Platinum Collection by Genesis, but anything similar will improve this type of admin.

  2. Remember, you can set up a shortcut to add dates automatically.

  3. Especially the space ones.

An invoice disappears

 /  [22.00.0169]

An invoice disappears

Well this is weird. I just lost an invoice, as in one that I was sure I had raised a couple of weeks ago. Here's how I discovered it, and what I'll do to make sure it doesn't happen again.

The invoice

I don't raise many invoices manually. This one was to a friend, whose domain name I manage. It's a fancy expensive domain so, when it renews, my company bills his company for it.

I raised it the other week. I remember doing it. And yet now: no trace. A puzzle.

Discovering its loss

I know I'm not going entirely mad because, in reviewing my Small Business category 13 Money earned, spent, saved, & owed this morning, I saw a task due next week:

Check that [name] has paid his invoice
Due: 25 Nov

– and I thought to have a quick look. So I'd done some things right:

  1. Set a quick reminder to myself, in a trusted place.
  2. Made sure that I actually saw that reminder, by reviewing my system regularly.

I'll show you how I do this in the upcoming series 'Task and Project Management using the Johnny.Decimal system'. Will be released on JDU in the next couple of weeks.

The vanishing act

I went to look for this invoice in the only place that it could possibly exist: my Stripe console. It just isn't there. No trace.

I'm deeply confused by this, but whatever. No point dwelling; let's just make sure it doesn't happen again.

Deliberate record-keeping

Last time, I raised the invoice in Stripe and that was it. Other than leaving myself the follow-up task, I didn't record its existence anywhere else.

If only I had a predefined ID for this sort of thing. Oh wait, is that 13.23 Invoices & sales for your work at the door? Oh, come in old friend.

Update: found it!

Talk about real-time updates. Gripping stuff.

So there isn't only one place that this could possibly exist. There are two: the other being my Xero account.

This makes our solution more interesting. Why did I choose Xero over Stripe in this instance?1 How would I know which to choose in the future?

Solution: new ops manual

This is a textbook ops manual. Next time I need to raise an invoice, I need to be following a process. Last time, I just made it up on the fly.

So here's what my new 13.23+OPS1 Raise an invoice says:

  1. Raise all invoices directly in Xero, because this integrates with your accounting system.
  2. Raise the invoice, and create a note at 13.23 with its number and a link.
  3. Create a new customer record at 33.11 and from there, link to 13.23.

That's it. Three easy steps; but now they're unambiguous, and I won't make the same silly mistake again.


100% human. 0% AI. Always.

Footnotes

  1. I'll tell you why. Because this invoice has nothing to do with Johnny.Decimal, really. In my mind, that's what the Stripe/Xero split is. Stripe was JD stuff, Xero was more fundamental company stuff. Logically, I now understand, this makes no sense.

There are more posts.


┌─────────────────────────────┐ 
      Life Admin System      │▒
                             │▒
 The fastest way to organise │▒
    your home life -- $33    │▒
├─────────────────────────────┤▒
  Johnny.Decimal University  │▒
                             │▒
 Learn how to build your own │▒
 system, & lots more -- $200 │▒
├─────────────────────────────┤▒
    Small Business System    │▒
                             │▒
 The fastest way to organise │▒
 your small business -- $330 │▒
├─────────────────────────────┤▒
│      No subscriptions       │▒
│      Updates for life       │▒
└─────────────────────────────┘▒
 ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  
Search ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────