Last updated: February 23, 2017 11:22 AM (All times are UTC.)

February 20, 2017

Everyone running their own business except me probably already knows this. But, three years in, I think I’ve finally actually understood in my own mind the difference between a dividend and a director withdrawal. My accountant, Crunch1 have me record both of them when I take money out of the company, and I didn’t really get why until recently. When I finally got it, I wrote myself a note that I could go back to and read when I get confused again, and I thought I’d publish that here so others can see it too.

(Important note: this is not financial advice. If my understanding here differs from your understanding, trust yourself, or your accountant. I’m also likely glossing over many subtleties, etc, etc. If you think this is downright wrong, I’d be interested in hearing. If you think it’s over-simplified, you’re doubtless correct.)

A dividend is a promise to pay you X money.

A director withdrawal is you taking that money out.

So when a pound comes in, you can create a dividend to say: we’ll pay Stuart 80p.

When you take the money out, you record a director withdrawal of 80p.

Dividends are IOUs. Withdrawals are you cashing the IOU in.

So when the “director’s loan account is overdrawn”, that means: you have recorded dividends of N but have recorded director withdrawals of more than N, i.e., you’ve taken out more than the company wants to pay you. This may be because you are owed the amount you took, and recorded director withdrawals for all that but forgot to do a dividend for it, or because you’ve taken more than you’re allowed.

When creating a new dividend (in Crunch) it will (usefully) say what the maximum dividend you can take is; that should be the maximum takeable while still leaving enough money in the account to pay the tax bill.

In the Pay Yourself dashboard (in Crunch) it’ll say “money owed to Stuart”; that’s money that’s been promised with a dividend but not taken out with a withdrawal. (Note: this may be because you forgot to do a withdrawal for money you’ve taken! In theory it would mean money promised with a dividend but not taken, but maybe you took it and just didn’t do a withdrawal to record that you took it. Check.)

  1. who are really handy, online, and are happy to receive emails in which I ask stupid questions over and over again: if you need an accountant too, this referral link will get us both some money off

February 19, 2017

The Quiet Voice by Stuart Langridge (@sil)

It’s harder to find news these days. On the one hand, there’s news everywhere you turn. Shrieking at you. On the other, we’re each in a bubble. Articles are rushed out to get clicks; everything’s got a political slant in one direction or another. This is not new. But it does feel like it’s getting worse.

It’s being recognised, though. Buzzfeed have just launched a thing called “Outside Your Bubble“, an admirable effort to “give our audience a glimpse at what’s happening outside their own social media spaces”; basically, it’s a list of links to views for and against at the bottom of certain articles. Boris Smus just wrote up an idea to add easily-digestible sparkline graphs to news articles which provide context to the numbers quoted. There have long been services like Channel 4’s FactCheck and AllSides which try to correct errors in published articles or give a balanced view of the news. Matt Kiser’s WTF Just Happened Today tries to summarise, and there are others.

(Aside: I am bloody sure that there’s an xkcd or similar about the idea of the quiet voice, where when someone uses a statistic on telly, the quiet voice says “that’s actually only 2% higher than it was under the last president” or something. But I cannot for the life of me find it. Help.)

So here’s what I’d like.

I want a thing I can install. A browser extension or something. And when I view an article, I get context and viewpoint on it. If the article says “Trump’s approval rating is 38%”, the extension highlights it and says “other sources say it’s 45% (link)” and “here’s a list of other presidents’ approval ratings at this point in their terms” and “here’s a link to an argument on why it’s this number”. When the article says “the UK doesn’t have enough trade negotiators to set up trade deals” there’s a link to an article claiming that that isn’t a problem and explaining why. If it says “NHS wait times are now longer than they’ve ever been” there’s a graph showing what this response times are, and linking to a study showing that NHS funding is dropping faster than response times are. An article saying that X billion is spent on foreign aid gets a note on how much that costs each taxpayer, what proportion of the budget it is, how much people think it is. It provides context, views from outside your bubble, left and right. You get to see what other people think of this and how they contextualise it; you get to see what quoted numbers mean and understand the background. It’s not political one way or the other; it’s like a wise aunt commentator, the quiet voice that says “OK, here’s what this means” so you’re better informed, of how it’s relevant to you and what people outside your bubble think.

Now, here’s why it won’t work.

It won’t work because it’s a hysterical amount of effort and nobody has a motive to do it. It has to be almost instant; there’s little point in brilliantly annotating an article three days after it’s written when everyone’s already read it. It’d be really difficult for it to be non-partisan, and it’d be even more difficult to make people believe it was non-partisan even if it was. There’s no money in it — it’s explicitly not a thing that people go to, but lives on other people’s sites. And there aren’t browser extensions on mobile. The Washington Post offer something like this with their service to annotate Trump’s tweets, but extending it to all news articles everywhere is a huge amount of work. Organisations with a remit to do this sort of thing — the newly-spun-off Open News from Mozilla and the Knight Foundation, say — don’t have the resources to do anything even approaching this. And it’s no good if you have to pay for it. People don’t really want opposing views, thoughts from outside their bubble, graphs and context; that’s what’s caused this thing to need to exist in the first place! So it has to be trivial to add; if you demand money nobody will buy it. So I can’t see how you pay the army of fact checkers and linkers your need to run this. It can’t be crowd sourced; if it were then it wouldn’t be a reliable annotation source, it’d be reddit, which would be disastrous. But it’d be so useful. And once it exists they can produce a thing which generates printable PDF annotations and I can staple them inside my parents copy of the Daily Mail.

February 18, 2017

Postgres contains a wealth of functions that provide information about a database and the objects within. The System Information Functions of the official documention provides a full list. There are a huge number of functions covering a whole host of info from the current database session, privileges, function properties.


Find an objects oid

A lot of the info functions accept the Object Identifier Type for objects in the database. This can be obtained by casting to regclass (also described in the oid docs) then to oid:

select 'schema_name.relation_name'::regclass::oid;

Where relation_name is a table, view, index etc.

View definition

select pg_get_viewdef('schema_name.view_name'::regclass::oid);

Or in psql you can use one of the built in commands:

\d+ schema_name.view_name

Function definition

Returns the function definition for a given function. Many built-in functions don't reveal much due to them not being written in SQL but for those that are you'll get the complete create function statement. For example to view the definition of the PostGIS st_colormap function:

select pg_get_functiondef('st_colormap(raster, integer, text, text)'::regprocedure);


A whole host of functions exist to determine privileges for schemas, tables, functions etc. Some examples:

Determine if the current users can select from a table:

select has_table_privilege('schema_name.relation_name', 'select');

Note: The docs state that "multiple privilege types can be listed separated by commas, in which case the result will be true if any of the listed privileges is held". This means that in order to test a number of privileges it is normally better to test each privilege individually as select has_table_privilege('schema_name.relation_name', 'select,update'); would return t even if only select is supported.

Determine if a user can use a schema:

select has_schema_privilege('schema_name', 'usage');

February 17, 2017

In episode 44 of Cortex, Myke and Grey discussed time tracking. I have a love/hate relationship with time tracking. As an employee, I hated it. It made no sense to track 7.5 hours per day (because who does that much productive work in a day?). But as someone who is self-employed, it makes total sense (and I can see why I was made to do it as an employee).

As Grey says in the episode: if you care about how you’re spending your time, track your time.

Myke and Grey talk about the revelations they had while tracking their time, which match my own:

  • Your brain has no idea how much time you’re spending on stuff. You can’t trust yourself to have any sense of how long it takes to do things.
  • You think you’re working way more than you actually are.
  • You’ll spot patterns. You’ll notice that those busy periods will catch up with you.

It’s worth a listen. And FWIW, I track my time using Freckle.

According to Marcus Sachs, CSO with the North American Electric Reliability Corporation, doomsday fears of a cyberattack against the U.S. electric grid are overblown. Source: Infrastructure Security Squirrels, Not Hackers, Pose Biggest Threat to Electric Grid

(Read more...)

February 15, 2017

A RSA Conference panel tackles the difficulty in defining cyberwar. Source: Infrastructure Security Setting Expectations Between States on Cyberwar

(Read more...)

February 14, 2017

Having run a digital agency for over 10 years, the one thing I do know about is the importance of a good team (especially when you can’t design or develop a website yourself!). It is essential that we all stay passionate, motivated and on top of our game at Substrakt, otherwise quality suffers, the enjoyment […]

February 13, 2017

We always like to shout about our customer success, and we are pleased to announce that on Friday night at the Edgbaston Cricket Ground, Arun Luther of Genesis Innovations picked up the 2017 Signature Award for Excellence in Finance. The Signature Awards celebrate the best in those involved in the wealth creation process and with a […]

(Read more...)

A sudden wave of attacks against insecure databases resulting in ransom demands points to wave of data hijacking attacks. Source: Cloud Security Open Databases a Juicy Extortion Target

(Read more...)

February 10, 2017

Bootstrapping Perl by Alastair McGowan-Douglas (@Altreus)

This blog post shows a simple, hands-off, automated way to get yourself a Perl environment in user land. If you already know enough about all of this to do it the hard way, and you prefer that, then this post is not aimed at you.

Here's what we are going to achieve:

  • Set up a Perl 5.24 installation
  • Set up your environment so you can install modules
  • Set up your project so you can install its dependencies

These are the things people seem to struggle with a lot, and the instructions are piecemeal all over the internet. Here they are all standing in a row.

Perlbrew your Perl 5.24

As this blog post becomes older, that number will get bigger, so make sure to alter it if you copy this from the future.

Do this as root:


apt-get install perlbrew


fetch -o- | sh

Whatever else

curl -L | bash


Haha, yeah, right.

Once you've installed perlbrew, log out of root and init it as your user. Then install a perl. This will take a while.

perlbrew init
perlbrew install perl-5.24.0

There, you now have a Perl 5.24.0 installation in your home folder. which perl will still say /usr/bin/perl so you can change that:

perlbrew switch perl-5.24.0

It will have already told you that you need to alter your .bashrc or suchlike, with something like this:

source $HOME/perl5/perlbrew/etc/bashrc

You should do that.

Perlbrew does other stuff - see for details.


You want to be able to install modules against your new perl.

You will have to reinstall modules under every perl you have if you want to use the same modules under different versions. This is because of reasons.1

perlbrew install-cpanm

Now you can use cpanm to install modules. If you install a new Perl with perlbrew, you will have to

perlbrew switch $your_new_perl
perlbrew install-cpanm

All over again. If you're dealing with multiple Perl versions for a reason, you've probably already read the docs enough that you know which commands to use.


A cpanfile is a file in your project that lists the dependencies it requires. The purpose of this file is for when you are developing a project, and thus you haven't actually installed it. It looks like this.

requires "Moose";
requires "DBIx::Class" => "0.082840";
requires "perl" => "5.24";

test_requires "Test::More";

You use it like this

cpanm --installdeps .

The . refers to the current directory, of course, so you run this from a place that has a cpanfile in it.

The full syntax is on CPAN.

Purpose of cpanfile

A "project" here refers to basically anything you might put on CPAN - a distribution. It might be a module, or just some scripts, or a whole suite of both of those things.

The point is it's a unit, and it has dependencies, and you can't run the code without satisfying those dependencies.

If you install this distribution with cpanm then it will automatically install the dependencies because the author set up the makefile correctly so that cpanm knew what the dependencies were. cpanm also puts the modules in $PERL5LIB and the scripts in $PATH so that you can use them.

If you have the source code, either you are the author, or at least you're a contributor; you don't want to run the makefile just to install the dependencies, because this will install the development version of the module too. Nor do you want to require your contributors to install the whole of dzil just to contribute to your module. So, you provide a cpanfile that lists the dependencies they require to run or develop your module or scripts.

1 The primary reason is that every Perl version has a slightly different set of development headers, so any modules written in C will be incompatible. It's too much effort to separate them and disk space is cheap; so we just keep separate libraries and avoid the problem.

February 09, 2017

My Halloween box isn't four months late, it's eight months early

Back in September 2016, inspired a bunch of cool looking projects I found on Instructables, along with access to a laser cutter, and some stock art, I decided to fully embrace this whole maker thing by making a project of my own.

The art on the front is based on a stock image of a silhouetted monster with a girl. I figured if I were to swap the polarity of the image, so everything other than the monster was a silhouette, it would look really cool to have the monster glow different colours.

If you'll allow me to be all pretentious for just a moment, I always imagined the monster as the girl's imaginary friend. I could go on to talk about his non-existence being represented by the fact he's transparent, and that his changing colour represents his ability to adapt to her needs - but frankly, that's all bollocks. I just figured it would look nice.

Anyway, the only reason this project exists at all is because of community access to the maker equipment at the Barclays Eagle Lab in Birmingham on Friday afternoons. At first, I started playing with their 3D printers and was successful in fabricating a smart watch stand and a tentacle phone holder for my flatmate - although my attempt at printing a Make bot failed.

My Halloween box isn't four months late, it's eight months early

But it was their laser cutter that I was most in awe of. The guy running the lab, Dan, said the laser cutter was quite popular as it's something which let people really explore their creative sides. Sure, 3D printers give a lot more options, but to do anything unique with them (rather than just printing models from Thingiverse) you need to learn 3D modelling software. The laser cutter is far more accessible, however, as it feeds off 2D images, which are a lot easier to produce.

My project consisted of three main parts:

  • An opaque acrylic front panel, with the transparent monster design carved into it.
  • A matrix of multicoloured LEDs to shine through the transparent design.
  • A box to put it all into.

The box turned out to be the easiest part of the project. I was able to design a laser cutter compatible template from MakerCase and convert it into the required coral draw file. The design included a hole in the front through which you'll be able to see the acrylic panel.

I don't think the laser cutter was configured correctly, as it took several passes for the laser to fully penetrate the wood, which resulted in a lot of burn marks on it, but this didn't bother me too much it was going to be painted anyway. Plus, mmmmmmm - burning wood smell.

After throwing a frame clamp set and some wood glue into the mix, I soon assembled five of the six sides of the box. I left the back panel off as this was my access point for inserting the front panel and LEDs.

Talking of LEDs, they're next. Although I had played with Neopixels before, this didn't require anything nearly so complex, so I went for some regular 12v RGB LED strips. I mounted these in a grid on the back panel (a process which required a lot of soldering and hot glue).

The last bit was the acrylic front panel, which turned out to be a massive pain in the arse.

It's made out of a material called TroLase Reverse, so called because:

[It] comprises of a transparent acrylic fascia with a coloured coating on the reverse side. By reverse engraving your image into the coloured layer you expose clear text/image which can either be infilled with your choice of acrylic paint or backlit for an effective contrast.

The first issue I had was obtaining the stuff, which, for one reason or another, took a very long time to arrive in the lab, and is why I've only just finished the project - four months after the original Halloween 2016 deadline.

The second issue was the design itself. As such a large area of the acrylic needed to be etched away, it was impossible to do so without the heat of the laser warping the material. It took three attempts to get something halfway decent, but even then it was still massively warped, and had to sit in my oven for a couple of minutes to flatten out.

Anyway, some further assembly, paint, and glue later, I'm happy to say the project is finished. It's far from perfect, and very obviously produced by someone that was making it up as he went along, but I am proud that I was able to finish it, and seeing as it's something I've never done before, I think it's turned out pretty good.

That said, if I were to do it again (which is something I really would like to do at some point), there are a few things I would change.

In the first instance, I think I'd opt to simply buy a shadow box rather than build my own. Before I started this project, I didn't even know they were a thing, but now I know they exist, I can see myself using them for a lot of projects.

One other thing I'd change is to use a CNC router to fabricate the front panel design, rather than a laser cutter. At this point, I don't even know if that's a realistic prospect, what I do know is whatever awe I once had for laser cutters has been replaced with an awe for CNC routers, and really hope that I can own one one day.

Finally, I think I'd find a way of dispersing the light from the LEDs better. It's very obvious there are multiple LEDs behind the acrylic, and I'm finding it quite distracting from the detail of the monster design. Maybe some strategically placed tissue paper would do the job?

Anyway, as much as I would like to provide a full visual history of the build, I'm nowhere near that organised, but I might be able to gather together a gallery of the work in progress images that I sent to my friends over the past 6 months. Watch this space.

I’ve been eagerly awaiting the release of AirPods since they were announced in September last year. Mine finally arrived after ordering in late December.

Here are my initial thoughts after just over a days use:

  • The charging case is great. It fits nicely in a trouser or jacket pocket. The “click” of the magnetic lid closing is incredibly satisfying, as is the way the AirPods slide in to the case.
  • Syncing to my iPhone took seconds. It was the perfect first-use experience. Open packaging, remove AirPods from charging case, click Connect on my iPhone, start using them.
  • They fit snuggly in my ears. AirPods are the same shape as EarPods, so if EarPods fit you, these will too.
  • They haven’t fallen out of my ears yet (although that’s with light use: walking, house chores, etc). They sit better than EarPods, I assume because they don’t have the added weight of a cable.
  • They do look a little ridiculous. But I don’t care.
  • Sound quality is noticeably better than EarPods. Good enough for casual listening and podcasts. Yes, audio nerds, I know there are better sounding headphones for the price point.
  • Recharging the AirPods in the case is quick. 10 minutes and they’ve got another few hours of use.
  • The range is surprisingly good. I can have my phone charging at the opposite end of the house, although it does occasionally stutter at this distance.
  • The lack of volume control and skip buttons is annoying, but not reason enough for me to stop using them.
  • And the biggest weakness: Siri. Double tapping on an ear bud will invoke Siri, but Siri is still slower and less accurate than many of its competitors.

February 08, 2017

Noted by Marc Jenkins (@marcjenkins)

There’s a whole bunch of stuff – thoughts, ideas, links, quotes, etc. – that I don’t publish. I’ve created, without realising it, expectations for what I deem to be a worthy post. An idea has to be fully-formed before it gets published. Which is just daft.

So, in order to share stuff I wouldn’t normally, I’ve created a new section I’ve ingeniously named “Notes”.

Those expectations no longer apply. I now have a place to share thoughts (that’s not Twitter), no matter how short, silly, or trivial they are.

Used on 72% of all websites, it’s pretty safe to assume that most web developers will run into JavaScript from time to time. Albeit, in a variety of different shapes and sizes, such as jQuery, React, Vue.js or AngularJS, there’s no avoiding it. Yet, somehow, I did. I was a professional LAMP developer for seven […]

Full Stack by Graham Lee

A full-stack software engineer is someone who is comfortable working at any layer, from code and systems through team members to customers.

February 06, 2017

A recent batch of vulnerabilities in Honeywell building automation system software epitomize the lingering security issues around SCADA and industrial control systems. Source: Infrastructure Security ICS, SCADA Security Woes Linger On

(Read more...)

A recent batch of vulnerabilities in Honeywell building automation system software epitomize the linger security issues around SCADA and industrial control systems. Source: Infrastructure Security ICS, SCADA Security Woes Linger On

(Read more...)

FOSDEM by Graham Lee

My current record of FOSDEM attendance sees me there once per decade: my first visit was in 2007 and I’m having breakfast in my hotel at the end of my second trip. I should probably get here more often.

Unlike a lot of the corporate conferences I’ve been to in other fields, FOSDEM is completely free and completely organised by its community. An interesting effect of this is that whole there’s no explicit corporate presence, you’ll see companies represented if they actually support free and open source software as much as they claim. Red Hat doesn’t have a stand, but pick up business cards from the folks at CentOS, Fedora, GNOME, ManageIQ…

When it comes to free software, I’m a jack of many trades and a master of none. I have drive-by commits in a few different projects including FreeBSD and clang, and recently launched the GNUstep developer guide to add some necessary documentation, but am an expert nowhere.

That makes FOSDEM an exciting selection box of new things to learn, many of which I know nothing or little about. That’s a great situation to be in; it’s also unsurprising that I know so little as I’ve only been working with free software (indeed, any software) for a little over a decade.

February 05, 2017

Coercion over configuration.

February 04, 2017

There was no need to build a package management system since CPAN, and yet npm is the best.
Wait, what?

Every time a new programming language or framework is released, people seem to decide that:

  1. It needs its own package manager.

  2. Simple algorithms need to be rewritten from scratch in “pure” $language/framework and distributed as packages in this package manager.

This is not actually true. Many programming languages – particularly many of the trendy ones – have a way to call C functions, and a way to expose their own routines as C functions. Even C++ has this feature. This means that you don’t need any new packaging system, if you can deploy packages that expose C functions (whatever the implementation language) then you can use existing code, and you don’t need to rewrite everything.

So there hasn’t been a need for a packaging system since at least CPAN, maybe earlier.

On the other hand, npm is the best packaging system ever because people actually consume existing code with it. It’s huge, there are tons of libraries, and so people actually think about whether this thing they’re doing needs new code or the adoption of existing code. It’s the realisation of the OO dream, in which folks like Brad Cox said we’d have data sheets of available components and we’d pull the components we need and bind them together in our applications.

Developers who use npm are just gluing components together into applications, and that’s great for software.

February 03, 2017

Email is critical. Learn how to protect email with simple, and old hat, methods in tandem with Exchange Online for email continuity & email disaster recovery. I’m not sure if it’s just me, but there does seem to be an incessant whine regarding the demise of email. Usually from some thought leader or other, who quite […]

(Read more...)

HaCkeD by SA3D HaCk3D HaCkeD By SA3D HaCk3D Long Live to peshmarga KurDish HaCk3rS WaS Here fucked FUCK ISIS !

Keeping focussed by Ryan Dean-Corke (@RyanDC)

For all my years of working for companies, I’ve never found focussing on a task an issue. Other than those rare exceptions when you’ve got something impactful on your mind, I’ve always found it easy to work through a list of items (given or self-defined), happy with the satisfaction of  just doing my job well and getting things done.

However, whenever I was working on a side-project in the evenings or weekends, I was often distracted by any number of things which popped into my mind. Of course, because this was my own time it was completely acceptable (I rationalised), and I was free to do whatever I felt like (albeit at the cost of productivity).

So when I began working for myself, I was suddenly faced with being less productive and focussed on what I was trying to do. Initially everything was fine as the novelty of working for myself was still fresh and I was full of enthusiasm, but after 4 months it became a little more difficult to change my mindset and be more disciplined.

I considered a few ideas as to why it was easier for me to focus in an employment environment:

  • Fear of disappointing the team.
  • High expectations of my work.
  • Being watched by management (Only relevant to a more corporate environment)
  • Having set work hours, meaning a fixed amount of time to get something completed.

So while some of the above does apply to me working for myself, a few things don’t. Mainly not having fixed hours, means I feel I can allow myself to be distracted knowing I can make up the time… resulting in working longer hours at a lower working efficiency. For me though, the big change was the lack of team members, and the fear of disappointing them by slacking off or producing less than I perhaps should (or could).


The solution

Whilst searching for freelancers with similar experiences, I found the time management method the Pomodoro Technique. It’s changed the way I work forever and has led to a greater feeling of accomplishment at the end of a day or task. By breaking work and tasks into smaller chunks of time, along with guaranteed small break periods, it’s easier to control the urges and distractions knowing you’ll get to do whatever you want, guilt free, at some point soon.

There are six steps in the technique:

  1. Decide on the task to be done.
  2. Set the pomodoro timer for 25 minutes.
  3. Work on the task until the timer rings. If a distraction pops into your head, write it down, but immediately get back on task.
  4. After the timer rings, put a checkmark on a piece of paper.
  5. If you have fewer than four checkmarks, take a short break (3–5 minutes), then go to step 2.
  6. After four pomodoros, take a longer break (15–30 minutes), reset your checkmark count to zero, then go to step 1.

A more modern interpretation:

After discovering the technique I quickly found an iOS app which would serve as my time and record keeper. Focus Keeper was my app of choice, although there are plenty of alternatives available. It’s incredibly simple as an app, essentially being an automatic timer, and session counter.

But whilst it’s simple, having the red faced timer screen on my desk keeps me incredibly focussed, as if it was a gun held to my head. Then once the work timer ticks down and screen turns green and meows (you can customise the colours… and sounds), I’m free for 5 minutes. In this time I may indulge some of the distractions which came into my mind, but often I’ll just get up from my desk and have a short wander, or maybe a few push-ups. Importantly, it has the added benefit of taking my body and mind away from the work area for brief times throughout the day, which leaves me feeling less exhausted and fatigued at the end of the day.

Pobodies nerfect

So whilst I swear by it, I don’t always use Focus Keeper, and when I don’t I notice myself loosing focus a lot more frequently. It’s as if the boss has phoned in to say he’s not coming into the studio today… (JKs, obvs).  I didn’t use it to write this blog for example, and whilst doing so I was distracted by the following impulses and tasks:

  1. Checking Twitter (I’m not sure why, as always…).
  2. Googling something about the game Dishonored 2.
  3. Writing a quick email to a client.
  4. Making myself a drink.
  5. Visit
  6. Check a couple of stock prices.
  7. More email checks.


What do you do?

I can’t recommend the Pomodoro technique enough, but what keeps you focussed whilst working, either at work or alone? Is there another technique or tip I should be trying? Get on Twitter and reply to me @ryandc with any ideas and opinions, as I’d jump at any opportunity to become even more efficient with my time

The post Keeping focussed appeared first on RDC.

Here are a few useful bits of design related inspiration and toolage I’ve found over the past few weeks. reMarkable: e-Ink tablet & pen This caught my eye due to the fact that I swapped sketch books for an iPad pro and Apple Pencil a year ago. This promises to be a lightweight, longer lasting version […]
I get asked for ‘examples of good briefs’ a lot so I thought it might be useful if we did a quick rundown on what we, as an agency, think goes into a good/useful/successful brief/rfp document. I’ve been on both ends of this process having lead digital procurement at arts organisations, universities and charities, advised […]

January 30, 2017

Niobium by Stuart Langridge (@sil)

[41 is] the smallest integer whose reciprocal has a 5-digit repetend. That is a consequence of the fact that 41 is a factor of 99999. — Wikipedia

I don’t understand a lot of things, these days. I don’t understand what a 5-digit repetend is, or why 41 being a factor of 99999 has to do with anything. I don’t understand how much all this has changed in the last thirteen years of posts. I don’t understand when building web stuff got hard. I don’t understand why I can’t find anyone who sells wall lights that look nice without charging a hundred notes for each one, which is a bit steep when you need six. I don’t understand why I can’t get thinner and still eat as many sandwiches as I want. I don’t understand an awful lot of why the world suddenly became a terrible, frightening, mean-spirited, mocking, vitriolic place. And most of what I do understand about that, I hate.

We all sorta thought that we were moving forward; there was less hatred of the Other, fewer knives out, not as much fear and spite as there used to be. And it turns out that it wasn’t gone; it was just suppressed, building up and up underneath the volcano cap until the bad guys realised that there’s nothing actually stopping them doing terrible things and there’s nothing anyone can do about it. So the Tories moved from daring to talk about shutting down the NHS to actually doing it and nobody said anything. Or, more accurately, a bunch of people said things and it didn’t make any difference. Trump starts restricting immigration and targeting Muslims directly and puts a Nazi adviser on the National Security Council and nobody said anything. Or, more accurately, a bunch of people said things and it didn’t make any difference. I don’t want to give in to hatred — it leads to the Dark Side — and so I don’t want to hate them for doing this. But I do hate that I have to fight to avoid it. I hate that I feel so helpless. I hate that the only way I know to fight back is to actually fight — to become them. I hate that they turn everyone into malign, terrible copies of themselves. I hate that they don’t understand. I hate that I don’t understand. I hate that I just hate all the time now.

I’m forty-one. Apparently, according to Wikipedia, the US Navy Fleet Ballistic Missile nuclear submarines from the George Washington, Ethan Allen, Lafayette, James Madison, and Benjamin Franklin classes were nicknamed “41 for Freedom“. 41 for freedom. Maybe that’s not a bad motto for me, being 41. Do more for freedom. My freedom, my family’s freedom, my friends’ freedom, my city’s freedom, people I’ve never met and never will’s freedom. None of us are free if one of us is chained, and if you don’t say it’s wrong then that says it right.

Two photos from today.

Niamh and a message board saying that she loves me lots

Anti-Trump protest in Victoria Square, 30th January 2017

One is of Niamh, and her present to me for my birthday: a light box like the ones you get outside cinemas and churches and fast food places and we can put messages for one another on it. I’m hugely pleased with it. The other is of today’s anti-Trump demo in Victoria Square, at which Reverend David Butterworth, of the Methodist Church, said: “Whatever we can do to make this a more peaceful city and a more inclusive city, and to stand up and be counted, we must and should do it together. The only way that Donald Trump will win is if the good people of Birmingham, and of other cities that we’re twinned with like Chicago, stay silent.” People standing up, and a demonstration of what they’re standing up for. Not a bad way to start making me being 41 for freedom, perhaps.

Happy birthday to me. And for those of you less lucky than me today: I hope we can help.

What I've been up to by Daniel Hollands (Maker) (@limeblast)

What I've been up to

It's been a while since my last post, so I wanted to spend a moment talking about what I've been up to.

In the first instance, I should probably talk about my progress in the book. Basically, I got to a point where it was becoming difficult to complete the projects without spending ever more money on things which would only ever serve the purpose of the book - that is, beyond constructing whatever gizmo the chapter asked for, and learning the small nugget of knowledge as a result, it was becoming difficult to justify the cost.

While I love the idea of the book, and really do want to complete the projects with it, it's becoming more and more evident that its focus is on scavaging components and survival in such a fictional universe (which, to be fair, is exactly what it says on the tin), but was starting to run contrary to the experience I wanted. This isn't the end of the story so far as this aspect of this blog is concerned, but completing the book may take longer than I initially expected.

Instead, I've been focusing on improving my non-zombie apocalypse maker skills.

This started off with a focus on my electronics knowledge, which I decided to enhance via two electronics courses I found: Electronic Interfaces (EE40LX) and Pirate Electronics.

Alas, these have both been put on the back burner, the first because it was WAY above my level of knowledge (basically, it was aimed at physics postgraduates), and the second because it was slightly above my level. I don't think I'm ever going to understand the content in the first, but with a bit more experience and electronics knowledge from other sources, I think I'll be able to complete the second.

To this end, I'm currently half way through the Electronics class over at Instructables. Now, this is really good (although it's also turning out to be quite expensive buying all the materials and tools needed to complete the projects within it), it's really taking me out of my comfort zone, and I'm forcing me to learn new things. I'm going to make a couple of posts about this as they become relevant.

Also over at Instructables, I completed the Arduino class. This let me build an infinity mirror, something I've wanted to do for a long time.

Uumm, that's about it, for now.

While email remains the primary method of communication between users, many users and companies are experimenting or committing to alternative means such as Slack or Google Hangouts. While these methods have additional benefits and limitations, Skype for Business is favoured by larger firms due to the focus on security, manageability and reliability. “When it comes […]

(Read more...)

January 26, 2017

I go to my fair share of conferences and have noticed that all of the best and most useful things are said in the coffee breaks, in the bar or…basically anywhere outside of the main, organised programme. Alongside this I’ve long lamented the, often ridiculous, range of digital things that people in arts organisations are […]

We all sorta thought by Stuart Langridge (@sil)

A thing I wrote today, about Trump and Brexit and “post-truth” and “alternative facts” and helplessness, because I’ve had this conversation separately three times today.

this is the thing. We all sorta thought (and by “we” I mean everyone from us here right back to, I dunno, Newton and Boyle) that if we provided inductive or deductive proof of a thing, that everyone else would say “oh yeah, I’m convinced now!” and that’d be it. But people who don’t want that to happen have learned that attacking the evidence doesn’t work — it took them a few hundred years to learn that, but they did — but dismissing the whole idea as illegitimate does work. And we don’t know how to argue against that. I say two and two are four; you disagree; I say “no look here’s the proof”; you say “your methods of proof are wrong and biased”; and then I’m all, er, I don’t know what to say now, you were meant to be convinced by the proof.

more importantly: a third party, looking at that conversation, goes away thinking “well, is 2+2 equal to 4? Don’t know; there seem to be two sides to that argument”, or worse, “man, I just don’t care what 2+2 is because every time I try to find out there’s just loads of shouting, so I’ll stop asking”.

and thus, modern politics. Gaslighting and obfuscation, designed to make people believe that facts are disputable and that engagement is confusing and annoying.

(Of course, part of the problem here is that our side have a habit of declaring things to be an actual fact when they’re really “what we want to believe”, and once one’s cried wolf that way a few times, one’s credibility is gone and it’s really hard to get back. It’s not all the other side’s fault.)

Normally I wouldn’t re-post such a thing, but of course this conversation happened on Slack, which means that six months from now I won’t be able to link to this because it’ll be over 10,000 messages ago and Slack will be holding it to ransom until we pay money, and five years from now I won’t be able to link to it because Slack will have gone bust or have been sold to someone and shut down.

January 25, 2017

ICS-CERT warns of default credentials in Schneider Electric Wonderware Historian that can be abused to compromise Historian databases. Source: Infrastructure Security Default Credentials Found in Schneider Electric Wonderware Historian

(Read more...)

January 24, 2017

Chatbots dominated new tech last year but what are they and how can an organisation start to think about making use of them? Anatomy of a Chatbot Modern chatbots are enabling natural language, either by voice or text, in the home – allowing users to retrieve information or perform transactions often made accessible by apps and […]

January 23, 2017

In which the quantity 1/"booleans per module" is proposed as a software quality metric, and readers are left hanging.

January 21, 2017

Mozilla released its first Internet Health Report, examining the dangers of over-sharing eroding privacy, and the security of connected devices. Source: Infrastructure Security Mozilla’s First Internet Health Report Tackles Security, Privacy

(Read more...)

January 20, 2017

Insecure Hadoop and CouchDB installations are the latest attack targets of cybercriminals who are hijacking and deleting stolen data. Source: Cloud Security Hadoop, CouchDB Next Targets in Wave of Database Attacks

(Read more...)

January 18, 2017

Carbanak has surfaced again with new campaigns using Google hosted services such as Forms and Sheets as command and control channels. Source: Cloud Security Carbanak Using Google Services for Command and Control

(Read more...)

Be Humble by Shaun Finglas (@ShaunFinglas)

Some of the best developers I know treat everyone with mutual respect. Not only this they are open about what they do know and what they don't know. In fact they'll often proclaim I don't know and go about finding out how they can answer your question or solve a particular problem.


A past mentor of mine had a wealth of experience in both the domain and software development itself. In contrast I had no domain experience and very limited practical ability. Despite this gap I was treated as they would treat an equal. No matter how stupid or basic my questions.

However our roles switched one day when I explained about my background in games programming. My mentor decided to have a go, a topic on which he knew nothing. He was both humble and happy to be led and openly admitted his shortcomings. In the end we were able to build a basic game. Here I answered what I considered basic questions, while he gained experience.

Opposite Example

On the other hand some of the worst developers I've worked with are the opposite of the past example.

  • They won't admit they don't know the answer.
  • They won't ask for help.
  • They won't treat others as equals.
  • They won't admit they were wrong.


Software languages, tools and techniques rapidly change. You can't know everything. You can be the expert of one topic one day, and the beginner in another area the next day. Embrace this and learn as you go. Just be humble about it.

  • Admit it when you don't know the answer. Find out if you can.
  • Ask for help.
  • Treat everyone equally, as you would like to be treated yourself.
  • Admit it when you are wrong.

January 17, 2017

Those who work or study network or communications infrastructure will know how difficult it is to remember all the details of all the versions of all the technologies. Fortunately, over at community site Packet Life, they have produced cheat-sheets covering everything from point to point protocols, VOIP, MPLS, to physical terminations. Whether you need to […]

(Read more...)

January 16, 2017

Office 365 pricing is competitive and the first choice for organisations that need a cloud-based suite of productivity and collaboration applications. Of course I’m someone who uses this suite in the office, and almost everywhere in fact. I’m not at all surprised to see so many other organisations choosing Office 365, even if you compare Office 365 […]

(Read more...)

January 15, 2017

You’ve probably already heard about mastermind groups and how great they are. I know I kept hearing about them. So, last year, I started a mastermind group to find out what it was all about. And the verdict?

Being in an active mastermind group – with the right people – is one of the best ways you can invest in yourself and your business.

In this two part blog post, I’ll share what I’ve learnt about mastermind groups. In this post I’ll explain what mastermind groups are, why you should be part of one, and how you might go about starting one. In the next post, I’ll share the format we use in our mastermind group.

Let’s start with the obvious question:

What is a mastermind group?

A mastermind group is a group of like-minded people who share a common goal. They meet (physically or virtually) on a regular basis to discuss what they’re working on and what problems they’re facing.

You could think of it as a circle of professional friends. They might not be people you know to start with but over time you will become friends. You’ll help each move forwards by holding each other accountable and by providing support.

Epictetus, the Greek Stoic philosopher, wrote “the key is to keep company only with people who uplift you, whose presence calls forth your best.” And in a nutshell, that’s what a mastermind group is all about.

Mastermind groups come in all shapes and sizes. I’ve heard of groups ranging from 3 people to as large as 15. Some are held weekly, others monthly. There’s no one format that will work for everyone, so each group will need to experiment to see what works for them.

Why be part of a mastermind group?

Earlier I remarked that mastermind groups are one of the best ways you can invest in yourself and your business. Why is that? Well, here are some of the benefits I’ve found from being in a mastermind group:

An incentive to be more intentional about your business

As freelancers or business owners, it’s all too easy to get caught in the trap of “working in the business, not on the business”. We spend all of our time working for our clients, but very little time looking at the big picture or asking important questions. Regular mastermind meetings are a great way of breaking this habit and encourage you to start working on your business.

Makes you accountable for your actions

During each mastermind meeting, we share the things we want to accomplish by the next meeting. We write down these goals and they’re the first thing we review at the next meeting. You don’t want to be the one missing their goals. It’s a great incentive to not only make sure you’re setting the right goals, but also making time in your schedule to work on them.

A private support group

If I have a difficult situation with a client and I need some advice, or I need some feedback on something I’m working on, my mastermind group is the first place I turn to. It’s far more powerful than asking for advice from people you don’t know in forums or online chats who can only offer generic advice (that may or may not be useful). Over time, your mastermind group will learn more about you, your business, and your goals. They can then offer their own experience and expertise against your current situation.

A place to have deep discussions about your business

While I have lots of friends in the industry, there’s very few people I feel I can chat about the intimate details of my business with. Being able to vent and speak about things on your mind with others who have similar problems is both therapeutic and immensely valuable.

It’s motivating and encouraging

Working for yourself is difficult. We all encounter difficult days or weeks. Sharing small wins with the group can really help you see the bigger picture. Everyone in a mastermind group wants you to succeed and they’ll both help inspire and encourage you. I often come out of our mastermind calls excited about what I need to work next.

Moments of clarity

When you’re in the trenches, it’s hard to see the bigger picture. The path to where you want to be isn’t linear and it’s often hard to know what to work on next. It might be through the entire group brainstorming around a problem you’ve got, or might just be during a private session of exploration, but a mastermind group will help you find moments of clarity. The fog suddenly shifts and the path becomes clear. Sounds dramatic but this happened to me several times last year.

Starting a mastermind group

Sold on mastermind groups? Great. So, how do you become part of one?

You have two options: you can either join an existing mastermind group or start a new one. I took the latter option and started my own, and, unless you know of an existing mastermind group that you’d like to join, that would be my recommendation.

Find the places where the kind of people you want to connect with hang out and go ask. Freelancers Hub, for example, is a group of freelancers on Facebook and would be a great place to find like-minded people. You could also try on forums, Slack groups, or at conferences/meetups.

I tweeted asking if anyone was interested in starting a mastermind group. I had 5 responses and that was it; our group was born. It was that simple, so just go ask.

It’s important, however, that you find the right people. Your mastermind group will only be as strong as your weakest member.

Here are some thoughts on the kind of people you want:

  • Reliable and punctual. You’ll be meeting on a regular basis so you really don’t want anyone that’s flakey and keeps missing meetings.
  • Driven and motivated. The group benefits from positive energy. You want people who are getting things done, because that motivates everyone and helps drive the group forward.
  • Are already in business. You want people who are already running a business and not wanting to start a business. If they’re not yet running a business full-time, they’ll have a different set of problems and priorities.
  • Similar businesses. If one person runs an online store and another runs a brick and mortar shop, there’s a good chance that they won’t have enough overlapping experience to help each other. You’ll want to find others that run similar businesses, so you can share problems and experiences.
  • Diverse skills. You’ll want to find people with diverse skills and interests. The more diverse the skills are within your group, the better the group will be at problem solving, giving feedback, and providing solutions.
  • Make sure it’s the right time for them. A mastermind group isn’t right for every business owner, all of the time. People have personal lives and personal issues. There are times in one’s life when joining a mastermind group isn’t the right thing to do. Make sure they have the time and energy to invest in the group.

You’ll also have to consider how many people you’d like in your mastermind group. I would recommend a minimum of 3 people. Our mastermind group of 4 works well. If one person can’t attend a meeting, there’s still 3 of us. As the group gets larger, you’ll have less time focused on you and your business. I would recommend setting a limit of 5 people – at least in the early days while you get the group started.

Running your first mastermind session

Once you’ve found a group of people to start a mastermind with, schedule your first meeting. Your first meeting will be about setting expectations. Here are some things to consider:

Have a facilitator

One person needs to keep an eye on the clock, keep discussion focused, and move the discussion along when needed. We rotate the facilitation role for each meeting.

Set the group rules

Our own group is very relaxed and we have very few rules. But you do need to make a few things clear. You need to turn up regularly. You need to do a little prep work before each meeting. And it’s important that what’s shared in the mastermind group remains in the mastermind group. To get the most value, you have to be honest and that means sharing sensitive information from time to time. You have to be able to trust those in the group. If you’ve set the group up with people you don’t know, this trust might take a while to establish. Straight forward stuff, but worth making clear.

Have a cooling off period

The only way to know if a mastermind group if right for you is to try it. For that reason, make it easy for people to leave the group if the fit isn’t right. The general rule I have is: make it easy for people to leave, but hard for new members to join.

Find a fixed meeting date

Find a set date that you can meet on that works for everyone in the group (ours is every other Friday at 9:30am). Don’t deviate from that time unless absolutely necessary. Trying to schedule each individual meeting is a nightmare and will lead to missed meeting. Set a time and make sure everyone in the group sees it as a priority on their calendar.

The first meeting agenda

I suggest keeping the first meeting agenda short and sweet. Write up a set of questions and send it to everyone in the group so that they can prepare. Some questions could be:

  • What do you want to get out of the mastermind?
  • What are you working on?
  • What do you need help with?

Wrapping up

I’ve found that being part of a mastermind group is absolutely worth the time and effort it requires. If you’re an independent worker (freelancer, consultant) or running a small business, I really think you’ll get a lot from it. Not only is the insight you’ll get incredibly value, it’s also inspiring to see the behind-the-scenes of others on their journey.

If you have any questions, or if I missed anything, drop me a line at

January 14, 2017

I discovered by searching the interwebs that a significant number of people who try out GNUstep get stuck at the “I wanted to do Objective-C on my Linux so I installed GNUstep…now what?” stage. There are some tutorials for GNUstep around, but they’re not necessarily easy to find, and not necessarily pitched at beginners. Otherwise, you’re told to look at the Cocoa documentation, and as Xcode’s user interface turned into a combine harvester, Apple moved to Swift, and other changes happened, the relevance of Apple’s documentation to GNUstep has been on the wane for years.

Therefore today I’m launching the GNUstep Developer Guide. It’s not yet pretty, it’s not yet complete, but it is a place to look for GNUstep documentation written for GNUstep programmers. The first guide is up: the introduction to ProjectCenter and GORM.

Let me know if you find it useful!

January 12, 2017

This post on semantic versioning reminded me that we’re making a future in which Ubuntu 01.04 will be newer than Ubuntu 99.10.

This is fine.

January 11, 2017

Your tests all pass locally. One test fails in your GitLab CI build. Sound familiar? Of course it does. This is painful work to resolve. You have to make single changes to your GitLab CI build file and push them to your origin one at a time until your builds pass or you give up […]

Most projects have some form of convention. Examples would include:

  • Attributes/Properties for REST API's
  • Inheritance for third party base types
  • Assemblies/Packages for third party code that is loaded dynamically
  • Folder or namespace conventions
  • And many other forms of conventions

In a few of these examples static analysis can detect issues, but the majority of these problems would resolve only at runtime.

A technique I've used in the past to great success is the concept of convention based tests (CBT). These are tests that ensure a particular convention is followed. As a general practice CBT tend to be written after the discovery of a problem as it is preferable to rely upon higher level tests initially. The good news is that CBT ensure that such problems never return and if a convention is broken you'll be notified during your test run.

In terms of quantity there will be a very small number of these tests, and unlike typical tests that focus on behaviour rather than implementation, these tests are focused on implementation.


Tests generally should favour readability and clarity over the removal of duplication. Additionally the use of programming constructs such as loops or conditionals within tests are usually a bad idea. Using reflection is not recommended in most cases though the opposite is true for CBT.

Reflection allows the previous examples to have tests written in a fairly flexible and dynamic manner. Future changes would automatically be tested.

  • Tests to ensure particular types within a namespace have the correct attribute/property applied.
  • Tests to ensure particular types within a namespace have the correct base class.
  • Tests that assemblies/packages required at runtime are present within the bin directory.
  • Tests that folders/namespaces match a team/project naming standard.
  • And so on.

Simpler Tests

In some cases reflection is not a suitable tool for convention based tools. In this scenarios a simpler style of test is required. These are essentially convention based tests that ensure additional tests are written. These simple tests act more as a prompt to the developer reminding them to add a test for a particular convention.

This test would first detect how many types exist within the namespace and then detect how many tests have been written for those types. While this style of test does nothing other than really count the number of expected conventions versus the number of tests, the failure of this test provides a hint to the developer that they have forgotten something.

The key with these simple detection tests is to provide a good failure message that includes details on why the test failed, and more importantly why and how a new test should be added.

These simple CBT work when the use of reflection is difficult. While they may seem primitive, they do provide value as simple reminders to add future tests. Despite this it's worth remembering they provide no guarantee of the quality of the additional tests that are written. Here peer review is required.


  • Add convention based tests if a convention cannot be detected by static analysis or you cannot detect issues with higher level tests.
  • Reflection is a valid tool to write a single CBT that covers many areas.
  • If a CBT is hard to write, use a test to prompt you to add further tests in the future.

January 10, 2017

Remember that the abstractions you built to help you think about problems are there to help. They are not reality, and when you think of them as such they stop helping you, and they hold you back.

You see this problem in the context of software. A programmer creates a software model of a problem, implements a solution in that model, then releases the solution to the modeled problem as a solution to the original problem. Pretty soon, an aspect of the original problem is uncovered that isn’t in the model. Rather than remodeling the problem to encapsulate the new information, though, us programmers will call that an “edge case” that needs special treatment. The solution is now a solution to the model problem, with a little nub expressed as a conditional statement for handling this other case. You do not have to have been working on a project for long before it’s all nubs and no model.

You also see this problem in the context of the development process. Consider the story point, an abstraction that allows comparison of the relative sizes of problems and size of a team in terms of its problem-solving capacity. If you’re like me, you’ve met people who want you deliver more points. You’ve met people who set objectives featuring the number of points delivered. You’ve met people who want to see the earned points accrue on a burn-down. They have allowed the story point to become their reality. It’s not, it’s an abstraction. Stop delivering points, and start solving problems.

I’m sure many of you have noticed the Danish lifestyle trend of hygge, which has slowly crept into our shared consciousness this winter. While there is no direct translation into English, hygge is generally thought to refer to a particular sense of coziness tinged by nostalgia and comfort. Think sheepskin gloves, wood-fires, knitted jumpers, fragrant fresh bread with pumpkin seeds. Whether or not this appeals to you, the collective public appears to […]

(Read more...)

January 09, 2017

The Department of Homeland Security has designated the U.S. voting infrastructure as critical infrastructure. Source: Infrastructure Security US Voting Systems Deemed Critical Infrastructure

(Read more...)

January 08, 2017

The book “NeXTstep Programming Step One: Object-Oriented Applications” by Garfinkel and Mahoney said this about Controllers in 1993:

A good rule of thumb is to place as little code in your controller as necessary. If it is possible to create a second controller that is only used for a particular function, do so – the less complicated you make your application’s objects, the easier they are to debug.

Later, on the same page (p131):

Before you start coding, it’s a good idea to sit down and think about your problem.

Both of these pieces of advice still apply. Neither has been universally internalised 24 years later.

January 07, 2017

I’m going to FOSDEM next month, maybe I’ll see some of you there. This gives me motivation to solve one of the outstanding problems on my laptop: I currently, as has been mentioned here multiple times, use Windows 10 as a bootloader for my GNU/Linux installation. I would rather boot straight into Linux. So I can set myself a milestone: I would prefer, by the time I get to St. Pancras International train station on Friday 3rd Feb, not to have Windows on this laptop any more.

The laptop is a Alienware 15 R3, although weirdly the processor my laptop contains (Core i7-6820HK) is not one of the CPU options listed on the Dell website, so maybe they changed the configuration without updating the model, or had a spare old CPU knocking around when they built my laptop and decided to use that. Anyway, this is computering, so this is fine. You’re not expected to know or care that you don’t have the correct bits in the computer, just that it’s “Late 2016” (even though they still sold the R2 in late 2016, too).

The problems I have seem to fit into one of two categories: either the wi-fi (a Qualcomm Atheros chipset) doesn’t work, or the CPU/motherboard chipset (see above) isn’t supported and all hell breaks loose.

The wireless situation is that the wireless should be fully supported: Qualcomm Atheros integrated the driver into the Linux kernel back in version 3.11-rc1, in July 2013, and supply the firmware binaries. And so it doesn’t work in modern Linux kernels (or doesn’t reliably work, or fails for different reasons).

The chipset situation is that Intel integrated the driver into the Linux kernel back in version 4.3, in November 2015. So it doesn’t reliably work in modern Linux kernels.

I could go into the specific problems I’ve seen and the specific things I’ve tried to work around them, but I won’t. I won’t because well-meaning but unengaged people will ask me infuriatingly basic and irrelevant questions (yes, I have already turned Secure Boot off; no, it doesn’t change the fact that the ath10k module hasn’t loaded), or suggest unjustifiable solutions. The most common is the Distro Pimp: you should try [Debian/Debian testing/Arch/Ubuntu/openSuSE/Fedora/Mint/wait, which one did you say you’d already tried?]. Well that’s nice, but the distribution I tried (that didn’t work) is made of GNU and Linux 4.8, and the distribution you’re suggesting is made of GNU and Linux 4.8, so what specifically is it about your distribution that makes you think it works where this other one doesn’t? Oh, they focus on [stability/cutting edge/purple desktops/compiz effects/bible-reading software] do they? And how does that solve my problem where the kernel doesn’t work, despite being newer than all of the bits I need to have a working kernel?

This is the reality of Linux on the Desktop, the one that computerists say the world is ready for. Of course, it’s also the reality of everything else on the desktop. Something that occasionally happens in my Windows 10 bootloader is that it reboots while I’m using it to install some updates, because I stopped moving the mouse for a couple of minutes between 6pm and 9am (you know, the time when I’m at home, using my home computer). Some colleagues at work use Windows as an actual operating environment, and have things like Skype (made by Microsoft) popping up a notification when they’re presenting in PowerPoint (made by Microsoft). Something that apparently happens to people that have Macs is that the built-in PDF software doesn’t work well and they have to buy somebody else’s PDF software, except that they have to check whether that other PDF software is based on the built-in stuff or is something written by somebody else only they can’t because without the Four Freedoms they don’t have the freedom to study how the program works, and even if they could fix the problem they’re not allowed because they lack the freedom to redistribute and make copies to help their neighbours, or to improve the program so the whole community benefits.

This is fine.

January 05, 2017

On 2 January 2017, I half-heard on Radio 4, ‘The New World. Nothing but the Truth’, presented by Jo Fidgen of the BBC World Service and produced by Gemma Newby. It lasts 45 minutes and is available on BBC iPlayer Radio for 1 year, at, so if you don’t listen to it after reading this, I want a note from a grown-up to explain why.

“Are we really living in a post-truth world?” or is ‘post-truth’ a new label for liberal angst, due to loss of control? It even asked us to consider whether Michael Gove was misrepresented by the media (He was. I’ve seen the transcript.) Sadly, there are a lot of experts in the program, so perhaps you shouldn’t take it as seriously as I want you to. Listen for yourself, in case I can’t be trusted.

It finds that people are not rational in their analysis of facts that challenge their beliefs. They believe The Wrong Thing even harder.

‘Truthiness’ was coined by Stephen Colbert to refer to “what we feel to be true.” Another parody of right-wing politicians, Donald Trump said, “Fact is not always the same as Truth”, though 70% of what he says has been shown not to be true by fact-checkers. People are looking for “a deeper level of truth, their identities”. Trump’s facts are rhetorical tools, not actual information to be taken seriously. He is only President Elect of the USA.

We wear our beliefs as a badge of membership of our group. “We determine the truth by the people and sources we trust. That’s how we know truth.” When faced by ‘an alleged fact’, we decide how we feel about it then look for evidence of how right we are. Educated people are not immune. Numerate people were shown to be better at assessing data but to lose their intellectual advantage when faced with facts related to their political beliefs.

At the end, the programme presented a 10 minute Drill:

  1. Ask the opinion of someone you disagree with and don’t interrupt
  2. Don’t assume they are stupid
  3. Resist forwarding to all you echo chamber buddies that article that proves how right you are
    [ I would add “unless it contains new information, but not without fact checking first” ]
  4. Bear in mind that just because you like the story, doesn’t mean it’s true

What first caught my attention in the programme on first listen was use of the word ‘truthiness’ which the programme has in common with the functional programming language Clojure. Falsiness is ‘nil’ or ‘false’. Truthiness is everything else.

If we imagine ‘nil’ as being a bit like the Scottish legal verdict ‘Unproven’, we should demand higher standards than “You can’t prove I’m lying, yet.” from our politicians.
We need to demand truth, not either value of falsiness.

In hospital statistics, ‘Deaths = 0’ is different to ‘Death data was not measured’. We expect politicians to attempt to try to lead interviewers away from the second option with weasel-words like, “there is no evidence of deaths” and we expect journalists to destroy them whenever they do. Accepting falsiness gives us corrupt politicians and journalists. No politician stands in front of a bus promising £350M per week to spend on the NHS when they known it is not true should have any further input to UK politics. No newspaper calling people who point this out “Remoaners”, to silence them, has any interest in their readers knowing the truth. Resignations are long overdue and it’s almost too late for them to be honourable.


January 04, 2017

Back at the start of 2016 I set about sorting my personal finances out, inspired by Soft Skills. The book makes a point to consider passive income as a viable solution to wealth building. The reason for this is simple, software developers tend to get paid well if working professionally. Like most professionals though, during school or university you won't be guided on how to handle money until you are thrown into the deep end.

Assets and Liabilities

At the start of February we listed all our assets versus liabilities and were rather shocked. Our net worth (assets minus liabilities) was negative. Not only was it negative, it was negative by a rather large number. This scary realisation forced us down the path of personal finance. Most of this knowledge came from a handful of books and took no more than a few months to really get to grips with the basics. For the small cost of a few books and your time the return on this investment is huge. In summary you want to maximize assets (things that give you income) and reduce or eliminate liabilities (things that take your money away) as much as possible.


Despite knowing nothing than the basics of the stock market and investing, investing in stock (sometimes known as equities) is one of the ways to maximise assets. Again a few simple introductory books and some online research was all that was required. Having explored individual stocks, we settled on low cost index funds as our main investment solution. Before we could invest though we had to attack our debt. Without eliminating the debt we were unable to maximize our investments. Paying off debt is also considered a guaranteed return, something you cannot get with investments, hence it should be your first target.


Attacking debt took up the whole of 2016. Thankfully there was an easy system to follow. The difficult part is sticking the course, though you will quickly start to see benefits. The best solution we found is the debt snowball, which is part of Dave Ramsey's Baby Steps. Steps 1-3 must be completed in order, sequentially. While steps 4, 5 and 6 can be completed in parallel.

Baby Steps

  1. Save £1,000 in an emergency fund.
  2. Pay debts down from smallest to largest using the debt snowball method.
  3. Save 3-6 months of living expenses for a fully-funded emergency fund.
  4. Invest 15% of income into retirement.
  5. Start funding higher education for children.
  6. Pay off the mortgage early!
  7. Build wealth and give!

You Need a Budget

I was actually advised to create a stick to a budget by a friend while in university, however I ignored her wise advice. A budget is a crucial tool to paying off debt and in turn staying out of debt. The best budget to use with the baby steps is a zero based budget. In this case you run your personal finances like you would a company such as a bank. At the end of each month (or whenever you receive income) your balance should be fully allocated to equal zero pounds available. All of your money is either paying of debt or working hard in investments, while the rest is allocated to expenses.

A written monthly budget is single handedly the best piece of personal finance I can recommend to others. Once you tell your money where to go, and have a audit trail of where you are spending you have control. How we lived prior to a monthly budget is a mystery, though it does explain the shocking net worth we amassed. To be blunt, get and use a budget. You need to.


Previously I thought of retirement as something you do when you're old. Think of your parents or grandparents. However this is not the case. Retirement is simply being able to do what you want to do, whether or not this includes work. Being able to wake up each day and do what you want is a powerful thing.

Another shock discovery was the fact that becoming financially independent in order to retire can be done in ten years, instead of the traditional thirty of forty year window. A whole community exists that prove this is the case - FIRE (Financially Independent - Retire Early). To summarise this process, instead of doing what the norm do and investing 10% of your income, invest 50%-90% and you can shorten the process dramatically. FIRE is a long term goal that requires minimized expenses and a strict budget, but the pay off will be more than worth it.


Our personal goals for 2017 include completing our six month emergency fund, followed by aggressively paying off our mortgage, with the goal to complete this within two and half years versus the remaining twenty year window. Without the basic concepts above this would have not been possible.


  • Eliminate all debt, and stay out of debt.
  • Create and use a monthly budget.
  • Use the baby steps to get out of debt and build wealth.
  • Low cost index funds are a recommended way of simple investing.
  • Retirement isn't a thirty or forty year process.
  • No one will teach you personal finance, it's up to yourself to get to grips with it.

January 03, 2017

I’ve read a few articles over the last week or so that point to the Mac having lost its shine among developers. There was a time when the first things you did when you wanted to be a developer on the Free Software platform Ruby on Rails were that you bought an Apple PowerBook and the proprietary TextMate editor. There was a time when even Sun’s employees programmed Java on Macs. But now, I read things like this:

Right now, the only real option Apple has offered [vocal developer supporters] is the iMacs, which seems to be their answer for high end machines. That may work for some, even thought it won’t be their first preference for many. It’s clearly left many disgruntled and some thinking of jumping ship to other manufacturers, either running Linux or Windows. Source: Apple’s 2016 in review

Apple’s review process for [Safari browser] extensions is disorganized, arduous and quite frankly insulting Source: What Apple gives you for $100 as a Safari Extension Developer

the current state of the Mac has me considering whether it’s still the right platform for me. Source: Finding an Alternative to Mac OS X

It seems like Apple has either lost its way, that it has lost touch with what (some of) its customers want, or that it simply doesn’t care about those customers. Developers are a captive audience, and creative professionals can switch to Windows, I guess. Apple no longer considers them core. Source: New MacBook Pros and the State of the Mac

For me the sheen was long-gone back in November 2014, and in January 2015 I posted about switching (back) to Linux. That was around the last time the blogosphere was telling us all that Apple had lost their way – funny how these badly-run companies manage to sell more of their shit than their competitors for years on end, non? Anyway, it was the popularity of the meme that led me to post, but my story about falling out of love with their treatment of Free Software and the make-work associated with being in their developer programs which you can read about in that post is personal to me.

There’s a problem, though, and that problem is consistency. NeXTSTEP, more or less, can be summarised as “let’s make an Alto, but compromise on using technology that already exists”. So you get your Alto technology like OOP and ethernet and laser printers, but you also get the compromises – Display PostScript, UNIX, GNU, and C. There’s one system to learn (Objective-C and the various object “kits”), and then a few subsystems (UNIX and GNU, Mach, NetInfo, DPS) that make themselves known if you dig in.

Mac OS X is less of a NeXTSTEP than NeXTSTEP, but the romance of consistency still exists. I can tell myself, partly because it’s true but also because I invested over a decade of my life in working around the flaws in the model, that OS X is still Objective-C and kits with a wider selection of kits (Core Data, GameKit, PDFKit etc) and a few more compromises.

You definitely can’t say that of Linux, particularly as a developer. The application my group works on now is written in Qt, which is itself a nice framework (Qt with its meta-object compiler is to C++ as Objective-C is to C, in a way that GTK+ is not), that for the most part just sits on top of Linux (and other platforms) as a Qt application. The problem is, when you want to do something that isn’t in Qt’s equivalent of the app kit, you may not only have to choose one of a few different alternative technologies but actually choose all of them if your users might not all have chosen the same one.

Even on my own laptop that’s true. It is…well, for reasons that I just haven’t put the effort into solving, it’s actually running Ubuntu 16.10 in VirtualBox in Windows 10 (whomp!), but what I see is that it’s running Ubuntu 16.04. Now I could, and do, use GNUstep as an application development environment, and get my Objective-C and kits running on something like Unix just as I’m used to. But that inconsistency is always there, always at the forefront, always chipping away. Because the window manager does not use the Objective-C runtime, and uses weird X things to communicate with processes rather than Objective-C messages. The browser is Firefox, because while there is a GNUstep browser, it’s not very good (mostly because its WebKit is not up to date, but then WebKit is itself not Objective-C either). My Linux uses systemd to start processes, your Linux uses rc files/init files/upstart. My GNUstep is drawing with Cairo, yours is drawing with X intrinsics.

There’s a problem with that problem, though, and it’s that the consistency of Mac OS X is a fiction.

Are Dashboard widgets made out of JavaScript because of a compromise, or an aborted change of direction? Is the lack of consistency between the same API’s names for things in Swift and in Objective-C a cognitive overload that’s worth carrying around? Do I ignore the funky dialect of C++ that drivers are written in (I have written IOKit drivers and edited a book on the technology, so this isn’t a hypothetical concern)? While some ObjC APIs use message-sending and others use block callbacks, am I right to call them both the same thing? Does this process communicate with that process using XPC, Mach IPC, UNIX pipes, sockets, signals, or distributed notifications?

The romance turns out to be based on a lie, but on a powerful and compelling lie that’s easy to believe, and easy to miss even if you’re unsure whether it ever existed.

Confidential documents and data belonging to users were accessible via search engine queries. has “fixed” the issue. Source: Cloud Security Plugs Account Data Leakage Flaw

(Read more...)

Change Time by Andy Wootton (@WooTube)

After some time trying to think about almost nothing, the last 24 hours have been an alarm call. As others come out of hibernation too, they post interesting stuff and Radio 4 provoked me with a discussion on facts and truth. Now Marc Cooper is at it, with difficult  links about computation and I’m all on Edge
Before I read about “discrete tensor networks”, I need to write down my own ideas about time, so I will know in the future what I thought, before my mind was changed.

I am ill-equipped for this task, having only 1 term of university maths to my name so I intend to talk in vague, abstract terms that are hard to argue with.

Much of physics is very dependent on Time, like almost all of computer science and business management theory. You can’t have change without time, it seems. Einstein talked about space-time, mostly in the language of mathematics. I can just about order a beer in math(s) but I can’t hold a whole conversation. I know what the first 3 dimensions are: left-right, up-down and back-forward. My personal model of the 4th dimension is that same space in continuous state-change through time. There are a few things I’m not happy about:

  • There is no evidence that time is either continuous or constant.
  • We only have evidence of time being a one-way dimension.
  • What the heck does ‘continous state-change’ mean? Is state a particle or a wave? Make your mind up, physics!
  • There’s that troubling many-worlds interpretation of the universal ‘WAVE’function (which I don’t understand either) which says that everything that might have happened did, in other universes. I don’t like this. Yes, that’s my entire justification – I don’t like the conclusion of a thought process I don’t even understand. It doesn’t feel right.

I’ve been learning about the functional programming language Clojure which does not ‘mutate (change) state’. It doesn’t have ‘variables’ like the more common imperative languages such as FORTRAN, BASIC, C, Java or Python. In Clojure, data flows through functions and is transformed from one form to another on the way. It is basically magic. In a pure functional program, no state is changed. State-change is called a “side-effect”. Sadly, side-effects are required to make a program do anything useful in the real world. Arguably, the purest magic is encapsulated in the world of mathematics and the physical world is a messy place that breaks things.

Clojure models time. It does not model the real world by replacing the current value in a variable and throwing the old value away but by chaining a new value onto the end of a list of all previous values.

Now let us extend this idea ‘slightly’ in a small thought-experiment, to a 3-D network of every particle state in the universe.

Space-time now has 2 regions:

  1. The past – all historic states of those particles as a theoretical chain of events
  2. The future – all possible future states of the universe; effectively an infinity of all possible future universes that could exist, starting from now.

Which brings us to what I mean by ‘now’ – a moving wave at the interface between the past and the future, annihilating possible future universes. Time becomes a consequence of the computation of the next set of states and the reason for it being a one-way street becomes obvious: the universe burned its bridges. Unless the universe kept a list, or we do, the past has gone. Time doesn’t need to be constant in different parts of the universe, unless the universe state ticks are synchronous but it seems likely to be resistant to discontinuities in the moving surface. I imagine a fishing net, pulled by current events.

It’s just an idea. Maybe you can’t have Time without change.

[ Please tell me if this isn’t an original idea, as I’m not very well read.
I made it up myself but I’m probably not the first. ]

In Resolution: Subscribe Self I said I’d share my list of feeds. The nice thing to do would be to document a blog roll detailing why I subscribe to each blog, but for the moment here’s an OPML file you can import into your reader, and consider the feeds you find therein.

January 02, 2017

2017: Fighting back by Andy Wootton (@WooTube)

2016 was an excellent year for the progress of Evil. It’s time for those of us who believe there ‘is such a thing as society’ to start pushing back harder, for a happier 2017.

I plan to take on fascism, corrupt media, lying politicians, hierarchy in general, fixing democratic reform, climate chaos and replacing the failing socialism and capitalism systems, as the year warms up; but for now lets warm up with open communication protocols. This article recommends the Franz messaging application: It says:

“The days of multi-protocol instant messengers are long gone, with (mostly) proprietary mobile-first services now ruling the roost.

Want to chat on WhatsApp, Facebook Messenger, Telegram or another well-known messaging service on Ubuntu, without using your browser? Try Franz.”

Or don’t. Ask why Google needed to assimilate XMPP into Google Talk, in order to destroy it, so it could launch Hangouts to compete with Skype and Apple and control yet another market. It got beaten and left us with the current fragmented mess. When will we all learn the lesson to choose open protocols not products and suppliers that do what is good for us rather than for themselves? We will only progress in software if we stop throwing everything away every few years and starting again with something worse. Customers and governments must start demanding this. We must NOT Brexit or Trump on international communication. Tribal thinking is Bad, kids!

Can anyone recommend a good XMPP service provider that serves the UK which REALLY believes in open standards and privacy, like Google, Facebook, Apple and (occasionally) Microsoft pretend to? Maybe with an old-fashioned SMTP/POP email service that isn’t Gmail. Liars must be punished, or they’ll keep doing it… and we’re back to politics.

This week I mentioned a product in a closed Slack group and received targeted marketing next time I logged into Facebook. What else is being snooped on?

January 01, 2017

This feels important
Your old PCs and Macs are being aPIXELated. Cambridge computer science hippies are helping us back onto the right path to Freedom.

Those nice Raspberry Pi people are trying to give us a standard Linux that runs on old hardware, as well as new. I remember when we all thought that was Ubuntu, before they decided they wanted to be better than all the other distros. I’m not sure competitive communities are the way to go. That way lies tribalism, nationalism and eventually fascism. 2016 is OVER. We get it, Time Lords: power corrupts.

I have, at least temporarily, stopped using the social media to find news. I publish an RSS feed here, and your other favourite sites probably do too, so we can all discover the things we want to read without having to wade through a morass of things we don’t.

Soon, I’ll collect some recommended feeds together. What are yours? Which are the high-quality, low-volume feeds you make sure to catch every post on?

December 31, 2016

As the year draws to a close, I like to look back at what was and looking forward to what might be. This is my second year in review post, the first being last year. This post also marks my second year of self-employment.

I’ve split this post into 4 sections:

But first, a word on 2016. Quite a year, right?

It felt like there wasn’t a week that went by without something that really sucked happening. If it wasn’t another celebrity death, it was another damaging post-truth article from a mainstream publication, or an Orwellian law being passed, or another extremist attack.

I’ve always casually followed politics but this year it has consumed a much bigger part of my life, as it has for millions of others. I’ve followed with both intrigue and fear.

This year has highlighted a divide that exists in society, a divide which is far bigger than many of us ever realised. It’s shown how fragile our world is and how unpredictable our world can be.

I’ve wanted to bury my head in the sand and pretend that it doesn’t matter or that I don’t care. The problem is, it does matter and I do care. I’ve been trying to understand what has happened (because I don’t) so that I can be more empathetic towards those who obviously see the world differently to how I do. This tension (between hiding and seeking) has taken more energy than I care to admit.

Anyhow – this post isn’t about politics or world affairs. Let’s move on, shall we?

What went well


Business wasn’t great (compared to last year), but it would be remiss of me not pull out some positives. I’ve worked with some great clients and together we’ve produced some great work. Referrals are up, as are leads from my website. I’m also still enjoying freelance life. Overall, and all things considered, a thumbs up.

The 30 Day Writing Challenge

Those that know me or have followed me know that I’m a proponent of daily writing. I’ve often encouraged friends to blog or journal because I’ve seen so many of the benefits first hand. In response, I’ll often hear “I’d love to write more, but I don’t have time/I don’t know what to write about/I have nothing to say/etc.” Writing is difficult because of the many mental blocks we put in place.

It was for this reason that I created The 30 Day Writing Challenge. I wanted to encourage others to push past these mental blocks. The response was fantastic. 134 people signed up and took part, with many of those blogging 2-3 times per week. It’s something I want to run again next year, but with a new and improved format. If you’re interested in joining the challenge next time, jump on my mailing list to hear about it first.

Inline-Block Community

One of the unexpected outcomes from the 30 Day Writing Challenge (30DWC) was the community that came from it. I invited participants from 30DWC to a private Slack team. It started with a fairly small group – around 30 people – and it’s grown to be a positive community of around 130. Topics include writing, design and development, photography, productivity, books, and more.

It has become a place I really enjoy hanging out in. Working from home can be lonely, so these online communities have become increasing important in keeping me sane. I’ve really enjoyed the discussions that have taken place, and there’s some brilliant and smart folk in there. If it sounds like your thing, you can join here.

Mastermind Group

In the closing stages of last year, I started a mastermind group with Andy, Alex, and Darren. Every fortnight, we jump on a Google Hangouts call and discuss the problems we’re facing, what we’re working on, etc. This has been a fantastic success this year. Although we’re in different phases of business (Andy and Darren have employees, while Alex and I are solo), we’re in similar phases of personal growth. We’re changing the format for 2017, splitting the year into 12-week sprints. I’m really excited about this new format and I’ll be writing about it in the future.


Although I’ve read far less than last year and failed to meet my goal of publishing book notes for 12 books, I’ve stumbled across some really stunning books this year. I’ve learned that reading for me is a quality over quantity thing. I’d much rather read a handful of life-changing books, than dozens of mediocre books. Here are a couple of books that I’ve read this year that are worth a shout out:


In my review last year, I wrote: “I’ve not really attended any local events all year. It’s something I need to make more of an effort with next year.” I did make more of an effort and went to a number of meetups throughout the year.

I’ve also been involved in organising Homebrew Brum with Dave Redfern and Paul Tibbetts. It’s a small meetup that takes place once a month, with the focus on attendees working on their own websites. I’m excited to see how it develops next year.


In November, my wife and I travelled to Sri Lanka and The Maldives. It was a much needed holiday, where we got the chance to eat great food, explore new cultures, and unwind. Sri Lanka, in particular, was incredibly beautiful and a place I’d love to revisit some day. My photos are here.


The big house project this year was a new kitchen. We finished the kitchen in June and we’re really happy with it. I got my own whisky shelf, too.

What went badly


I wrote about my experience of burning out for Geek Mental Help Week. It was the first time I’d experienced burnout. Since writing the article, I’ve had a lot of people ask if I’m ok and if I’m taking better care of myself. Yes and yes is the answer.

Lessons learnt: I’ve got a better understanding of what my own limitations are now. Sometimes you have to push too far to know where the boundaries are. I’ve also learnt this year that a creative professional’s life has seasons. There’s a time for intense work and there’s a time for family and a social life. But you can’t do both simultaneously and that was the mistake I made. I now have a better understanding of the seasons of my work, and thus when it makes sense to push, and when to slow down.


I wrote 38 blog posts this year, which isn’t a bad number by any means. But I’m still lumping “writing” as something that went badly this year. 30 of those posts were posted in one month, during April, which I did for the 30 Day Writing Challenge. I have really neglected my newsletter this year and that’s something I want to fix next year.

Lessons learnt: I do the majority of my writing in the early hours of the morning, so my lack of writing is due to not protecting my evening and morning routines.

Business growth

Last year I set a goal of growing my businesses revenue by 15%. This number was more or less plucked from thin air. I didn’t have a plan to execute against. I naively assumed that more effort and more time invested would give me a bigger return. This assumption was wrong. Business was slower this year and revenue is down about 10%. Not catastrophic by any means, but certainly an eye opener.

Lessons learnt: I think I set the wrong goal here. If I focused instead of working with the right clients, improving my marketing, and charging the right rates for projects, my revenue would have increased as a by-product. I don’t plan on setting monetary growth goals in the future. I hope that by setting other goals, increased revenue will be a by-product.

Find a place to work away from home

Another goal I set last year was finding a place to work away from home. Working from home can be a lonely endeavour, and switching up my work environment can help with creativity. I have attended a local co-working space twice, but I need to do more. More coffee shops, more co-working spaces, more changes of scenery. Possibly even a hot desk, if I can find a suitable place.


Towards the middle of the year I reached 78kg, and I went down to 72.8kg at the start of November. My target for the end of the year was 70kg, and I’m now just over 75kg. So this year wasn’t terrible, but it wasn’t great either. Something to work on next year.

Not building assets

A typical freelancer does project-based work. A client pays a fee, you deliver the work, and then you both move on. The problem with this is that they’re one-offs. You need a constant stream of new clients. I had hoped to build some assets – things that would deliver a steady stream of income over time. This is something I have completely neglected this year, and something I really want to make progress on next year.

My goals for 2017

Launch first product

This is the big one for me and one I’ve been sitting on and procrastinating over. I have a product that I’ve started planning, but it’s too early to announce. It might change (and that’s ok), but a big focus for me in 2017 year will be releasing my first product.

Goal: launch first product


Writing is such an instrumental tool for my business, and I need to be more consistent at it. I want to get back to emailing my list every two weeks. I also want to get my morning routine back on track and write at least 500 words every morning.

Goal: write to my mailing list every two weeks


Same as last year: read better, not necessarily more. I want to have 12 book notes published by the end of 2017.

Goal: publish 12 book notes


In 2016, I cut into some of my savings. Not in a critical way, but it’s certainly something I want to reverse this year. The bigger the buffer I have, the more creative freedom I have moving forward.

Goal: save 4 months salary

One movie night per week

We started this at the start of 2016 and it was great, so I want to keep it up for 2017. Doesn’t matter which night, and it doesn’t even have to be a movie, but I’d like to have one night a week where I spend time with my wife. No mobile phones, no distractions, just quality time together.

Goal: 1 night in per week

Themes for 2017

These are the things I want to remind myself about during 2017. They don’t have tangible goals, so they don’t fit in the section above. I’ll be reviewing these themes every month.


Many of my goals and much of my day-to-day productivity will be achieved through my morning routine. Protecting my morning and evening routines, and honing them, will be an important part of my year.

Deep Work

This isn’t just a habit you develop, it’s a practice. Throughout the year, I’ll be practicing deep work, removing distractions, and training my brain not to wonder.


I’ve been interested in meditation for the past year, but I haven’t committed. My Mastermind buddy Andy Henson wrote a great introduction to Meditation earlier in the year and has an impressive 160+ day streak going. It’s encouraged me to get my act together and start practicing mindfulness.

Output over input

Derek Sivers once said “if information was the answer, then we’d all be billionaires with perfect abs.” Over the past few years, I’ve overloaded on information. I’ve filled every free moment with podcasts, books, and articles. But this year, I want to reverse that. I want to go on an information diet and spend more of my time and energy on making things.


In the book Essentialism, it describes an Essentialist as “someone who deliberately distinguishes the vital few from the trivial many”. I hope to continue cutting through the noise across all areas of my life: from digital minimalism, to the clothes I own and the things I buy, to the projects and clients I take on. That’s not to say I’ll only have 10 possessions by the end of the year, but I do think that by being more mindful about the things I buy and the things I spend my time on will have a positive impact on my life.

Experiences not possessions

Related to minimalism, I plan to invest more in experiences. More travelling, more live music, more comedy shows, more good food and nights in with friends.


Focus on helping more people. Be a better husband, son, brother, godfather, and friend. Spend more time with the people that matter.

Right, that about does it for me.

All the best to you and yours for 2017.

Back to Top