Skip to content

Christopher James Willcock

Enjoy Kaizen


traditional long form content: a post with an explicit title and body

More Unfinished



My Keyboard

The daily duo; my keyboard and mouse.

I acquired my Ergodox kit from Massdrop.

I have Colemak at power-on, Qwerty-toggle on the top-outermost index position on each hand, and a third layer, which I seldom use, for the right-hand numpad. It was 5 hours of soldering for an out-of-practice fellow like me. The hundred-and-some SMD diodes should be thrown far into the woods gave me some years back on my technique.

This purchase amounted to 350 USD in 2015.

Once the Ergodox was programmed and in daily use, I found no need to favour sore wrists.

After a short time spent considering how this fit in with my desk, my mouse snuck in between the two halves. There wasn’t room to the right, but that desk-estate in the middle there is lucky.

A larger desk, like my 2016 office desk would be better.

Also five keys for each hand and attached to my chair would be handy closer at hand handsome good for my posture.

I could type in sexagesimal chords.

On second thought, it would be six keys per hand, there being a palm button.

Better yet, palm trackball on the right with palm masher on the left (-click)!

Are you an aficionado of human-machine interaction builds? Post about your keyboard, etc. and mention this post so I can hear about yours.

mf2bench – Parse all the things (with all the parsers)

My Microformats2 parser passed all the tests a short while ago. After that milestone, I was wondering if it’s fast. That needs some context because fast compared to what? All the other Microformats2 parsers. Have they been measured? The answer to that one is: not before now as far as I can tell.

I took a little time to make mf2bench, a benchmarking tool that compares the performance of all (is it all?) the Microformats2 parsers out there. My work on the php-extension, mf2, came in second place in terms of speed, behind the Microformats2-parser for Go. I’m pretty happy with this, because I have been concentrated on coding to pass tests, to demonstrate that the parser meets the living specifications at Making it run fast, or as fast as is fun to make it, is still a little bit away.

I’ll next get mf2bench to provide some measure of what the parse from each parser is for the various samples. That will be neat.


========== UPDATE ==========

The above screenshot uses the default of three (3) parses per parser. It was captured for the sake of taking a picture, rather than of comparison between parsers, etc. Here is the same thing, with one hundred (100) parses per parser.

Versions of each parser tested:

Parser Version
ruby/microformats-ruby 4.1.0
python/mf2py 1.1.2
php/php-mf2 0.4.6
php/php-mf2 (w/ Masterminds\HTML5) 0.4.6 (2.5.0)
php-ext/mf2 unreleased
node/microformats-parser 2.0.1
go/microformats 0.1.26
perl/microformats2 0.5
elixir/microformats2 0.2.1

Quick Fix for Indentation Inconsistency in CSS, Using Chrome Web Browser DevTools

Does your CSS look like this?

@media only screen and (max-width: 720px) {
.planning .grid-wrapper{
  grid-template-columns: 10px 300px 10px;
    justify-content: center;
.planning .tuesday {
grid-column: 2;
grid-row: 1;
background-color: #eee;
    border: 5px solid #555;
padding: 70px;


Did you notice the media query is still open here? This can lead directly to the swamp of desperation, is time-consuming and ever more disheartening as the number of lines adds up and the mental effort to unwind it becomes greater and greater. More CSS, more problems.

Not to worry! There is a super-simple way to fix this up quickly.

  1. Pre-requisite: using Chrome web browser
  2. Right click anywhere on your website.
  3. Choose ‘inspect’ from the context menu.
  4. In DevTools, select the Sources tab.
  5. On the navigation pane, browse to your CSS source file and click to select.
  6. In the reading pane in the center, look for an icon: {} in the bottom left, just under the line numbers. Click it.

Boom! Your CSS source code has been auto-formatted with proper indentation.

  1. Select all the text of the shiny CSS here in the reading pane (Windows users: CTRL+A).
  2. Copy and paste this into your CSS source file.

With this little process, you can hopefully reduce the number of occasions that CSS causes you grief and stay on top of it!

Gallery Test


Time to make a new theme for

I forked my Psymantic theme and made a new theme, Pancakes. I’ll install it here, then make it less ugly. It’s going to break things, but not for long I expect.

Pancakes is also free software, because software wants to be free! Enjoy.

Lastly, a screenshot of what once was, for posterity. Shout out and kudos to David Shanske, the provider of the twentysixteen-indieweb theme I have used until now.

Via Lactea

Like the Milky Way .. sort of?


Sometimes it gets away from you a little bit, and you need to bring it back. But give it a good chunk of time before you CTRL+Z. You never know where you get to.


Super large, finished-for-now: meri.jpg

What Whale?

I like how the digitization and colouring has captured the physicality of the ink on the paper. See how it’s been over-inked?

Full-size sort of thing here: christopherjwillcock-whatwhale.jpg

Tab Quantizer Chrome Extension Beta

I authored and personally use this Tab Quantizer Chrome extension & companion server script, to record my browsing history from Chrome onto my own server. I publish some of the information I gather with this, to my Now page (near the bottom).

  • Keeps a running tab of active Chrome browser tabs across multiple devices and multiple windows.
  • Records a complete history of pageviews with time and URL
  • Records ‘walks’ – the series of pages viewed in a given tab, from the time it first opens, through each pageview until it closes

To make this work you need your own server for the script that records the data. Given that this extension is not coming from the built-in Play store (or whatever it is for Chrome) you’ll need to enable developer mode and load the unpacked extension manually. A consequence of this is after each Chrome update, the extension needs to be manually enabled.

I have been thinking of publishing this to the Play store (or whatever it is for Chrome). I haven’t done that before, so I have much to learn there.

I think all the bugs have been worked out. It works for me. This is my first Chrome extension work. It was made fast and cheap, so there is plenty of room for improvement as far as the code and user-experience goes.

Also there is no documentation whatsoever about using the collected data for some purpose. For now that remains an exercise for the reader.

Enjoy the Beta. Discussion in #indieweb-dev on

an abstract expression in sepia on white

Psymantic – Open Source Theme Precursor for WordPress – First Release

I authored a WordPress theme for my blog. It’s not in use here because it isn’t meant for direct use. It’s over on my wp-theme-dev sub-domain with the WordPress theme test data in there (plus some random junk).

Wait – that looks gross!

— basically everyone

Weird huh? The precursor theme, Psymantic, is concentrated on producing plain old semantic HTML, POSH, and nothing else.

a screen-capture of a brutally simple WordPress blog
It’s brutally simple. Almost no styling at all. WP required stuff and a couple of clearing fixes.

I’m working through a resilient web design approach with this new-theme-for-me. Note the screen-reader-text, which is typically hidden, is used for headings of various sections. Many sections don’t need need a label like that, unless you consider, for example, how you interpret this web page with your eyes closed for the entire duration of your visit. These headings are normally presented only to those who use assistive technologies  while browsing the web. I can hide them all in one shot with the WordPress recommended screen-reader-text CSS rules.

It’s going to be difficult to understand why I have something worth sharing here, if you aren’t directly involved with your own website coding, nor in the business of online publishing in a technical role.

If we were making pancakes instead of WordPress themes, Psymantic would be a box of pancake mix. I still need to make the pancakes to actually eat them (ie: need to mix and cook a theme for my blog). I have a few more goals to cover before I get there, but this is a nice start.

More things to include (maybe in μF Psymantic and Indie Psymantic):

Early testers and constructive dialog/criticism is welcome! Please use GitHub for issues, #indieweb-wordpress on for chat.

HTML5 Support in WordPress

WordPress has a feature to enable HTML5 support which doesn’t cover all the places where HTML5 support is needed.

add_theme_support('html5', array(

This is everything available ^^^. When adding inline styles to the HTML, which WordPress does automatically, there is no filter hook available to remove the type attribute from the style tags. We end up with this incorrect output:

<style type="text/css">…</style>

Allowing this to stay there won’t break anything, it’s very insignificant overall. However, my practice includes the method of no broken windows. Allowing this to stay, though it’s really out of my hands unless I abandon WordPress entirely, is anathema to me.

It’s important to experience the pain of a program done wrong, before we can appreciate the well-made version of the same. There isn’t time to fix everything and still get the job done. Eventually it’s time to directly address the cause, but not today.

What Am I Doing Now?

I made a little page that describes what I am doing now. It’s not what I am working on lately but is what I am doing at this moment, right now. See for yourself.

I decided not to reveal my precise location for privacy reasons. Instead, I show which watershed I am in. When away from home, this will also highlight my nearest community. It’s limited to my home Province of PEI for the moment.

Ex Lacuna or Bust

When I started writing online here again in early June ’18 I had no intention of using WordPress. Some conversation led to me using WordPress to help others that also use WordPress. I raced to the blogging that some others enjoy most and skipped the reading and implementing technical specifications that I enjoy most.

I have been hesitant to write about the details of the coding I do and about the decisions I make while developing software. I feel that very few people I know would enjoy reading that sort of content and therefore I hesitate to spend the time writing it. Instead I simply focus on the coding itself as time allows. Expanding the group of people I know and connecting with those that find these topics interesting was a primary motivator for me in coming back to blogging. Maybe ensuing conversations will make me a better developer and enable me to accomplish more. I like this possibility very much. However, in adopting the perspective of a non-developer using WordPress, I somehow fell into blogging from this perspective too.

Clearly, it’s not that WordPress is affecting me this way and I do not mean to say anything for or against this particular project or any individual that I have been chatting with on this. Rather, I see that by foregoing a journey of self-determination, making and using my own tools, I have rapidly arrived to a completely functional and reasonably well-appointed place which I was not in a hurry to be in. The journey continues to be the interesting thing for me.

I often encounter this mantra: don’t reinvent the wheel. I don’t like that there is no ‘depends on the situation’ disclaimer included there. Yes, in business, the rapidity of reaching the goal is a key quality to consider. I am not so constrained, 24×7.

Consider a farmer. The land is cleared, plowed, and planted. The crop is sown, nurtured, harvested, stored and brought to market. I expect there is more to it as well. I am not a farmer, but I expect a farmer to know these details. Consider now one who sells farm produce. I expect a produce vendor to not have detailed knowledge of farming. A junior produce vendor may hear from the senior vendors, “don’t reinvent the farm.” Makes sense if you are indeed pursuing a career in produce vending. A bit sad if the young person has the soul of a farmer, and stands at a fork in the path, where seeing clearly the farming and vending aspects coalesces to new and synergistic innovation in vendor-farmer systems.

It’s been my good fortune to secure a career which aligns with my lifelong pursuit and passion for systematization in computer programming. At work, I practice a disciplined approach to avoid costs: don’t reinvent the wheel. Outside of work, I pursue the goal of self-empowerment; of complete details as minimum viability. I study minor aspects of complex systems so that I might take personal responsibility for what I may recommend others to use, as components and dependencies. This naturally improves my day-to-day effectiveness. It is time consuming to do so, on my time, as desired!

In all the world of people in vocational specializations, when we go seeking the construction details of some modern, useful artifact, we must eventually find someone who speaks with authority, and does reference clear evidence when the question is asked: what is a wheel? I choose this vocation, software development. I think it reasonable for you to expect me to know the details.

This little funk I’m working through is all too similar to an earlier time, and to an important lesson I learned then – not to attempt to paint a picture of myself, based on what I think other people want to see of me, but instead to be genuine. It’s much easier.

Now back, back, back to knitting my own washcloth.

A little adventure begins here

A Classical MetronomeMetronomes are interesting little devices are they not? All they do is tick and tock, back and forwards, in a steady beat. Well, technically they may be not doing that at any given time while still being a metronome: if they are on the shelf unused at the time or being used as a cudgel or something! But if they do anything other than sit there unmoving, it’s likely they are a-tick-tocking. In the classical metronome, there is an arm extending from a base. A small weight on the arm is adjusted farther up, away from the base to slow the beat or closer down to speed it along. Metronomes have been around for a very long time- records of early attempts at the metronome go back to the 800s1.

I have a soul full of music. Which is to say, there is a mystery in me. I know of it because when I hear a steady tick and tock, I can’t help but add something. It may come as whistle or tap, lyrics or hum. Sometimes a tune springs forth from nowhere, fully-formed and affable! My children surely enjoy it. This has gone on so long now, that even an unmoving metronome has an effect. As I listen very carefully, when the dull roar of a beard growing is not so loud in my head, I can sometimes hear a little thump-a-thump in the chest that reminds me of a metronome. I am a devout listener to this sort of thing, so I tend to feel this productive vibe much of the time.

I have a head full of technology and science. Which is to say, I believe in empirical truths about the nature of the world and my place in it. I am a utilitarian in many things, eschewing novelty in favour of diligence and productivity as a matter of course. My chosen career in software development requires an evidence-based modus operandi2 which I have occasionally applied to the subjective experiences of my daily living. It makes for some interesting Gedankenexperiment3 space, to think for myself about the cultural history of peoples and nations!

I have a little space of my own on the Internet where things I have had in mind from time-to-time are recorded for others to consider in their own quiet moments. Where I can participate in a unique culture like the world has never seen before. There are records of where I have been and what I have accomplished. Yes, it is more or less empty at the time of this writing and it appears I have done nothing whatsoever.

But oh how empty! What a sweet slice of nothing I have. How superbly light and free from cruft; from advertising; from surveillance; from usurpation; from the not-me-ness that is in-your-face in some other places online where we may go together.

Speaking of together, have you heard of the IndieWeb yet? I do recommend you have a look, for yourself.

“There are going to be times when we can’t wait for somebody. Now, you’re either on the bus or off the bus. If you’re on the bus, and you get left behind, then you’ll find it again. If you’re off the bus in the first place — then it won’t make a damn.”Ken Kesey (1968)4

Tick-tock friendly stranger.

  1. Metronome,
  2. Modus operandi,
  3. Gedankenexperiment,
  4. The Electric Kool-Aid Acid Test, Ken Kesey,