Last updated: August 16, 2018 09:22 AM (All times are UTC.)

August 10, 2018

Reading List by Bruce Lawson (@brucel)

Web Stuff

Other stuff

August 08, 2018

I read Twitter with Tweetdeck. And I use the excellent Better Tweetdeck to improve my Tweetdeck experience. And I had an idea.

You see, emoji, much as they’re the way we communicate now, they’re actually quite hard to read. And Slack does this rather neat thing where if …

August 07, 2018

I was saddened to read the alt-right describing Facebook and YouTube’s removal of Infowars as “simultaneously purg[ing] him from the internet“:

I assume Mr Tracey has not heard of the World Wide Web, which Tim Berners-Lee invited the public to try 27 years ago yesterday:

(Alternatively, perhaps Mr. Tracey has heard of it, and is simply distorting the facts to mislead people – surely not?)

Anyway, this new-fangled “World Wide Web” allows anybody to make what we in the trade call “a website”.

Mr Jones’ Infowars site already has one, which hasn’t been “purged” by anyone. (I won’t link to it because, well, ewwwww. Don’t “wah wah censorship” at me; my website, my rules.) But, as a service to alt-right frothers everywhere, here’s how you can set up your own.

You could go to where, for as little as £3 a month, you can host your site with a custom domain name (so instead of Alt-right people will need to exercise a little verbal continence to comply with their user guidelines:

The following activity/material isn’t allowed on … Illegal content and conduct.
… you cannot post a genuine call for violence—or death—against an individual person, or groups of persons … Don’t share someone’s personal information without their consent.

Note that these pretty laissez-faire terms of service do not curtail your free speech; is a business and isn’t obliged to take your money. The American first amendment applies only to the government.

As an alternative to, Wix allows you to make your own pretty website with a drag and drop builder, and host it with them for a small amount of money. Again, a modicum of decency is required; you can’t publish stuff

which may be deemed as defamatory, libelous, obscene, harassing, threatening, incendiary, abusive, racist, offensive, deceptive or fraudulent, encouraging criminal or harmful conduct.

Squarespace and Weebly also allow you to build and host websites (although I haven’t tried them. I used to work for Wix).

Tumblr will host your content and videos, with community guidelines:

Don’t encourage violence or hatred. Don’t make violent threats or statements that incite violence, including threatening or promoting terrorism. Especially don’t do so on the basis of things like race, ethnic origin, religion, disability, gender, gender identity, age, veteran status, or sexual orientation.

I think such rules on a website that somebody else owns are entirely legitimate. As clause 19 of Terms of Service on Alex Jones’ Infowars website says

If you violate these rules, your posts and/or user name will be deleted.

Remember: you are a guest here. It is not censorship if you violate the rules and your post is deleted. All civilizations have rules and if you violate them you can expect to be ostracized from the tribe.

If you don’t want to trust a third party with your data, good on you! I’m all for an web of independent authors. (Or perhaps you can’t even muster up the good manners to be hosted by one of these services, in which case, bad on you. Have a good hard look at yourself in the mirror.)

It’s very easy these days to register a domain name (Google it), set up the free, open-source blogging WordPress software, choose any of thousands of free themes, and publish to your heart’s content, especially if you choose a host that specialises in WordPress hosting. You might have to pay slightly more, and do a little bit more work to make sure all software is updated and secure — but that’s a price I’m willing to pay in order to own and control my own content.

So there you are, alt-right folks. I’m an atheist liberal, so I despise the divisive nonsense you excrete. But I love that the Web allows everyone to publish, and wouldn’t want you to feel left out because you’re misinformed by people like Michael Tracey who don’t understand the web.

Of course, it’s perfectly possible no-one will visit your website to read how Bin Laden faked the moon landings in order to draw attention from the fact that Marilyn Monroe was a CIA-funded muslim who invented income tax and fluoridated water in order to seize your guns and pollute your precious bodily fluids. But that’s freedom.

Happy hating!

August 04, 2018

Yesterday, I got blocked on Facebook for asking “bioresonance practitioner” Life Principles for more information about their “Quantum Medicine”, as I’m too unversed in science to understand it from their explanation about homeopathy, and Dr Raymond Rife’s “electronic machine” that cured 14 of 14 peoples’ cancer before it was suppressed by “Big Pharma”.

To be clear, they’re not advertising treatments for cancer (that would be illegal). They’re selling “treatments” for addiction that use “Quantum Medicine”. This is from their QM “explainer”:

In 1981 Dr Raymond Rife came up with his electronic machine which would shake pathogen to death. He took 14 people who were sent home to die from end stage cancer and with a three minute treatment twice a week cured 12 of them. The last two were cured after another four weeks of treatments. This was certified by 12 eminent oncologists at the time.

The claim that ‘In 1981 Dr Raymond Rife came up with his electronic machine” is tricky to substantiate, as Rife died on August 5, 1971. OR DID HE?!? Maybe his machine made him immortal. Perhaps his quantum kundalini is metastatising with the cosmos, as we speak.

Also what is homeopathy if not energy medicine? According to Avogadro’s law of dilution the chances of the original molecules after years of dilution is nill but the remedies are even more potent. The imprint on the water is what counts and not the original substance they started off with, well that’s quantum medicine.

Certainly, Avogadro shows that “the chances of the original molecules after years of dilution is nill [sic]“. But he certainly did not go on to say “the remedies are even more potent”; that’s Samuel Hahnemann, the man behind homeopathy. The “imprint on the water” (“water memory“) is not accepted by scientists, and quite what that has to do with quantum mechanics is unclear.

So does it matter if the medicine is in a physical form or in quantum form applied to the body energetically or informationally? If the result is the same then they are effectively medicines.

Er – what?

This was vomited out for me as a Facebook ad (presumably because Life Principles is based in Birmingham, as I am). Facebook shouldn’t profit from such nonsense, especially as previous complaints about Life Principles’ dodgy advertising were upheld by the Advertising Standards Authority:

We told Life Principles Ltd to ensure that future ads did not make efficacy claims that implied guaranteed success for their treatments unless they held robust evidence to substantiate the claims. We also told Life Principles to ensure that their advertising did not offer treatment or discourage essential treatment for conditions for which medical supervision should be sought.

Life Principles describes “Modern medicine” as

a business model that makes tons of money for the Big Pharma who blatantly hide bad research and only publish favourable results.

Their Facebook “About” page promotes awards for people promoting them:

10% Referral fee after someone has successfully stayed quit for 12 months. If you promote our business as a business distributing our leaflets we will give you 20% of our takings. So for heroin addiction you could earn a cool £400.

A “cool” £400. Classy.

As someone with Multiple Sclerosis, I get my fair share of quacks popping up to sell me bee-string therapy or warn me against coffee or aspartame.

I’d sooner trust “Big Pharma” than “Big Snakeoil”, thank you.

August 03, 2018

Wood you believe it? by Daniel Hollands (@limeblast)

Wood you believe it?

(I already hate myself for that title)

I'm not sure at what point I'm going to be able to legitimately call myself a woodworker, but I became one step closer to that point today as I've finally cut some wood in anger.

Sure, as soon as I got my brand new power tools I tested each of them out - but it's one thing to cut random bits of firewood off the wooden shelving unit that exploded into mould because your basement is far too damp - and something else entirely to get out a tape measure, square, and a guide clamp, and actually cut some wood with purpose.

But lets rewind a little bit.

When last we spoke I'd ordered the power tools I needed for the projects, but as pretty much the entire month of July was pre-booked with BBQs and other such weekend plans (and because the limit on my credit card was dangerously close), I figured there was no point in buying the remaining supplies and lumber needed for the projects until I had a firm idea of when I'd be able to complete them.

Since then I've negioated with my girlfriend, and managed to reserved three weekends (one in August, two in September) for woodworking purposes. So fast forward to yesterday, with it being a new month (and more importantly, with some of the debt from my credit card having been paid) I decided it was time to order the last few remaining bits for the project, including:

  • a panel of 2440 x 1220 x 18 mm plywood
  • 6 lengths of 50 x 100 x 2400 mm board (aka 2x4s)
  • 5 lengths of 25 x 50 x 2400 mm board (aka 1x2s)
  • 12 lengths of 25 x 75 x 2400 mm board (aka 1x3s)

...which, must to my surprise, arrived today.

Unfortunately the 2x4s got picked incorrectly, meaning I received some 1x4s instead, but a quick phone call got that resolved, with the correct size being delivered on Tuesday.

The boards fit in my shed without issue, but the plywood panel was just too big, so I decided it was time to put my circular saw to good use, and cut it down to size.

Using a clamping straight edge, carpenters square, a couple of workbenches, and a tape measure, along with my circular saw, I was able to cut a straight line. It wasn't a square cut, but it was a straight one.

Wood you believe it?

I repeated the process a second time, and ended up with three pieces - two of them will be laminated together (one glued on top of the other, leaving something that's twice as thick) and will act at the workbench surface, and the third will be further cut into shelves.

Wood you believe it?

I think the most important lesson I've learned from this, via the aforementioned mistake, is to measure everything twice before you cut, and to take full advantage of the carpenters square - don't just assume the straight edge clamp is square, always check and double check.

Anyway, My first weekend is in two weeks time, so look forward to an update then.

Reading List by Bruce Lawson (@brucel)

A weekly(-ish) dump of links to interesting things I’ve read and shared on Twitter. This is the last one to be sponsored by those nice folks at Wix Engineering, ’cause I’m leaving Wix.

August 02, 2018

There’s a great song on Michelle Shocked’s first album called The Secret to A Long Life is Knowing When It’s Time To Go.

And I’ve followed Ms Shocked’s advice through much of my career, sometimes out of self-preservation, but mostly because I like starting things up and then passing on the baton before I become the crusty old-timer in the corner saying “We don’t do it like that here”. That’s why I left Amnuay Silpa school in Bangkok four years after we set it up, once we became profitable; likewise, I left the Solicitors Regulation Authority after we established a new, standards-based website, a sane editorial policy and I recruited and trained my successors.

And now, after 15 months, I’m finishing my consultancy at Wix Engineering. They bought me in to help them with a project they’d been working on. We radically simplified it, then made sure that Stylable (as called it) adhered to the rules and spirit of CSS. Then it was time to tell people about it, firstly through a music video, then through conference talks.

That’s done; as one of the Product Managers at Wix R&D, Arnon Kehat, said

I was part of the team that hired Bruce to help us make our open source contribution stand-out, and reach the right people. I cannot imagine how we would have done it without him… He guided us where we hadn’t a clue, and helped us make some really complex discussions into fun ones. He helped us understand our audience better, and to make sure we approach them the right way.

And I’m happy to say that the first components made with Stylable are now running in production, available for the 120 million Wix users to add to their sites.

In some ways, Wix was like working for Opera – both had very strong consumer brands, and fiercely loyal users, but weren’t well known as places of engineering excellence. At Opera, I worked to show web developers how our engineers made a browser run on low-specced devices, to serve its millions of customers in the developing world. At Wix, I reported directly to Nadav, one of the founders – but he doesn’t wander around in a shiny suit of synergies, smoking caviar; he writes JavaScript all day in the Stylable team. It’s a very engineering-led company; over 50% of the workforce are engineers.

I’m not too proud to admit that when I was at Opera I had a somewhat naive view of how websites get made in ‘industry’. Working with a company that has so many people making sites on the Wix platform has taught me a great deal about building the web at scale, about kind of infrastructure behind the scenes, performance and where the rubber meets the road in terms of standards.

It was great fun to work with the Stylable team who are lovely people and brilliant coders who really, really care about the Web, and with groovy cats in wider-Wix such as Dan Shappir, Danielle Kanish, Maya Alon, Mor Gilad, Morad Stern, and Sergey Bolshchikov. Kisses to all of them.

Next: off to Asia for a while to meditate and make music before the next career adventure.

August 01, 2018

Out of office by Bruce Lawson (@brucel)

The BBC has a report on Some of the funniest out-of-office replies. It’s a summertime filler story but I noticed them quoting Tyler Brûlé who wrote an article suggesting that people who set out-of-office messages simply aren’t committed enough. This is another example of “presenteeism”, one of the reasons that British workers don’t take time off sick when they’re ill.

I love my holidays; I work to live, not live to work, although I do love what I do. So I always set an Out of Office message on my employer’s corporate email. I’ve noticed through various jobs that most of the email I receive is either ephemera (“I’ll be late today”/ “Please note the fridge will be emptied on Thursday”) or conversations that go on for a few days, and then resolve themselves.

So my out of office says “I’m out until DD/MM/YYYY. If your message remains important when I return, please re-send it then, as I will delete all messages received before that date without reading”. And, apart from messages from direct bosses, I do just that.

Feel free to use my personal email out-of-office as inspiration:


I love you. I really do. The way your cute nose goes all crinkly when you smile – I dream about it and sigh. The way you toss your beautiful hair when you’re materialising from hyperspace makes my heart go pit-a-pat and skip a beat. Thinking of how your tentacles encircle my exoskeleton causes … well, let’s not go there.

But that doesn’t change the fact that I’m backpacking around India at the moment, and connectivity is limited. And there’s loads of stuff to look at that’s cooler than email, so it may take time until I reply. Until we see each other again, I yearn for your gentle caress and to hear the ethereal howling you make when extruding your egg sacs.


Relax! Read a book! Go swimming! Play guitar! Get drunk! Learn karate! Do some yoga! Play tennis! Make love! Have fun with your friends and family! Remember, the graveyard is full of indispensable people.

July 30, 2018

LOL, the far right. They’re spreading a photo of a £5 on which someone’s drawn a speech bubble to show Winston Churchill saying “Free Tommy Robinson”. Churchill would never have approved of Mr “Robinson” Yaxley-Lennon’s contempt of court, jeopardising a free and fair trial. I made and sent them this to show them what Churchill said on July 20, 1910 in the House of Commons:

The mood and temper of the public in regard to the treatment of crime and criminals is one of the most unfailing tests of the civilisation of any country. A calm dispassionate recognition of the rights of the accused … These are the symbols, which, in the treatment of crime and criminal, mark and measure the stored-up strength of a nation, and are sign and proof of the living virtue in it.

Winston Churchill

It’s almost as if they have no real knowledge of, or respect for, British traditions such as rule of law, religious tolerance, freedom of speech etc, and mendaciously hijack national symbols (Union Jack flag, Churchill) in order to apply a veneer of “patriotism” over what’s simply racism.

July 27, 2018

Reading List by Bruce Lawson (@brucel)

A weekly(-ish) dump of links to interesting things I’ve read and shared on Twitter. Sponsored by those nice folks at Wix Engineering who push banknotes under the elastic of my underpants in order that I carry on reading stuff.

July 26, 2018

Why are standards so slow? Find out in this intricate discussion of subgrid BPMs (border/padding/margin) & the TSA (track sizing algorithm) of its parent grid in a subgridded axis.

What’s that all about? I have no idea. I suspect very few people have. But if the CSS Working Group get it wrong, it’ll be on the web —and pissing off web developers— for ever.

Also, have we defined what happens when an RTL Flexbox is inside a CSS Grid, that an ancient CMS has put in a float that’s in a display: table-header container? No-one will ever be mad enough to do that, you say? But, yes, they will, so behaviours need to be defined so browsers are interoperable.

And all of this conversation has to be done asynchronously over GitHub or mailing lists so that all interested parties can contribute, across timezones, to fit the schedules of people across the world, some of whom do Standards full-time, some of whom do it as a part of their jobs, and some of whom do it afterhours.

And that’s why web standards are so slow, and so powerful — they’re made in the open, for everybody.

Addendum, 27 July 2018:

I didn’t want this to suggest that because standards are necessarily slower than company X magicking up some Proprietary FlimFlam™, therefore progress on the web platform must be slow. Many standards are retrospective: an encouraging example is document.querySelector, which saw the usefulness and community adoption of jQuery, and therefore baked the idea of using CSS selectors in JavaScript into browsers.

Standards such as Houdini are explicitly designed to open up the black box of browsers’ super-optimised CSS flux capacitors so developers can polyfill upcoming/ putative CSS features without having to replicate the whole system in order to tweak part of it. If you haven’t read up on Houdini, a good starting point is Houdini: Maybe The Most Exciting Development In CSS You’ve Never Heard Of. For the philosophical background, read The Extensible Web Manifesto.

With the excellent browser interoperability that HTML5 ushered in, the unlamented death of vendor prefixes and plugins, and the near-ubiquity of evergreen browsers, the future of web development is so bright I gotta wear shades.

July 25, 2018

In my previous post, I mused on the value of Freedom Zero and of a non-free licence that allows for study but not for use:

I think it would have to be a licence that enabled studying, sharing and modification of the software, but that explicitly forbade any use for any purpose that isn’t studying, modifying or sharing. With a “contact me or my agent, tell us what you’re doing, and we’ll decide whether to grant you an additional licence for use” suffix. This is more open than closed proprietary software, but no more available for deployment to bad actors.

Waking up this morning I remembered that I have a copy of Numerical Recipes. This is a book, that contains code, and as such you can read the code. But not much else:

Without an additional license to use the contained software, this book is intended as a text and reference book, for reading and study purposes only. However, a restricted, limited free license for use of the software by the individual owner of a copy of this book who personally keyboards one or more routines into a single computer is granted under terms described on p.xix.

Page xix expands:

If you personally keyboard no more than 10 routines from this book into your computer, then we authorize you (and only you) to use those routines (and only those routines) on that single computer.

If you want to study, or to try things, knock yourself out. If you want to distribute things, or use things, get in touch and we’ll choose whether to sell you a licence.

This is not unexplored territory.

July 24, 2018

I’ve been thinking lately that if we don’t want to work on the databases that extremist governments use to detain immigrants they have separated from their children, or on the operating systems that well-equipped militaries used to rain autonomous death from above, or the image processing tools used by mass surveillance networks, then we need to stop dishing out the freedom to run the program as you wish, for any purpose.

That also means discriminating against fields of endeavour, so such software would not only not be Free Software but not even Open Source. I’m OK with that, if it also means that it’s not used for purposes I don’t want to support. I still think Free Software is better than closed proprietary software, but have come to believe that Free Software is the amoral option where what our field needs is morality.

I don’t know what this would look like. I do not believe it would look like The JSON Licence, which is open to misinterpretation (intentional or otherwise). I think it would have to be a licence that enabled studying, sharing and modification of the software, but that explicitly forbade any use for any purpose that isn’t studying, modifying or sharing. With a “contact me or my agent, tell us what you’re doing, and we’ll decide whether to grant you an additional licence for use” suffix. This is more open than closed proprietary software, but no more available for deployment to bad actors.

Yes, that can be abused, but that doesn’t mean it’s not worth trying.

July 23, 2018

Inside out by Stuart Langridge (@sil)

Recently the question of whether browsers should have a View Source function has reared its head again. Chris Coyier says no, as do Tom Dale and Christian Heilmann. Jonathan Snook says yes they should.

The argument against essentially boils down to this: the browser devtools are better. This is undeniably …

July 20, 2018

Reading List by Bruce Lawson (@brucel)

A weekly (-ish) dump of links to interesting things I’ve read and shared on Twitter. Sponsored by those nice folks at Wix Engineering who hurl money at me to read stuff.

July 17, 2018

Story points as described represent an attempt to abstract estimation away from “amount of stuff done per unit time”, because we’re bad at doing that and people were traditionally using that to make us look bad. So we introduce an intermediate value, flip a ratio, and get the story point: the [meaningless value] per amount of stuff. Then we also get the velocity, which is the [meaningless value] per unit time, and…

…and we’re back where we started. Except we’re not, we’re slower than we were before, because it used to be that people asked “how much do you think you can get done over the next couple of weeks”, and we’d tell them, and we’d be wrong. But now they ask “how big is this stuff”, then they ask “how much capacity for stuff is there over the next couple of weeks”, and we tell them both of those things, and we get both wrong, so we still have a wrong answer to the original question but answered two distinct questions incorrectly to get there.

There’s no real way out of that. The idea that velocity will converge over time is flawed, both because the team, the context, and the problem are all changing at once, and because the problem with estimation is not that we’re Gaussian bad at it, but that we’re optimistic bad at it. Consistently, monotonically, “oh I think this will just mean editing some config, call it a one-pointer”-ingly, we fail to see complexity way more than we fail to see simplicity. The idea that even if velocity did converge over time, we would then have reliable tools for planning and estimation is flawed, because what people want is not convergence but growth.

Give people 40 points per sprint for 20 sprints and you’ll be asked not how you became so great at estimation, but why your people aren’t getting any better. Give them about 40 points per sprint for 20 sprints, and they’ll applaud the 44s and frown at the 36s.

The assumption that goes into agile, lean, kanban, lean startup, and similar ideas is that you’re already doing well enough that you only need to worry about local optima, so you may as well take out a load of planning overhead and chase those optima without working out your three-sprint rolling average local optimisation rate.

July 15, 2018

July 13, 2018

Reading List by Bruce Lawson (@brucel)

A weekly (mostly) dump of links to interesting things I’ve read and shared on Twitter. Sponsored by those nice folks at Wix Engineering who hurl money at me to read stuff.

July 11, 2018

OOP the Easy Way by Graham Lee

It’s still very much a work in progress, but OOP the Easy Way is now available to purchase from Leanpub (a free sample is also available from the book’s Leanpub page). Following the theme of my conference talks and blog posts over the last few years, OOP the Easy Way starts with an Antithesis, examining the accidental complexity that has been accumulating under the banner of Object-Oriented Programming for nearly four decades. This will be followed by a Thesis, constructing a model of software objects from the essential core, then a Synthesis, investigating problems that remain unsolved and directions that remain unexplored.

At this early stage, your feedback on the book is very much welcome and will help yourself and fellow readers to get more from the book. You will automatically get updates for free as they are published through Leanpub.

I hope you enjoy OOP the Easy Way!

July 09, 2018

Lady Merchant by Bruce Lawson (@brucel)

My Lady Merchant, although Fortune favours folly,
She won’t smile on me for the things I tell you now.
When you calculate all your losses and your profits,
you’ll know that I did everything that you would allow.

My Lady Merchant, although you fear Time is flying,
there’s no-one you can bribe to clip his chariot wings for you.
When you balance up all your selling and your buying
You’ll know that I did everything that you asked me to.
You’ll know that I did everything that you would let me do.

Words and music © Bruce Lawson 2018, all rights reserved.

July 06, 2018

Reading List by Bruce Lawson (@brucel)

July 05, 2018

CSS-in-JS: FTW || WTF? by Bruce Lawson (@brucel)

Here’s the video of my closing keynote at trigger warning: swearing, potatoes, Rembrandt and naked feet. And here are the slides, so you can follow along at home.

July 04, 2018

I'm starting to learn woodworking

For a craft where the principle material literally grows on trees, it's surprising just how expensive it is to get started in woodworking.

I've had an interest in learning woodworking for the past 2 or so years, born out of watching maker videos on YouTube by people like Peter Brown and Steve Ramsey (among many other quality channels).

I found it relaxing to watch a block of wood get turned on the lathe into into a bowl, or a stack of lumber cut, assembled, glued, and sanded into a side table. I also found it empowering to know that even these masters of their craft made mistakes, and rather than shy away from what they did wrong, instead share them with the viewers, and teach us how to overcome them.

So when the aforementioned Steve Ramsey had a father's day sale on his Weekend Woodworker course a few weeks ago, I jumped at the opportunity to take advantage of my newly gained space, and signed up.

The course is designed to teach you the fundamentals of woodworking over the course of 6 weekend build projects, each consisting of two videos (one for Saturday, one for Sunday) showing, step by step, everything you need to do. I've watched a couple of the videos, to get an idea of what to expect, but before I can get started doing it myself I need some equipment.

One of the main selling points of the course is how cheap it is to buy all the equipment needed to complete it. You're presented with a list of the actual equipment Steve uses in the course, and all together they totalled just under $1000.

Now maybe $1000 is cheap for a beginner woodworker, but it's a touch more than I was expecting, especially when you factor in the cost of the timber itself (which is a whole other issue, one which I'll post about another time) - but if this is the cost of admission, so be it.

I have a Bosch Power For All 18v drill, and love the idea of working unconstrained by cords, so while I'm very possibly contradicting myself here, I figure it's worth the extra expense of expanding my Bosch collection with the cordless variants of their circular saw, impact driver, and random orbital sander. I also already have a jigsaw and shop vac from Aldi (and router, although this isn't required for the course), and was generously gifted an Evolution mitre saw for my birthday.

So throw in some clamps and other bits and pieces and I'll have enough to complete the first three projects, which I aim to do before it gets too cold to work outside.

So watch this space, as I hope it won't be long before I complete the introduction project - the Basic Mobile Workbench.

Dear everyone who writes content: please put publication date (and last updated, if applicable) right at the top of your article.

I’ve been bitten so often by out-of-date content (that’s still highly ranked by search engines) that now I look for a date before I start reading. And scrolling to the end of an article to find it, and then back up to start reading, is a pain in the gonads.

As Gerry McGovern writes,

On the Web, nothing is more damaging to your organization’s reputation and brand than out of date content.

and if you don’t have a prominent date on your content, it might as well be out of date. How can I trust it if I don’t know how current it is?

It’s good if the date is baked into the URL (I configured WordPress to show the year in the URL) but that’s not enough because some browsers (especially mobile) don’t show full URLs or the address bar all the time. Simply have it in good old fashioned plain text, near the article’s title.

I mark mine up with microdata as suggested by (founded and used by Google, Microsoft, Yahoo and Yandex) in the hope that their search engines will prioritise newer content. pubdate and title are required by Apple’s WatchOS because, well, being needlessly different makes web development more fun.

Here’s the relevant markup:

<article itemscope itemtype="">
<h2 itemprop="title">
<a href="">Reading List</a></h2>
<time itemprop="dateCreated pubdate datePublished"
datetime="2018-06-29">Friday 29 June 2018</time>
<p>Some marvellous, trustworthy content</p>
<p><strong>Update: <time itemprop="dateModified"
datetime="2018-06-30">Saturday 30 June 2018</time></strong>Updated content</p>

Whether your content is technical, financial, news or a list of schools closed because of snow (yes, one year I kept my kids at home because a three year old article surfaced at the top of a Google search!), reassuring me that your content is current is, to me at least, just as important as serving it over HTTPS.

Thank you for sharing your marvellous stuff! Please encourage me to read it by establishing my trust in it.


July 03, 2018

Dear Siôn,

Thank you for your comments on Twitter welcoming my feedback on the EU’s proposed copyright reform. I’d like to discuss in particular Article 13, “Use of protected content by information society service providers storing and giving access to large amounts of works and other subject-matter uploaded …

July 02, 2018

We’re looking for a passionate, knowledgeable senior PHP developer to join us in our Solihull office, to help us build and release cool things faster,...

The post Senior PHP Developer appeared first on stickee.

We’re looking for a passionate, knowledgeable senior PHP developer to join us in our Solihull office, to help us build and release cool things faster,...

The post PHP Developer appeared first on stickee.

We’re looking for a passionate, knowledgeable senior PHP developer to join us in our Solihull office, to help us build and release cool things faster,...

The post Front End Developer appeared first on stickee.

We’re looking for an enthusiastic Junior PHP Developer to join us in our Solihull office, to help us release cool things faster, better and smarter....

The post Junior PHP Developer appeared first on stickee.

June 29, 2018

I think I’ve ‘got’ for the first time what the “DIGITAL” thing is.

I’ve been searching to find the meaning of the phrase “digital transformation”, which I assumed encompassed a change from ‘analogue’ to ‘digital’. I finally understood yesterday – that’s not what it’s really about.

The transformation happened slowly to me, over most of my life. My first programming was planned on paper then character boxes were filled-in with a graphite pencil on cards. They were shipped by road to a punch machine that punched the binary codes onto the cards which were then were fed into a computer by operators I never saw. A week later I got some printout back, usually telling me what had gone wrong.

Soon after arriving at university, I had access to GEORGE 3’s Multiple On-line Programming system: a terminal. I used a line editor to create a card-image file which was stored on disk then later submitted to the batch queue. Undergraduates were only allocated space to store one program at a time. There wasn’t room to keep things permanently on-line because of the price of disk space. Some of the research students still walked around with boxes of cards. It was easy to copy a card-stack on one of the card punches and keep it in a safe place. They could probably store more code that way.

I’ve been mostly digital since the 1970s but I saw my digital world as a binary virtualisation of a physical medium. I moved very slowly from dependence on physical to online-only artifacts which had always been representations of digital data.

I realised yesterday that most people have only recently moved their business objects: files, documents, photographs, drawings, 3D-models and social network connection information into the digital realm – from atoms to bits. That frees those objects from their bindings at a single, fixed physical location, leaving them to roam in more than the 3 dimensions of our visualisable reality. This paradigm shift has suddenly hit many without warning, like a revolution, whereas I experienced it as a series of small increments. I’ve been greatly underestimating how disorienting it has been for other industries to reluctantly release their tight grip on physical objects and how worrying it may be for those still facing the cultural adjustment.

I remembered the other day that I used to jump off a shed roof at 5 years old. I could see the spot where I would land. I can’t imagine throwing myself out of a plane into free-fall and that’s why there are ‘digital coaches’. My empathy has been retrieved from an old backup tape. I’m sorry if my lack of understanding ever inconvenienced anyone.

Reading List by Bruce Lawson (@brucel)

A mostly-weekly dump of links to interesting things I’ve read and shared on Twitter. Supported by those nice folks at Wix Engineering who shower me with high-denomination banknotes to reward me for reading this stuff.

Note: For some time I’ve been meaning to write some notes up about how there all these different gaming communities. Each one is busy innovating in their own little world but not always fully aware of what is / has happened in the other communities. Some of these include: LARP, Megagames, BoardGames, UrbanGames, Alternative Reality […]

June 27, 2018

Moving house is stressful, especially when you run a business from your home. Here’s my guide on how to deal with it.

This year marks my 10th year of being a freelance UI & UXer – In that time I’ve moved house three times but this was the first time me and my wife Chrissy have sold and bought at the same time so it needed some extra preparation.

All of these things are probably pretty obvious to you, but figured it was worth sharing 🙂

Photo by Dardan on Unsplash

So, how do I move house while working from home with the least amount of stress?

1. Tell your clients early.

Lets face it, moving house never goes to plan and with our recent move we only completed on a Wednesday and moved out on the Friday, which isn’t ideal!

Luckily I’d been warning my clients for several months that I’d be having time off “pretty soon” and apologised if this causes any inconvenience down the line. Thankfully my clients are awesome and very supportive, some where even more excited than us!

2. Keep your work stuff separate.

It’s really easy to just throw everything into a box and hope that you find what you need when you need it, but it’s hell! What you need to do is make sure you either a) take your work stuff with you in a separate vehicle or b) work out before hand where your home office will be and label the boxes clearly to go into that room.

Photo by Luca Bravo on Unsplash

3. Setup your office first

You work from home right, you need to work to pay the mortgage of this new home… it made sense to me to set my office up first so I had somewhere away from all the madness of the house move that I could work. Even if in the early days of moving working involves sending a few emails, at least you won’t be doing it on your phone or ontop of a pile of boxes.

4. Plan what goes where.

We found that we planned the move in such fine details that we were unpacked in record time, we did this by making sure every box was labeled clearly, we asked the removal firm (if you opted to do it yourself then this still applies) to place the boxes in the right rooms. We labelled the room doors the same as the boxes so they knew where to put them! We even drew plans of each room beforehand to make sure we knew everything would fit! (But that might be a little OTT for some!). Doing this just make it quicker to unpack which meant it was quicker to get back to work.

5. Get mobile broadband!

Fibre broadband can take weeks to get installed, that’s weeks of tethering to your phone and burning data. You might even be in an area like me where the broadband is shockingly poor… if you find yourself in this situation I highly recommend getting a 30 day contract with a mobile broadband provider like EE. I paid £99 for a mobile router and £35 a month for 50gb of data. Because it’s only a 30 day contract I can cancel anytime. This helped me get online faster. Some providers throttle 4G tethering from your phone, I found this a great alternative.

Photo by Bonnie Kittle on Unsplash

6. Have a cash buffer.

Make sure before you move you have a few weeks where you can afford to be off the radar and not earning money. I found the move was fairly quick but actually getting back into the routine of working in a new environment with the distractions of delivery men and paperwork very hard. It took me a good few weeks before I was back in the zone of working for myself. I prepared by ensuring I had money in the bank so worrying about earning money didn’t add to the stress of moving house.

7. Get some exercise.

I’m new to this exercising lark. I’ve been lazy for so many years it was a killer to get off my butt and get running. I’ve just completed the Couch to 5k course and feeling much healthier than I ever have. The reason why I’ve included this in here is for mental health. Sometimes you can let it all get ontop of you. I found running three times a week just cleared my mind.

Photo by aquachara on Unsplash

Ok thats it. Probably my most niche post yet!

Follow me on Twitter

Cover Photo by Erda Estremera on Unsplash

The post Moving house while working at home, a freelancers guide appeared first on .

June 26, 2018

The team at stickee are thrilled to share that we were awarded with ‘Best Use of VR’ at the ‘Computing Tech Marketing & Innovation” awards....

The post stickee’s VR Game Wins Best Use of VR Award appeared first on stickee.

June 21, 2018

I own a shed! by Daniel Hollands (@limeblast)

I own a shed!

When I first started this blog I was living in a small two-bedroom flat in the centre of Birmingham. It was great for transport, shopping, and restaurants, but terrible for project work.

The main problems I faced were the lack of space to work, and my inability to make any changes to the property. As much as I might have wanted to put a sensor on the door to check for intruders (read: my flatmate), or drill some holes to put-up a display - I wasn't allowed.

This means that while I was able to temporally sit my solar panel on the balcony to experiment with [1, 2, 3] I wasn't able to use it for anything pratical, which resulted in an ever growing collection of project components that I needed to store somewhere.

This is why I'm so happy that now, just over two years after I first started the blog, I finally have a house in Worcester to call my own, along with a basement, a large garden, and my very own shed.

It didn't take long for me to dust off the aforementioned solar panel and jerry-rig together a basic control panel:

I own a shed!

I own a shed!

My original battery bit the bullet a long time ago (I think I run it down too much as I wasn't able to charge it again) so I got myself a small 12volt 1.3Ah one from Maplin (RIP), which is hidden behind the shelf guard. It doesn't have much capacity, but it's the only one they had in stock, and at 75% off it was a bargain.

As explained in the book, the multimeter is in-line between the charge controller and battery, and shows how much power is being used (or stored) at that time.

I've proven that it works by running a USB lamp off the provided socket (and allowed a friend to charge his phone via it), but the initial plan is to power these 12V LEDs from it, to provide the shed with light (see below), with a longer term plan of revisiting the other chapters in the zombies book, and implementing them in a more permanent fashion (that's right, my shed is going to have a zombie detector).

What does this mean going forward? Well, a combination of:

  • a house which is crying out for smart technologies
  • a long-running interest in learning woodworking
  • a newly developed interest in house plants and gardening
  • and a bunch more space in which to work

...all contribute to more maker projects, which means more blog posts.

Update - I've added the lights

In among the other tasks this weekend (such as stripping the wallpaper in our lounge), I managed to find the hour or so it took to install the lights.

I own a shed!

The pack I ordered had 20 modules, so I figured it was worth installing them all. The sticky pad on the back made it super easy to attach to the wood, then some small screws held them in place.

After wiring up the first strip, it was clear they provided more than enough illumination alone, but my sense of compleness was lacking, so I wired up the second strip anyway.

This may end up being a foolish move, as twice the number of LEDs means twice the energy drain, but I'm not planning on using them for long stretches of time (the shed really is only suitable for storage, it's not workshop worthy), and if I forget to turn them off, the charge controller will do it for me when needed to prevent the battery from going overlow.

June 16, 2018

June 12, 2018

Little community conferences by Stuart Langridge (@sil)

This last weekend I was at FOSS Talk Live 2018. It was fun. And it led me into various thoughts of how I’d like there to be more of this sort of fun in and around the tech community, and how my feelings on success have changed a bit …

June 11, 2018

FOSS Talk Live 2018 by Stuart Langridge (@sil)

The poster for FOSS Talk Live 2018, in situ in the window of the Harrison

Saturday 9th June 2018 marked FOSS Talk Live 2018, an evening of Linux UK podcasts on stage at The Harrison pub near Kings Cross, London. It’s in its third year now, and each year has improved on the last. This year there were four live shows: Late Night Linux …

June 08, 2018

How (and Why) Developers Use the Dynamic Features of Programming Languages: The Case of Smalltalk is an interesting analysis of the reality of dynamic programming in Smalltalk (Squeak and Pharo, really). Taking the 1,000 largest projects on SqueakSource, the authors quantitatively examine the use of dynamic features in projects and qualitatively consider why they were adopted.

The quantitative analysis is interesting: unsurprisingly a small number (under 1.8%) of methods use dynamic features, but they are spread across a large number of projects. Applications make up a large majority of the projects analysed, but only a small majority of the uses of dynamic features. The kinds of dynamic features most commonly used are those that are also supplied in “static” languages like Java (although one of the most common is live compilation).

The qualitative analysis comes from a position of extreme bias: the poor people who use dynamic features of Smalltalk are forced to do so through lack of alternatives, and pity the even poorer toolsmiths and implementors whose static analysis, optimisation and refactoring tools are broken by dynamic program behaviour! Maybe we should forgot that the HotSpot optimisation tools in Java come from the Smalltalk-ish Self environment, or that the very idea of a “refactoring browser” was first explored in Smalltalk.

This quote exemplifies the authors’ distaste for dynamic coding:

Even if Smalltalk is a language where these features are comparitively easier to access than most programming languages, developers should only use them when they have no viable alternatives, as they significantly obfuscate the control flow of the program, and add implicit dependencies between program entities that are hard to track.

One of the features of using Object-Oriented design is that you don’t have to consider the control flow of a program holistically; you have objects that do particular things, and interesting emergent behaviour coming from the network of collaboration and messages passed between the objects. Putting “comprehensible control flow” at the top of the priority list is the concern of the structured programmer, and in that situation it is indeed convenient to avoid dynamic rewriting of the program flow.

I have indeed used dynamic features in software I’ve written, and rather than bewailing the obfuscation of the control flow I’ve welcomed the simplicity of the solution. Looking at a project I currently have open, I have a table data source that uses the column identifier to find or set a property on the model object at a particular row. I have a menu validation method that builds a validation selector from the menu item’s action selector. No, a static analysis tool can’t work out easily where the program counter is going, but I can, and I’m more likely to need to know.

Wrytr Creative App Design

I’ve recently completed work designing a creative app design for Wrytr, a social writing challenge app designed to connect people by tasking them to submit creative answers to user questions. The app is feed based and has user voting to push the most popular responses to the top. These replies can be easy shared.

Wrytr uses flat colours and minimalistic icons to create a clean design. You can read more about Wrytr here

The app is currently in development, check back or keep an eye on the App Store!


The post Wrytr Creative App Design appeared first on .

Reading List by Bruce Lawson (@brucel)

WOOOOH!! It’s my 200th reading list! A mostly-weekly dump of links to interesting things I’ve read and shared on Twitter. Supported by those nice folks at Wix Engineering who shower me with high-denomination banknotes to reward me for reading this stuff.

June 05, 2018

June 04, 2018

On version 12 by Graham Lee

Reflecting on another WWDC keynote reminded me of this bit in Tron:Legacy, which I’ve undoubtedly not remembered with 100% accuracy:

We’re charging children and schools so much for this, what’s so great about the new version?

Well, there’s a 12 in it.

As I’m going to MCE tomorrow, tonight I’m going to my first WWDC keynote event since 2015. I doubt it’ll quite meet the high note of “dissecting” software design issues in the sports lounge at Moscone with Daniel Steinberg and Bill Dudney, but it’s always better with friends.

As I mentioned recently, almost everything I use on a Mac is a cross-platform application, or a LinuxKit container. I find it much quicker to write a GUI in React with my one year of experience than Cocoa with my couple of decades of experience. Rather than making stuff more featured, Apple need to make it relevant.

June 02, 2018

The hardest thing by Graham Lee

I now have the make the hardest decision in programming. It has nothing to do with naming things or invalidating caches: rather it is which *nix to install on a computer. NextBSD and MidnightBSD both have goals that are relevant to my interests, but both seem pretty quiet.

June 01, 2018

Reading List by Bruce Lawson (@brucel)

Swift by Graham Lee

Speaking of Swift, what idiot called it swift-evolution and not “A Modest Proposal”?

Eating the bubble by Graham Lee

How far back do you want to go to find people telling you that JavaScript is eating the world? Last year? Two years ago? Three? Five?

It’s a slow digestion process, if that’s what is happening. Five years ago, there was no such thing as Swift. For the last four years, I’ve been told at mobile dev conferences that Swift is eating the world, too. It seems like the clear, unambiguous direction being taken by software is different depending on which room you’re in.

It’s time to leave the room. It looks sunny outside, but there are a few clouds in the sky. I pull out my phone and check the weather forecast, and a huge distributed system of C, Fortran, Java, and CUDA tells me that I’m probably going to be lucky and stay dry. That means I’m likely to go out to the Olimpick Games this evening, so I make sure to grab some cash. A huge distributed system of C, COBOL and Java rumbles into action to give me my money, and tell my bank that they owe a little more money to the bank that operates the ATM.

It seems like quite a lot of the world is safe from whichever bubble is being eaten.

May 29, 2018

Netscape won by Graham Lee

Back when AOL was a standalone company and Sun Microsystems existed at all, Netscape said that they wanted Windows to be a buggy collection of device drivers that people used to access the web, which would be the real platform.

It took long enough that Netscape no longer exists, but they won. I have three computers that I regularly use:

  • my work Mac has one Mac-only, Mac-native app open during the day[*]. Everything else is on the web, or is cross-platform. It doesn’t particularly matter what _technology_ the cross-platform stuff is made out of because the fact that it’s cross-platform means the platform is irrelevant, and the technology is just a choice of how the vendors spend their money. I know that quite a bit of it is Electron, wrapped web, or Java.
  • my home Windows PC has some emulators for playing (old) platform-specific games, and otherwise only runs cross-platform apps[*] and accesses the web.
  • my home Linux laptop has the tools I need to write the native application I’m writing as a side project, and everything else is cross-platform or on the web.

[*] I’m ignoring the built-in file browsers, which are forced upon me but I don’t use.

May 25, 2018

Reading List by Bruce Lawson (@brucel)

May 23, 2018

As occasionally happens, I’ve been reevaluating my relationships with social media. The last time I did this I received emails asking whether I was dead, so let me assure you that such rumours are greatly exaggerated.

Long time readers will remember that I joined twitter about a billion years ago as ‘iamleeg’, a name with a convoluted history that I won’t bore you with but that made people think that I was called Ian. So I changed to secboffin, as I had held the job title Security Boffin through a number of employers. After about nine months in which I didn’t interact with twitter at all, I deleted my account: hence people checking I wasn’t dead.

This time, here’s a heads up: I don’t use twitter any more, but it definitely uses me. When I decided I didn’t want a facebook account any longer, I just stopped using it, then deactivated my account. Done. For some reason when I stop using my twitter account, I sneak back in later, probably for the Skinnerian pleasure of seeing the likes and RTs for posts about new articles here. Then come the asinine replies and tepid takes, and eventually I’m sinking serious time into being meaningless on Twitter.

I’d like to take back my meaninglessness for myself, thank you very much. This digital Maoism which encourages me, and others like me, to engage with the system with only the reward of more engagement, is not for me any more.

And let me make an aside here on federation and digital sharecropping. Yes, the current system is not to my favour, and yes, it would be possible to make one I would find more favourable. I actually have an account on one of the Free Software microblogging things, but mindlessly wasting time there is no better than mindlessly wasting time on Twitter. And besides, they don’t have twoptwips.

The ideal of the fediverse is flawed, anyway. The technology used on the instance I have an account is by and large blocked from syncing with a section of the fediverse that uses a different technology, because some sites that allow content that is welcome in one nation’s culture and forbidden in another nation’s culture also use that technology, even though the site of which I am a member doesn’t include that content. Such blanket bans are not how federation is supposed to work, but are how it does work because actually building n! individual relationships is hard, particularly when you work to the flawed assumption that n should be everyone.

And let’s not pretend that I’m somehow “taking back control” of my information by only publishing here. This domain is effectively rented from the registry on my behalf by an agent, the VPS that the blog runs on is rented, the network access is rented…very little of the moving parts here are “mine”. Such would be true if this were a blog hosted on Blogger, or Medium, or Twitter, and it’s true here, too.

Anyway, enough about the hollow promises of the fediverse. The point is, while I’m paying for it, you can see my posts here. You can see feeds of the posts here. You can write comments. You can write me emails.


May 22, 2018

Wow – it’s just 2 weeks until Ecsite 2018 in Geneva.  Ecsite is the largest science communication conference in Europe and is where the worlds Science Centre professionals gather to sharpen their critical mind, recharge their batteries and let off steam on the dance floor – their words not mine 🙂 I’ll be returning for […]

Understanding where your opportunities lie within the customer journey will reveal what is working and what isn’t. Unfortunately whilst many look at a conversion funnel...

The post Managing the conversion funnel – where are the opportunities? appeared first on stickee.

May 19, 2018

A fantastic project to share real-world game making with students and museums in Warwickshire.  You’ll have seen me (on here, twitter & at talks) ‘banging on’ about how successful Escape Room-inspired games would be in museums and here was an opportunity to create them in just a couple of days and then share with the […]

May 16, 2018

May 13, 2018

On null by Graham Lee

I’ve had an interesting conversation on the topic of null over the last few days, spurred by the logical disaster of null. I disagreed with the statement in the post that:

Logically-speaking, there is no such thing as Null

This is true in some logics, but not in all logics. Boolean logic as described in An Investigation of the Laws of Thought, admits only two values:

instead of determining the measure of formal agreement of the symbols of Logic with those of Number generally, it is more immediately suggested to us to compare them with symbols of quantity admitting only of the values 0 and 1.

…and in a later chapter he goes on to introduce probabilities. Anyway. A statement either does hold (it has value 1, with some probability p) or it does not (it has value 0, with some probability 1-p; the Law of the Excluded Middle means that there is no probability that the statement has any other value).

Let’s look at an example. Let x be the lemma “All people are mortal”, and y be the conclusion “Socrates is mortal”. What is the value of y? It isn’t true, because we only know that people are mortal and do not know that Socrates is a person. On the other hand, we don’t know that Socrates is not a person, so it isn’t false either. We need another value, that means “this cannot be decided given the current state of our knowledge”.

In SQL, we find a logic that encodes true, false, and “unknown/undecided” as three different outcomes of a predicate, with the third state being given the name null. If we had a table linking Identity to Class and a table listing the Mortality of different Classes of things, then we could join those two tables on their Class and ask “what is the Mortality of the Class of which Socrates is a member”, and find the answer null.

But there’s a different mathematics behind relational databases, the Relational Calculus, of which SQL is an imperfect imitation. In the relational calculus predicates can only be true or false, there is no “undecided” state. Now that doesn’t mean that the answer to the above question is either true or false, it means that that question cannot be asked. We must ask a different question.

“What is the set of all Mortality values m in the set of tuples (m, c) where c is any of the values of Class that appear in the set of tuples (x, c) where x is Socrates?”

Whew! It’s long-winded, but we can ask it, and the answer has a value: the empty set. By extension, we could always change any question we don’t yet know the answer to into a question of the form “what is the set of known answers to this question”. If we know that the set has a maximum cardinality of 1, then we have reinvented the Optional/Maybe type: it either contains a value or it does not. You get its possible value to do something by sending it a foreach message.

And so we ask whether we would rather model our problem using a binary logic, where we have to consider each question asked in the problem to decide whether it needs to be rewritten as a set membership test, or a ternary logic, where we have to consider that the answer to any question may be the “I don’t know” value.

Implementationally-speaking, there are too many damn nulls

We’ve chosen a design, and now we get to implement it. In an implementation language like Java, Objective-C or Ruby, a null value is supplied as a bottom type, which is to say that there is a magic null or nil keyword whose value acts as a subtype of all other types in the system. Good: we get “I don’t know” behaviour for free anywhere we might want it. Bad: we get that behaviour anywhere else too, so we need to think to be sure that in all places where “I don’t know” is not an answer, that invariant holds in our implementation, or for those of us who don’t like thinking we have to pepper our programs with defensive checks.

I picked those three languages as examples, by the way, because their implementations of null are totally different so ruin the “you should never use a language with null because X” trope.

  • Java nulls are terminal: if you see a null, you blew it.
  • Objective-C nulls are viral: if you see a null, you say a null.[*]
  • Ruby nulls are whatever you want: monkey-patch NilClass until it does your thing.

[*] Objective-C really secretly has _objc_setNilReceiver(id), but I didn’t tell you that.

Languages like Haskell don’t have an empty bottom, so anywhere you might want a null you are going to need to build a thing that represents a null. On the other hand, anywhere you do not want a null you are not going to get one, because you didn’t tell your program how to build one.

Either approach will work. There may be others.

Back to Top