i carry your heart with me(i carry it in
my heart)i am never without it(anywhere
i go you go,my dear;and whatever is done
by only me is your doing,my darling)
                                    i fear
no fate(for you are my fate,my sweet)i want
no world(for beautiful you are my world,my true)
and it’s you are whatever a moon has always meant
and whatever a sun will always sing is you
here is the deepest secret nobody knows
(here is the root of the root and the bud of the bud
and the sky of the sky of a tree called life;which grows
higher than soul can hope or mind can hide)
and this is the wonder that’s keeping the stars apart
i carry your heart(i carry it in my heart)

E. E. Cummings © 1952

───  start here

recent comments

sunday, 13 december 2015

a subtle but significant change to this web site.

The home page now shows the most recent articles posted for the various topic threads which comprise this site. Dependent on publication date, not all topic threads will necessarily be represented by their latest journal entry. Regardless, this should now make the home page appear less stale dated.

Surprisingly, despite not having touched the web framework code for quite some time, these changes were simply and cleanly implemented with a dozen lines of Ruby code without too much head scratching. The original design continues to hold up well.

Originally cobbled together with html generating shell scripts in its earliest incarnations as that proof of concept, it morphed into a web framework whose underlying technology became a point of interest – vimwiki with sinatra allowed content to be mapped and reviewed effortlessly in real time.

Starting out initially as a resource for clients, it has grown to include a repository of the knowledge accrued during the creation of the site itself and then some – the WWW being what it is as a meta library of itself. I like the metaphor.

There are still a number of posts to share regarding the tools used along the way to create all this. And broader horizons to return to. There is nothing being sold here. But if you find something of interest, be it metaphysical, technical or otherwise, wonderful.

comment ?

planck constant

tuesday, 18 april 2017

Split Planck with cherry profile keys

the current Planck (keyboard) state as documented on this site and dotfiles. An explanation and history of the keyboard layout iterations can be found here.

change history

since finalizing the ergo wide layout concept with the centre two columns dedicated to modifier chords, tweaks still managed to make their way into the firmware to accommodate the application and desktop workflow.

Little niggles ultimately led to normalizing keys and key relationships between layers to make the layers feel as natural and easy to remember as possible – the mirroring of the left hand key pairs on the number and symbol layers is a prime example. All symbol key layer relationships have undergone a degree of placement rationalization and usage refinement – with emphasis on coding needs.

In chronological order, a very long list of tweaks (whose number must be an indicator of approaching completion!)..

  • the center column pairings of Shift-GUI, Ctrl-GUI and Shift-Alt, Ctrl-Alt changed to Ctrl-Alt, Ctrl-GUI and Shift-Alt, Shift-GUI effectively aligning Alt and GUI modifiers in their own columns, a grouping which better suits the needs of the window manager work flow
  • the number layer Symbol Layer key is moved left one column position and the symbol layer Regex Layer key is similarly moved right one column position and are now toggled with the ring fingers which feel less cramped than their former middle finger assignment
  • the Caps Lock key is now a one shot modifier Shift key (which is double tapped to toggle the Caps Lock), completing the set of one shot modifiers
  • the Function keys have been remapped to match the numeric keypad layout of the number layer, naturally
  • the double tap key pairs of the number layer have been normalized with the symbol layer by swapping their key positions with the outer column modifier keys (used mainly for window manager desktop actions) which, while looking odd, retain a comfortable pinkie-index finger roll
  • the number layer column of one shot modifier keys has been changed to dedicated Alt modifier chords in optimal row positions (for window manager desktop actions)
  • the number layer Symbol Layer and symbol layer Regex Layer keys are now positioned in their most obvious location (how was any other location considered?) – the middle finger home row! – with the Right Angle key now defined as a double tap key
  • added a Shift Navigation cluster layer to the left Shift Layer, completing the quadruplet (Ctrl, Meta, Alt, Shift) of single modifier navigation chords – the thumb Shift avoids the reach required for the centre column one shot modifier Shift key
  • added the same Shift Navigation cluster layer to the Symbol Layer with the firmware to allow switching between shifted and unshifted navigation codes by simply releasing/pressing the Left Shift / Pipe key while the Left / Symbol Layer key is held down, whilst allowing rolling between the Shift and Symbol layers seamlessly without the need to lift both thumbs off their respective keys to switch layers (a mouthful!)
  • dropped the Plover Layer (and other test code) to accommodate the increased size of the latest code base and available flash RAM
  • recovered sufficient RAM space to re-add the Plover Layer by dropping the dedicated Macro Layer (which defined only a single key, the Dynamic Macro key) and aggressively refactoring the custom firmware – the Tri-Layer toggle (using the Number and Symbol layer keys) is replaced with the Backspace / Macro key (now labeled Adjust) to raise the Adjustment Layer and the Dynamic Macro key
  • added the complement of home row one shot modifiers to the Function Key and Shift Navigation cluster layers
  • added the obvious (but overlooked) Shift-Tab to the right Shift Layer


Keyboard layout legend

While the number of Shift, Number and Symbol layers and their overlay layers may appear daunting at first glance, a closer examination reveals a high degree of normalization across the layers and simple shift values for the overlay keys (to reduce unnecessary alternate hand layer toggling) with minimal finger memory impact.

The Shift Layers, in particular, add the convenience of remapping the opposite Shift key and other non-alpha keys to provide surprisingly effective access to other special characters which the wide layout would otherwise seem to prevent.

For programmers, the opposite thumb access to the Minus and Underscore symbols, and the Tilde and Slash keys, make for easy entry of mnemonics and path names, as an example. The keypad and cluster organization applied to other layers similarly requires little time to adapt to with minimal memorization – of course, having arrived at this design is largely a result of my own fingering disposition, pleasant surprises aside.

default colemak layout

Ergo Colemak DH layout

shift layers

Shift overlay layouts

numeric keypad layer

Number layer

symbol navigation layer

Symbol navigation layer

function key layer

Function key layer


Plover layout

adjustment macro layers

Adjustment and macro layers


available memory for flashing on the current board revision is 28K (0x7000). The dozen layers, double tap definitions, dynamic macros and shift navigation left/right layer rollover currently consume 99% of the available RAM! There is little headroom left but always an opportunity to revisit design and code refactoring.

Any significant future enhancements to this base will likely require sacrificing a feature or two. Dynamic macros and double tap definitions would likely the first casualties should I have any other bright ideas..

comment ?