Sheepie and scss-helpers v1.0

Cleganebowl has nothing on this hype train:


I have used Sheepie as a testbed, sandbox and ongoing learning exercise for the entire while that I’ve worked in web development. 943 commits is well enough for me to put up draw a line across versions and make a formal release of 1.0. Sure, nothing has changed in practice; the same code was there yesterday and not much has changed beyond a bunch of compatibility changes for Internet Explorer. So what does Sheepie offer?

  • Clean, modern design.
  • Mobile-responsive layout.
  • Lightness, as it was developed for mobile-first situations. There are fewer than one hundred lines of JavaScript used through the theme.
  • Flexbox-based layout with float fallback for Internet Explorer 9.
  • Support for all modern browsers back to Internet Explorer 9 (although your mileage may vary if you depend on Android’s webview).
  • 100% open source codebase.
  • Code markup through highlight.js.
  • Near-compatibility with WordPress’ theme check. There are a few outstanding issues that I need to nix.
  • Integrated lightbox for article images.

There are a bunch of issues I want to tackle in the near future:

  • Archives: I have over 1,800 posts on the blog at this time, and no great way to access them outside of the search.
  • Rich features. This is a learning exercise and I want to add interactivity.



I pushed out the 1.0 release of Sheepie earlier today, and figured why not another release? Just as Sheepie is a sandbox for HTML, PHP and JS, I use scss-helpers to test and learn Sass.

The sexily-named scss-helpers serves as a small Sass library I use to help me build my sites. It features:

  • A dynamic Flexbox grid generator with floated column fallback.
  • Social media and button icon generation from an SVG spritesheet.
  • A set of functions to convert unitless decimal values to rem with px fallback.
  • Library of mixins to shorthand @media query rules.

Court: anticlimactic

See My glorious day at the District Court if you want a recap of my first appearance. It was depressingly mundane: I arrived, I identified myself and then I sat in a hall for three hours before my ninety seconds in front of a judge. Maintenance for Garrett was agreed and I went home to Dublin.

I’m proud of my son

I love my two kids to death, even if I have to do this from halfway around the world and despite adversity. Caira is wild, smart, shy and her own person. She has her birth dad’s wit and grotesque humor, and her mum’s love of the natural world. Garrett is a stubborn sweetheart, full of the Grealish temper. He’s quick to get mad, quick to forgive and a lady’s man by all accounts

Garrett on Facetime

But, you know, I still have to love from halfway around the world. I see little and hear less of either. Sure, I can put down “I’m a loving father” on my life resume, but in practice it is three hours of Skype calls and flurry of birthday cards out of the year. The last time I actually felt like a parent doing parent things was years ago, and the number of facts I can rattle off about either is pitiful.

Caira on Facetime

Okay, enough self-pity (I’ll save it for the court on Tuesday coming).

Garrett turned six on Monday. It was the first birthday since 2011 where I got to wish him a happy one on the day itself. Garrett was super excited oh my god dad about his presents. He showed off his pet tortoise, his toy vacuum cleaner and his giant turtle cake. He introduced me to his baby brother Corbin (not sure; it’s that or Corbett), stuck the phone in Caira’s face, then dropped it in the kitchen and ran off to get his grandma.

At this point I had no idea what the hell was up, until Garrett came back coaxing his grandma to light candles on the cake. Garrett wanted to blow out candles for me while I sang him happy birthday, all of his own doing I think.

That’s the first time in years I’ve felt anything like a parent to Garrett. It’s so hard for me to connect with my kids when I don’t know anything about them or barely see them, so I came away with a happy buzz. I’m deeply proud of Garrett if this was his own doing.

Dumb jQuery menu state plugin

It’s dumb in the savant sense – there’s nothing more complex than a class toggle to hide other menu items when a button is clicked. The state manager links a button a button or hyperlink with a target element. When the button is clicked, classes are added to both the button and the target element. In this way I can control the open and closing of of several menu states with little effort.

I use it for the search on this site, if you care to play around with it live.

$ = function(args) {
    var defaults = {
        child: '',
        childClass: '',
        target: '',
        targetClass: '',
        linkedClass: '.linked-class-toggle',
        isTargetInput: false,
        toggled: false

    var opts = {};

    function clickToggle(event, override) {
        if (typeof override !== 'boolean' && !opts.toggled) {
            // Hide all other linked elements.
            $(opts.linkedClass).not(this).trigger('click', false);

        // opts.toggled can be overriden. Otherwise, just invert it.
        opts.toggled = (typeof override === 'boolean') ? override : !opts.toggled;

        $(opts.child).toggleClass(opts.childClass, opts.toggled);
        $(, opts.toggled);

        if (opts.toggled && opts.isTargetInput) {

    function closeOnEscape(event) {
        // Will /probably/ only work if target has tabindex set.
        if (event.keyCode === 27) {
            $(opts.button).trigger('click', false);

    opts = $.extend({}, defaults, args);
    opts.button = this;

    /* There is a class for all linked elements. On button click all are
     * hidden. */

        .on('click', clickToggle)
        .trigger('click', opts.toggled)

    // Trigger false on escape keyup and window resize.

    $(window).on('keyup', closeOnEscape);

    $(window).on('resize', function() {
        $(opts.button).trigger('click', false);

    return this;

Calling it requires the button selector, child selector, child toggle class, target, target toggle class, and whether or not the target is an input. There is a separate child class selector because of how I style buttons on the site.

    child: '.toggle-icon',
    childClass: 'close',
    target: '#bigsearch',
    targetClass: 'show',
    isTargetInput: true

Pluto, backlit panorama

I have a raging space boner.

Pluto, backlit panorama taken by New Horizons

This is the most gorgeous photograph I have ever seen from space, and for once this isn’t even hyperbole. New Horizons took this panorama fifteen minutes after closest approach to Pluto (source). It was taken at a low, oblique angle backlit by the sun. I’m not a planetary scientist, or any other kind for that matter, but even to my eye the detail is incredible.