2018 By The Numbers

Being productive in 2018 was again a challenge. If you produced nothing, but managed to survive: good for you!

Here's a summary of things I shipped. Numbers in parens, e.g. "(3,2)", are the figures from last year and the year before.

instagram/secretgeek 2018

The tweets that travelled the furthest were both about Evergreen Skills

Well, let's see what 2019 is all about.

Previously previously


Think you're clever? Can you name each of these CASING styles?

How many of these capitilization styles can you name?

I'll give you a clue, the first one is "UPPERCASE"

  2. all work and no play makes homer something something
  3. All Work And No Play Makes Homer Something Something
  4. AllWorkAndNoPlayMakesHomerSomethingSomething
  5. allWorkAndNoPlayMakesHomerSomethingSomething
  6. All work and no play makes homer something something
  7. all_work_and_no_play_makes_homer_something_something
  9. all-work-and-no-play-makes-homer-something-something
  10. All-Work-And-No-Play-Makes-Homer-Something-Something
  11. All wOrk And nO plAy mAkEs hOmEr sOmEthIng sOmEthIng
  12. alL woRk AnD No plAy MAkeS HOMer sOMetHInG sOmetHING

Take your time. Look through them carefully. One at a time, out loud, say what each of them is called.

Scroll down for the answers.






The Answers

Easy one first up:


That's uppercase. Letters A-Z.

2. all work and no play makes homer something something

...lowercase, letters a-z.

3. All Work And No Play Makes Homer Something Something

...Title Case, the first letter of each word is capitalized.*

4. AllWorkAndNoPlayMakesHomerSomethingSomething

Good old PascalCase... words are smashed together, with the first word capitalized.

5. allWorkAndNoPlayMakesHomerSomethingSomething

PascalCase's close relative, camelCase... words are smashed together, with the first word not-capitalized.

6. All work and no play makes homer something something

Sentence case... all words lowercase, but the first letter capitalized.

7. all_work_and_no_play_makes_homer_something_something

Snake case: underscores as word separators.


Combine snake_case with UPPERCASE and you get C_CONSTANT_CASE.

9. all-work-and-no-play-makes-homer-something-something

This is kebab-case, great for URL fragments, it's lowercase with each word separated by a hyphen.

10. All-Work-And-No-Play-Makes-Homer-Something-Something

This is Train-Case, the slightly shouty cousin of kebab-case.

11. All wOrk And nO plAy mAkEs hOmEr sOmEthIng sOmEthIng

You might have to pay attention to spot that this is vOwEl cAsE - where vowels are sent to UPPERCASE.

12. alL woRk AnD No plAy MAkeS HOMer sOMetHInG sOmetHING

And this is an exmple of Sponge Bob Case, where letters are randomly assigned a case; it's different every time, and hard to detect. You can't disprove that every one of the above examples is ALSO an example of Sponge Bob case. That's the thing about random ;-)

Here's a NimbleText pattern that demonstrates all of the above.

Yeh, this fun and educational content is also a promo for NimbleText...

This example lets you play with all the different casing styles and generate your own in a snap!

Thanks to Doeke Zanstra for the idea of vOwEl cAsE.

* For a more nuanced take on Title Case (for professional writers) try the title case converter tool, which can apply complex house styles, like Chicago, APA.


NimbleText is now a Machine Learning Platform

(TL/DR NimbleText 2.9 is available now. It can *infer* a pattern from a single example.)

I saw this image on twitter a few weeks ago, and it got me thinking...

machine learning 66.jpg

The first part of the diagram is a perfect description of NimbleText: given some data and a pattern (the 'rules') it produces an answer.

I started to wonder:


How hard could it be to turn it around? Could I make it act like the second part of the diagram?... given some data and a single example of an answer, can I make it produce the rules (the pattern) to produces this answer?

Soon after, I had a satisfactory result and NimbleText can now act like the second part of the diagram.

Here's an animated movie of it in action:

Pattern inference in action

If you leave the "pattern" textbox blank, but insert an example result in the result textbox and hit "calculate" it will deduce the pattern.

In other words, you can use an example to deduce the required pattern.

For example, if you have this data:


...and you don't have a pattern, but you know the result you want, just enter an example result based on the first row, for example:

Hello there Jenny Jones 

Hit Calculate and the miracle of “machine learning” will use your example result to deduce a pattern:

Hello there $1 $0

Hit Calculate again the result will become:

Hello there Jenny Jones
Hello there Sam Smith
Hello there Jack Johnson

It's cleverer than that though. NimbleText also deduces any functions that are needed.

If you had the data above, with an empty pattern, and the example result you provided was:

jenny JONES

Press Calculate and it will use your example to deduce THIS slightly more delightful pattern:

<% $1.toLowerCase() %> <% $0.toUpperCase() %>

Press Calculate again, and the new pattern will be applied, giving you the result:

jenny JONES

...without you ever having to waste your finger's precious few remaining keystrokes typing out (or remembering) all those nasty function names. It can deduce quite a few other functions as well.

Try it for yourself!

Let me know about any bugs via a comment, or via email to support at nimbletext.com. cheers!

(It's probably worth pointing out that any "machine learning" occuring here is just "classical programming"... it's a very handy feature all the same!)


I have some feedback for you...

I read this excellent thread from Amanda Silver about "feedback":

...and it reminded me to blog about what I learned from the book "Thanks for the Feedback" by the authors of "Difficult conversations" (Douglas Stone and Sheila Heen).

There is a lot of depth to this book. I want to share the first major insight they provide:

When someone says "I'd like some feedback" there are several different things they might mean.

They might mean:

  1. "I'd like appreciation and encouragement," or
  2. "I'd like coaching/training from an expert," or
  3. "I'd like to be evaluated."

And, if someone says "I have some feedback for you" they might mean to provide any one of those three distinct things. That feeling, by the way, is the blood draining from your face. And it's in part because you're not sure what sort of feedback they're about to hit you with.

If my daughter has just played trumpet in front of 300 people and she says "How did I go?" it's not the time for coaching or evaluating: it's good old appreciation and encouragement. This applies even if, in addition to being a mum or dad, you are a world class trumpet player.

When you've applied for a job and you've heard nothing, you write and ask for feedback. You might be chasing type 3: "Did I get the job?" If they respond with "Your choice of shirt was excellent," (a weak type 1), you're not completely satisfied.

Other times, it's less clear.

So before replying with feedback, the magic trick is to ask the person what sort of feedback they want.

And if requesting feedback, be specific about the type of feedback you'd like to receive. (And then try to accept whatever you get!)

As I said, the book goes a lot further. It digs deep into the psychology of feedback, the overlap between different types, the way different people respond to different stimuli ("baseline", "swing", "sustain", "recovery," oh my!) and much more. Feedback is a crucial part of life in civilization.

I found it a worthy book.


Convergent versus Divergent modes of thought

Sometimes you need to expand your mind and find more ideas: Divergence.

Sometimes you need to focus, cut scope, and ship it: Convergence.

Understanding these two modes of thoughts, and switching to the right one at the right time, is a vital skill.

"Thinking exercises" are often divergent; they help you find more ideas. Brainstorming exercises; Lateral thinking exercises; Idea generation; Surveys to gather data; Seeking feedback. These all increase the possibilities. They are divergent.

This quote attributed to Antoine de Saint-Exupery, "Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away," is about convergence.

Chasing down leads, library research, finding and following references: these are divergent.

Considering is divergent. Choosing is convergent.

Scope creep is divergent. Bug fixing is convergent.

Explorers are divergent. Settlers are convergent.

Writing is divergent. Editing is convergent. (Note the saying "Write drunk. Edit sober." (Often falsely attributed to Hemingway.))

I have made this longer than usual because I have not had time to make it shorter.
—Blaise Pascal

...has time for divergences, but not for convergence.

When you've decided what color to paint the bikeshed, you have converged. When Darryl chips in with info about three more colors he quite likes, he's being divergent.

"We're re-imagining the boundaries of the enterprise, because our CEO read an article in Time magazine on the flight back from Helsinki" is too divergent. "It's just the way we've always done things" is too convergent.

Steve Jobs was convergent, "Get rid of the crappy stuff", "More wood behind fewer arrows", he never saw a feature he didn't want to remove. But he would harness divergence: harnessing divergence is the goal of the divergent/convergent dichotomy. Separate teams would work in parallel on their own prototypes and implementations: divergence. Then they'd bring all the results together and kill off the crappy ideas: convergence.

Ted Nelson (inventor of hypertext) is divergent. "The Laws of Subtraction" are convergent.

Inspiration is divergent. Taste is convergent.

shipit award.jpg

concept car.jpg

A "Ship it!" award is convergent. A concept car is divergent.

Amy Hoy and Alex Hilman's book title "Just F*cking Ship" is convergent. Bob Dylan's "Tangled Up In Blue" is divergent.

Wikipedia hosts the long-running battle between Inclusionists and Deletionists. In other words, Divergence versus Convergence.

Map|Reduce... map is divergent, reduce is convergent.

Scatter is divergent. Gather is convergent.

Sylvia Duckworth knows what's going on:

Refinement and exploration are convergent and divergent:

Refinement vs Exploration
(from Intercom blogpost referencing Bill Buxton)

Dreams are divergent. Goals are convergent.

Santa Claus is divergent. The tooth fairy is convergent.

Ward's Wiki is divergent. Getting Things Done is convergent.

Sketching is divergent. Inking is convergent.

Riggs is divergent. Murtaugh is convergent.

Divergent people think they're too convergent. Convergent people think they're too divergent.

Distraction is divergent. Focus is convergent.

Tag clouds are divergent. Inbox Zero is convergent.

"Ideas man" is a divergent title. "Man of action" is a convergent title.

Yes, And... is beautifully divergent.

A question mark is divergent. An exclamation point is convergent.

Both are good. Neither is enough.

May all your divergences converge.


How do you get things done?

Personal productivity is one of those things you work at every day of your life. A forever project. Right now, I've got a lot of different "systems" that work together and I'm pretty happy with some of it, so that's a nice change.

I just want to write it down and share it. There might be something you can take away from it. Or something you can add or replace and tell me about. It's very personal and I don't expect this to be completely useful to anyone. I am very interested in how you get things done.

Below is a list of the different systems, followed by a brief description of what they each do. But before getting into the systems, I want to talk about two critical concepts: Commitments and Habits.

Any time you decide to work on a new project, whether it's with other people, for other people, or for yourself, there is more work involved than you can readily see. This is the "total commitment" of the project. Over days and weeks and months and years, the project will chew up a bunch of hours. And you always have a limited number of hours.

Hence there are only so many commitments you can take on. For any project you need to decide if you're committed or not, considering the "total commitment". And the best answer is "not." You can quickly say "I can't commit to this."

When you hear about a new television series, you can think about the total commitment and say, "I don't have room for that television series right now." And that's a really liberating thing to say!

When people are super busy I think that really they're over-committed. You can't please everyone. But you can displease everyone. I'm not saying this to insult you: I point the finger of blame at myself first of all.

The other concept is "Habits". Charles Duhigg's book on "the Power of Habits" is excellent. You need to develop good habits if you want to be productive.

Here are the systems that I use habitually:


I get free audiobooks from the library via these apps (OverDrive, Libby, and Borrowbox) that integrate with many libraries, including my own mega local library complex (Brisbane City Council Library). (Brisbane is a massive local government, with an excellent library service; use it, people!)

Most of the time when I'm out walking (I consistently meet my daily step goals... I'm still committed, yay!) I listen to audiobooks at 1.5 or 1.75 times normal speed, with frequent pauses for "thinking". (Thinking pauses! Use them!)

A recent addition is that I try to listen to each non-fiction book a second time.

"The reading of a single text twice is more proftable than reading two different things once (provided of course that said text has some depth of content)"
Nassim Nicholas Taleb: Skin in the Game

The first time is entertainment. The second time is to make the information really soak in. The second time around I listen faster, at up to 2.5 times normal speed. It really flows. (There was a study that listening to audio at faster speeds is good for depression. It might be bad for mania though, so be careful with this power.)

I find that listening to audiobooks has really improved my skills at "performing" a book out loud to my kids at night, instead of just "reading" it. Every character can be unique, and there's no such thing as "over-acting". Audiobooks also give me deep immersion in different accents, which carries over into performing books for the kids.

pocket + kobo

When I see an interesting long-form article online I save it using the pocket extension, which I've installed both in my desktop browser and on my phone. I also use this extension when I'm researching a topic. I try to save a broad swathe of articles I can read all at once.

This way the article will be available (in a readable form) when I open my Kobo ereader at night. Kobo has great pocket integration.

I mark an article as a "favorite" to indicate I've read it completely. I wish there was a better way to indicate things about an article and to take notes or store snippets directly in the ereader. I'd pay a small fistful of coin for this ability.


If I have a scientific article I want to read later I convert it to a "mobile-reader" pdf using this strange program, k2pdfopt, and then use Calibre library to convert it to epub.

It's difficult to transfer the epub to the Kobo ereader, wirelessly. The simplest way I've found is to turn on the "Calibre content server" on my latop, so I can serve the file out to anyone on my network. Then, from my Kobo, I can browse to it and download the files I want. (I store a "favorite" on my Kobo, that makes it faster to browse to the Calibre content server on my laptop. I think it's hilarious that the 'web browser' feature in the Kobo is buried under "Settings | Beta Features" and introduced with this text: "Take the on-ramp to the information superhighway" like it's 1997)

With a Kindle I believe you can email files directly to the device, using a private email address.

(To investigate further: PDFMunge "Improve PDFs on eBook")


When I learn things I want to be able to access later, I write them into a markdown file in a repository on my computer. I run a command (via ok) and it's published to the internet, at TIL.secretGeek.net in html, pdf and epub format, thanks to gitbook.

This is a modern take on an ancient practice called the commonplace book or "commonplace".

"Commonplaces" are a way to compile knowledge, usually by writing information into books. Such books are essentially scrapbooks filled with items of every kind: recipes, quotes, letters, poems, tables of weights and measures, proverbs, prayers, legal formulas. Commonplaces are used by readers, writers, students, and scholars as an aid for remembering useful concepts or facts they have learned. Each commonplace book is unique to its creator's particular interests. They became significant in Early Modern Europe.


When I need to memorize a fact, such as the name of my friend's new pet dog, I put it into a spaced repetition app called CleverDeck.

These are different from TIL facts, these are little things I need to be able to instantly recall without looking them up.

Facebook does a good job of remembering birthdays for the people that are on there. But other people I have to remember for myself, so I put them in CleverDeck and find them easy to memorize.

I think I'll start putting a lot more things, including technical things, into CleverDeck.

Here are two lengthy articles on spaced repetition that cover a lot of ground:


This iphone app, devoir, is the latest addition to my systems.

There are some recurring maintenance tasks I want to remember to do. They're basically "chores". I put them into devoir.

When a task is marked as done in devoir it is immediately set to be redone at a certain distance into the future. For example: wash the car. If I wash the car and tell devoir I've done it, it will disappear, only to re-appear in 6 weeks. It's very easy to change the frequency of any task or add a new task.

At first, I had only a few things in devoir. But now it has grown to effectively manage more and more of these Sisyphean chores. And since devoir is the only thing that knows when (for example) I last had my annual home pest inspection, there is a "lock-in" with this product.

Some recurring tasks I don't have to remember because the task will remind me. For example, dentists are not shy about reminding you to come in for an appointment. And each time I get my haircut I book in the next appointment right away (and add it to my calendar, see next item).

Amy Hoy's recently launched "pep" product may be a more powerful way to manage recurring tasks. I haven't looked into it. But her design work is out of this world, so I think it would be money well spent.

calendar reminders

How many calendars do you look after?

I've got my main calendar on my phone. And an analog family calendar my wife looks after on the wall of her study. There's my personal work calendar in outlook. And my teamwork calendar in Outlook/SharePoint. Sometimes I'm on projects that have their own calendars.


I have a journal file that I use for processing what I'm doing. I press Ctrl-D to insert a timestamp.


I have alarms set at different times for every day of the week. I choose distinct ring tones for each type of reminder, to try and create pavlovian responses. I hear one alarm it means "gently start to awaken from your slumber". Another sound means "get the fuck out of bed, dipshit."

markjump / j now

I use the command line for all my computer work. Using markjump I can jump to any of my projects with the alias "j".

For example, to work on "Choose Your First Product" (the book) I type j yfp. To work on the website "YourFirstProduct.com" I type j yfp.com.

There is always a bookmark called now which I can jump to with j now which is the current project I am committed to working on.


Each project I work in has a .ok file (a little text file) that I can instantly peruse or execute.

As soon as I jump into a project, the .ok file is listed. It shows me a bunch of handy one-line commands for that project, with a number next to each one. I press ok 1 to run the first command, and so on.

I edit the .ok file with n .ok (because I have a function called n that opens a file or series of files in my text editor.)


There are some things I learn about that I find fascinating. I put those into the wiki at wiki.secretgeek.net, not into the other systems.

And other things become blog posts, or book ideas, or paintings or drawings or stupid tweets etc. Everything ends up somewhere.


As previously discussed I use "deep focus" playlists to help me get and stay "in the zone."


Passwords of course go into a password manager. I use PasswordSafe, aka PwSafe.

Weekly Email

But the best new thing that's helping me be productive, is the weekly email I get from Doctor Richard Mason. It's not a mailing list email, it's a personal email.

Talking to Doctor Richard we found we were both letting our side-businesses flounder with important tasks left undone for too long. There were easy tasks that we were simply not moving ahead with.

Now he sends me an email each week. He tells me what he's planning to do on his personal business projects. And tells me what he got done. I see him making steady gains. It's wonderful to witness!

Then I reply and say what I'm planning to do and what I got done. Things I could've put off indefinitely are getting moved along. It feels good.

It's a bit like a daily standup, but at a different pace, and more deliberate, less coerced.

Dread Task

Sometimes there is a dread task that I struggle with. These are often small, sometimes vague. They usually involve contacting a stranger or a person who has the whammy on me. Sometimes they are weird technical bugs that I can't resolve or reproduce.

As soon as I notice a task like this, I tell my brother about it. He doesn't need to tell me to do the task or anything. His role is just to acknowledge that I've said it. The reply "ACK" is sufficient. If he has a similar task, he can let me know about it. I try not to offer solutions unless he explicitly asks for them. Just an "ACK".

Having him there to hear about my dread task is really useful. It's a very trusted position. Thank you, John.

That's about it for the systems I use today. How bout you?

Here's some of the many many systems I've used previously:

  • TiddlyWiki
  • Trello
  • OneNote
  • Todo.txt
  • Ta-da list
  • Google Calendar
  • followupthen

Further Reading

(I finally found the link above, an essay from Simon Harriyott about his systems of organisation. It's from 2014 though, and everything was different in ye olden times.)


Screentime feature in iOS 12+ is also helping me out now.

And I'm using an app called "Toned Ear" for learning Relative Pitch (i.e. musical training) in a form of deliberate practice.

For organizing papers/pdfs (which Pocket doesn't handle well) I use zotero ("your personal research assistant").


Spy Codes: a code booklet to help your little spies

A handy cheatsheet for helping your kids crack codes.

Download PDF (6 pages)

I love this! I built this and extensively field-tested it with my own crack team of super spies (my kids).

It's 6 pages of my favorite Spy Codes, for use with your own budding spy team (i.e. your kids).

It's a FREE PDF, a dense little book, guaranteed to bring you hours of fun. (And give your kids a lot of practice at performing lookups.)

spy codes preview

This 6 page booklet is simply a series of tables containing alphabets that help you translate:

  • Morse code
  • Braille
  • Pigpen cipher
  • Knights Templar Code
  • A Mayan Numbering System
  • Caesar Cipher (complete table)
  • Complete ASCII (in decimal, hex, and binary)
  • And more

It is vital that your child does not let this book fall into enemy hands.

Using these sheets to encrypt and decrypt messages is a practical introduction to substitution ciphers.

If your kids (or students) enjoy these, there are many, many more advanced concepts that pick up where these exercises end.

Last year I blogged about: Dadding 101: Give Your Kids A Trail of Codes To Break.... and of course coding trails are not limited to use by dads. Mums, grandparents, foster parents, step parents, guardians, siblings, cousins, friends... everyone should be giving trails of codes to break to all of their loved ones at all times. It's one of the most joyful things in life. I know my brother and I set these up for each other when we were not the grizzled old men we have transformed into today.

Simon Singh's delightful volume "The Code Book" is a great read on the topic of codes throughout history. It's a pleasurable read and goes qute in-depth. Fun for all ages.

Znl nyy lbhe pbqrf or nf rnfl nf guvf bar!

Hacker News discussion


The Book Is Ready

Choose Your First Product cover 200

Here's the thing. I wrote a book. It's out now. And you can get it here:

Get "Choose Your First Product"

This charming little tome, "Choose Your First Product," is for any first-time product creator who wants to find a product idea that they can sell with confidence.

There's a tragic pattern that I've seen too many times:

I've watched people around me as they make their first product. They find an idea they love, or a problem that intrigues them. They pour everything into it. They code in isolation. They delay shipping, again and again as they add features, or polish existing features. If they ever ship, which they almost never do, the product is full of beautiful code. Yet it can't find a single customer. Or very few.

And they're supposed to "pivot" at this point. But that's impossible. They're demoralized, for starters, and second, they have no meaningful feedback on which to pivot. They've failed completely. Defeated, they declare "I was just no good at marketing." And give up.

They think the problem happened after launch. They didn't hustle hard enough. They didn't choose the right font on their landing page. (Maybe they can A/B their way to success?) They don't realize they were on the wrong track before they even fired up the IDE.

This book is a practical remedy to that problem. How do you start with something people will pay for? How do you start with something that will be easy to sell?

I've boiled it down to a four-step plan, the T.O.A.D. It's a framework. Of course it is. I walk you through the TOAD, this four-step framework, showing how easy it can be to find an idea that will help real customers.

Because I like to overdo things, I made it available in four formats:

If you want to make a humble product that will help real customers, then it's possible this book will be useful. No pressure though.

Read more here.

bird1 row 230


Death to the Passive Voice

When I was a funny little school kid, my English teachers would moan:

Stop using passive voice in your writing!

I did not know what they meant and found no enlightment in their answer:

Passive voice is when a verb is used without a clear subject.

Now that I'm a big kid and I live in the modern futuristic utopia of 2018, I finally understand what passive voice is all about!

If you go to an application like "Hemingwayapp" and paste in the sentence:

Passive voice is when a verb is used without a clear subject.

...you will see the app highlight the words "is used" as a blatant example of passive voice...

We've employed a "doing-word", the verb 'used', but we haven't said who or what did the doing. There's no one to blame for this action.

With a little thought we can re-write the sentence in an active way:

"Passive voice is when writers use a verb without a clear subject."

Now we know who is doing the thing... writers did the thing!

As an editor it's hard to turn someone else's passive writing into active writing. Because when we turn passive writing into active writing we must decide "Who did this verb?" Only the original writer can be sure where to stick the blame.

Passive voice is completely reliant on weak verbs. Things are "done". But they're not done in an interesting and engaging way. Once you've made a subject responsible for the action, you can also enliven the verb:

"Passive voice is when writers dribble out their verbs with no clear subject."

"Passive voice is when tepid writers lay down their verbs with no clear subject."

Death to the Adverb

On this topic of choosing verbs we find another big suggestion from hemingway app: use fewer adverbs.

If you write:

The girl ran quickly across the lawn.

Hemingway app will ding you for "quickly" -- as it's an adverb, and Hemingway himself punched out as few of them as possible. You may have observed that he wrote the books "For Whom the Bell Tolls" and "A farewell to arms". He did not write "For Whom the Bell Merrily Tolls" and "A Cheery Farewell to Arms."

A writing coach won't just tell you to ditch the adverb: they'll get you to improve the verb.

So this is worst:

The girl ran quickly across the lawn.

This is better

The girl ran across the lawn.

But this is betterest!

The girl dashed across the lawn.

A single word, a verb, that contains within it more meaning than the verb plus adverb combo.

And again, only the writer, not the editor or the coach, can choose the correct verb.

The girl sprinted across the lawn.

The girl dashed across the lawn.

The girl flew across the lawn.

The girl tore across the lawn.

The girl fled across the lawn.

And so on. Each with different connotations.

(I'm hooked on these topics lately, as I've been writing the book Choose Your First Product (launching any day now!) and editing the book Evergreen Skills for Software Developers... I can't read anything without mentally taking out the red pen.)


I'm .ok you're .ok: introducing folder profiles for bash and powershell


Summary: a .ok file holds a bunch of handy one-liners, specific to the folder it is in. It can be viewed or executed with a simple command. It makes you smarter and more efficient.

I work on lots of little projects and each one has its own nuances and tricks. Context switching from one project to the next is hard on the brain. Some projects are brand new, some are ten years old. Some are in Windows, some are in Linux.

Every time I go to resume work on a project there is that moment of confusion as the brain tries to reload a dusty tape of facts from cold storage.

To make it easier to recall all pertinent facts, I've started putting a little file called ".ok" in each project. This file holds any relevant shell commands I use with that project. (I have a powershell version and a bash version)

For example here's the .ok file from my "Today I Learned" project:

.\quick.ps1; .\deploy.ps1; # quick-build, prepare to deploy
.\build.ps1 # complete build, after which you can see preview
_book\index.html # see preview
.\wordcount.ps1 # custom word count script

If I type the command "ok" then I will see a listing of this file with a number against each line:

> ok
1. .\quick.ps1; .\deploy.ps1; # quick-build, prepare to deploy
2. .\build.ps1 # complete build, after which you can see preview
3. _book\index.html # see preview
4. .\wordcount.ps1 # custom word count script

And if I type "ok 3" then it will run line number 3, like this:

> ok 3
> _book\index.html # see preview

(And in this case I'll see a HTML preview of the current state of the book)

To make "ok" extra useful, I've setup my system so that every time I navigate into any folder (via cd), the command "ok" is run immediately. So if there is a ".ok" file I'll immediately see the available commands. (I did this by removing the "cd" alias, and making a custom "cd" function that does a set-location followed by a call to "ok")

If I want to add a command to the file, it is the work of a moment. I can do it immediately by editing the ".ok" file with "ed" or any standard editor.

Source code is here:

"ok" folder profiles for bash

And here:

"ok" folder profiles for powershell

Sometimes I write a thing and slowly stop using it. Other times I use it more and more, day after day, year after year, as happened with NimbleText. So far, "ok" seems to be one of those "use it more and more" solutions. So I think you would do well to give it a try.

Any issues, lemme know.