El Gouna Ghost Retreat


A few months ago, John O’Nolan suggested a date for the first Ghost retreat. I penciled it into the calendar and forgot about it. A good few weeks later, on April 30th, the date was set and flights were booked. It was happening! Three of us would be flying out to Egypt to stay with John for just over a week.

On May 19th, I was on a flight with Hannah from Gatwick to Hurghada. After 5 hours of looking at clouds and desert sand, we landed and were a little shell-shocked with the heat.

We had fair warning what to expect next, but it was still a shock.

As you walk into the terminal at Hurghada, everyone is shouted at by local businessman offering visa’s, camels, and limousine’s, which are taxis to you & I. A mass of about 20 people are shouting for attention as everyone either flocks to them or shuffles to the side of the building where you can buy a visa from an Egyptian bank, which is what we did.

We got our visas, went through passport control and baggage reclaim. We then walked outside to find our prearranged taxi driver. We found him, got in and started the drive to El Gouna, which took us through the city of Hurghada, which looked very much like a set on Call of Duty. Very dry, little greenery and some of the worst driving ever. It must be said, however, that we didn’t nearly crash once. Everyone just seems to think a straight line has many curves.

Our driver was great, taught us a couple Egyptian words (which I have already forgotten) and avoided deep pot holes very well. We got to El Gouna in about 30 minutes after listening to Justin Beiber and the like. Apparently that’s good music to some.

We got to John’s apartment, waited a little while for Sebastian to arrive (who had just gone through the (almost exact) same journey) and had a home-made chilli. We were all sat round a table, beer in one hand, a fork in the other. 4/5 of Ghost were all in one room. It’s a real shame that Sarah wasn’t able to make it. It felt a little empty without her there. 🙁

Even a few days, it’s hard to remember what happened each day, so I thought I’d highlight a few things we did that stick in my mind.

Breakfasts on the beach


(I wasn’t kidding!)

Almost every day, we walked down to the beach and pretty much had the same thing every single day. Eggs on toast, but with this cheese stuff that was like Philadelphia. It sounds simple but tasted pretty damn fantastic!

Speed Boat Lagoon Tour

We were lucky enough to be given a lagoon tour on a boat, and it was a lot of fun. And an eye opener – seeing how much of El Gouna there is on the water front. Pretty much everything of note is less than 20 meters from water.


Raft Building

We accepted the challenge to compete in the second annual raft building competition, held at The Club House.


We built what we thought was a solid craft. It felt solid, nothing moved a millimetre, knots were tight, beers were had. We were filled with confidence!


We listed diligently to the rules, heckled a little, then stood waiting for the starting signal. I pushed us off the beach into the water and we were under way! We paddled, fell behind so paddled some more. We reached the other bank well behind of the others, then our raft started to fall apart.


Ultimately, we came last and we swim back, but we did have victory flaming Sambuca, which I screwed up. Breathing out after you light the drink in your mouth is a bad idea. Fire + alcohol + extra air == OUCH!


Y’know, sometimes we did work. Most of the week was spent planning & discussing things. I now play a big role in the re-working of Ghost-UI, which is going to be a lot of fun and a steep learning curve.

Aside from that, we still held an IRC meeting the day after we all arrived. It was very odd. We were all sat in the same room, with a beer, in silence. We eventually migrated outside to the balcony, with another beer, mostly in silence too.

There are some parts of being distributed that are hard to let go.



El Gouna is technically private land. It has its own security, not a police force. Healthcare is private, infrastructure is private. It is for all intent & purposes, totally private land. As such, there’s no need for license plates or even licenses to drive anything. This is why John could borrow a car to help someone out and why I could borrow a mini motorbike from a friend to simply ride around for a bit.

I picked up riding a bike very quickly indeed and had doubled the previously set top speed for this particular bike. Proud.



I know how awesome numbers are, so throughout the week, I kept a list of what I’d personally done.


  • 16 beers
  • 10 shots
  • 6 wine
  • 2 baileys
  • 2 Caipirinha
  • 2 rum & coke
  • 2 vodka and sprites
  • 1 mojito


  • 7 taxis
  • 6 tuctucs
  • 4x mini motorbike rides (thrice across El Gouna, only fell off once!)
  • 3 night clubs
  • 2 free lifts
  • 1 borrowed car
  • 1 favor
  • 1 power boat
  • 1 lift on a real motorbike
  • 1 fucking amazing burger
  • 1 witnessed a supreme cock block
  • 1 beach party


Thank you Ghost for the amazing job, the amazing opportunities and the amazing holiday meetup.


Credit goes to John, James & Mia for the photos.

I’m Speaking at re:develop

I’m thrilled to say I’m going to be speaking at re:develop in Bournemouth on Friday 22nd August 2014, alongside a whole host of great speakers.

It’s still a while away, but times moves quickly, so go grab a ticket. It’s a day off work (on a Friday!) and at only £70 (+vat, if that’s your thing), it’s pretty damn cheap too. 🙂

I’ll be speaking about what it’s like to work for a distributed company. The pros, the cons, the culture differences, the mindset needed for it, and so much more. If you’ve ever wondered how a modern, 100% distributed company works, this is your time to learn all.

So, head over to redevelop.io, take it all in, then take our your money. See you there!

DRY Colour Classes in Sass

This week, I started re-working Ghost-UI – the user-interface side of Ghost. Of course, it’s open source, so please feel free to contribute in any way you can. I intend to make a load of issues on Github in the next few days so everyone is on the same page and can offer PR’s where desired.

To start off, I have restructured the files and folders, with the hope that the codebase is less daunting for people to get involved in. I will blog about that at some point soon.

The next step was a variables.scss file, in which is a set of colour variables, used throughout the project. Before, there were no classes available to simply set the colour of an elements text or background. I know these classes are useful – especially when Ghost Apps are ready to go – so I’ve added some to the project.

But rather than write out two classes for each colour (for which there are 11, not the 4 shown below), I wanted to make the code as DRY as I could, which meant some form of loop.


Below is how I’ve achieved this in Sass. First, we have the colour variables.

// variables.scss
$darkgrey: #242628;
$grey: #35393b;
$midgrey: #7d878a;
$lightgrey: #e2edf2;

Second, we have the list of colours, which is comprised of two parts. The first attribute is the string we want to use as a selector, the second attribute is the corresponding colour variable which we previously declared.

// variables.scss
    ('darkgrey' $darkgrey)
    ('grey' $grey)
    ('midgrey' $midgrey)
    ('lightgrey' $lightgrey);

In Use

In another file where a lot of other base styles and classes are defined, we have this. It loops over the list of colours we declared earlier and creates 2 classes for each.

// base.scss
@each $colour in $list-colours {
    .#{nth($colour, 1)}-bg {
        background: nth($colour, 2);
    .#{nth($colour, 1)} {
        color: nth($colour, 2);


This is the compiled CSS. See why I wanted to make this DRYer when writing it?

.darkgrey-bg {
    background: #242628;

.darkgrey {
    color: #242628;

.grey-bg {
    background: #35393b;

.grey {
    color: #35393b;

.midgrey-bg {
    background: #7d878a;

.midgrey {
    color: #7d878a;

.lightgrey-bg {
    background: #e2edf2;

.lightgrey {
    color: #e2edf2;


This approach means than when adding new colours to the list, they automatically get two classes generated for them. And if you don’t want a class for this colour, leave it out of $list-colours. Simple.


Back in January, I wrote Cravings. I detailed my history with smoking and how i’m trying to curb the addiction to cigarettes. I thought I’d write a little update.

It’s been 4 months and the number of cigarettes I’ve smoked since has dropped dramatically. I tend to vape more though, but that’s likely because it’s cheaper and more socially accepted in more spaces, even if I am blowing massive fruity clouds.

The vaporiser I use it not like the things you can buy in petrol garages and some corner shops. Those are simple and require little to no maintenance. Mine is a comparative beast, but not unusual to those who vape like I do. I often get asked what the hell it is, how it works, what it tastes like and so on. So, below is a detailed look at what my tools are and how they work. 🙂

Note: Comments, emails and tweets directed at me citing that vaping is untested and not safe, can all go to hell. It’s this or cigarettes filled with tar that stink the place out.

The Daily Carry


This is what I carry on a daily basis, next to an iPhone 5 for size comparison. The brass poll is what we call a ‘mod’, because it can be used & adapted in various ways to do various things. This one is standard. The chrome piece on top is called a dripper and houses the coils, cotton wool, and ultimately the juice that gets vaporised into smoke, which is just flavoured water, after breathing it out.

Inside the mod is a Sony 18650 battery, which lets me use sub-ohm coils. Lesser batteries aren’t as safe or even capable of sub-ohming.

Side note: Ohms is a unit of electrical resistance. Creating different coils of varying ohms can change the flavour of the juice and usually the amount of vapour.

The clear bottle with the blue lid is the juice I am using at the moment. It’s home-made (not by me) and consists of 3 or 4 liquids, as all other juices do. They are:

  • Vegetable glycerin
  • Propylene glycol
  • Concentrated flavouring
  • Nicotine (optional)

The levels of these ingredients are typically a secret of those who make liquids. I know the levels of mine, but I won’t be sharing that. All I can say is that they contain the equivalent of 3mg of nicotine, which is half that of a typical cigarette.

The Tool Kit


This is all the vapid equipment I have, which is typical of many capers like myself.

It consists of:

  • 2x mods with drippers (both dual-coil – 0.2Ω on the left and 0.5Ω on the right)
  • 2x 10ml bottles and 1x 30ml bottle
  • Ohm meter
  • Allen key for the left dripper
  • Screwdriver for the right dripper
  • 0.28mm kanthal wire
  • Crappy tweezers for squeezing coils together
  • Old tiny screwdriver for wrapping coils around
  • Generic cotton wool (not pictured)

All in (and buying from the right places) this whole kit cost about £40, but will last for a good while. After the initial cost of buying all this, vaping costs me about £5 a week, if that.

Of course, this always stays at home. After making a set of coils, they can last happily for a week or two, sometimes even longer. I won’t go into how to make coils as that’s something best left to YouTubers like GrimmGreen and many others.


So, that’s it. That’s what I have to vape with and make what I need. Granted, it looks a bit ridiculous but feels cool making coils, especially when I get them to hit the magical 0.2Ω.

Nesting Media Queries

Prompted by Dan Davies, I thought I’d share how I use nested media queries in Sass. What I do is nothing new, but we all learn by sharing and discussing things.

Below is how I use nested media queries in Sass. I try to keep nesting up to 3 levels deep at most, group properties by type such as layout (display, padding), text (colour, font, weight, size) and so on.

Then I order media queries by size, so the smallest query first then the largest last. Inside the query’s block, I try to keep the order of properties the same, but as they’re usually quite small, I’m not precious about it.

.elem {

    color: red;
    border: 1px solid blue;

    .thing {
        font-weight: 600;

    // And any other properties...

    @media (min-width: 601px) and (max-width: 800px) {
        color: green;

    @media (max-width: 801px) and (min-width: 1000px) {
        color: blue;
        border-color: yellow;
        .thing {
            font-weight: 400;

} // .elem

The only downside I can see to this is the end result when compiled. You could have many repeated @media query declarations. When someone makes a good Sass plugin to combine the @media declarations, that’d be awesome.

As ever, my good friend Stuart Robson has written a few times about this such thing. This and this are both worth reading, even if one is about LESS.

Update: 12:07pm

The very same Stuart as above shared some links related to my ‘many queries’ concern above. Take a look.