Building a WordPress deployment tool

The last couple of weeks I’ve been working on a deployment tool for a client. It’s quite a doozy and -as far as I know- there isn’t anything out there like this (and I looked!). I wanted to talk about what it is, how it works and what I ran into.


A brief history of WordPress deployment

There are lots of ways to deploy a WordPress website. The most popular of which is (sadly) still FTP, as far as I can tell. Rolling out updates with Git or SVN is second and way down on that list are automated tools like WP Deploy and Bedrock which use Capistrano. I’ve been working with GIT and Capistrano deployment for quite some time now, but they weren’t sufficient for my clients wishes. And that all had to do with WordPress multisite.


The Project

We created a multisite installation where the main site could broadcast content down to it’s sub sites. These subsites are being sold to the clients of our client at a very competitive price, along with the added benefit of free content pushed from the main site that’s being maintained by the branch organization they are buying the site from.

The sub sites all have their own unique child-theme and they all work with our Sections tool, to which we’ve added pre-generated sections for things like Call to Actions, Hero’s and news collections. This enables rapid page and layout creation. All of these sections have up to 5 different possible styles, so when combining different styles each time, each sub-site, while fully generated with existing code, truly maintains a unique feeling.


The challenge

On the multisite level this all looks and works great, but the deal was that we were going to be adding lots of subsites over the coming years. We didn’t want to end up in a situation where we were constantly porting over the entire multisite installation everytime a client-site needed to be developed. So we chose for a different strategy:

Create a single WordPress install with the same setup and push it into a multisite environment when moving it to staging or production

That way development could remain very agile while the production environment was unharmed. So we needed a way to push and pull a single WordPress install into WordPress Multisite and we needed to do this fully automated because of small financial margins on sales of the subsites.


Basic technical layout

Thinking about how we needed to tackle this I started fooling around with WP Migrate DB Pro which is a fantastic plugin for migrating databases and media-files across multiple environments. Using a helper plugin they offer multisite support as well and can also push pr pull from a multisite install into a single site. But since we wanted this control to rest on the local (single) install, we needed to build it ourselves.

Mapping out the filter and action hooks WP Migrate DB Pro offered, though I came to the conclusion that I could still use the basic migration logic, I only needed to step in and change a few variables here and there:

  1. fetching the blog Id of the site we’re deploying (if it doesn’t exist; create it)
  2. changing the database prefix on the local level
  3. changing the database prefix on the remote
  4. porting over local users
  5. sending all media files through WP Migrate DB Pro, to the right destination folder

That meant that we had a sure-fire way of migration all content and media files across servers. With that logic done, all we had to do was create an extra rsync-command that would push or pull the subsite’s child-theme.


Multisite is weird

So multisite was the biggest producer of problems in the project and that’s because Multisite is whack, yo. The way multisite was added into core seven years ago it was merged with backwards compatibility in mind. Although this is a noble undertaking, it has lead to some pretty hefty choices in how multisites handles data. The biggest issue I ran into was concerning user roles. Instead of grabbing the regular wp_user_roles site option, multisite needs to grab the exact same option, but from a key that is prepended by the sites database prefix (so wp_user_roles would become wp_5_user_roles, if the blog ID of that subsite was 5). Together with Migrate DB Pro this produced some issues.

Another issue we ran into is that multisite uses a per-page setting called allowed_themes which of course doesn’t exist in a single install, so we needed to create this setting every time we finished off a deployment.


More Problems

The other problems we ran into were more logistic in nature. Media files, for instance, on a multisite installation tend to not get saved in /wp-content/uploads/2017, but in /wp-content/uploads/sites/5/2017 (if the blog ID of that subsite was 5). We needed to feed this prefix to WP Migrate DB Pro when pushing the images, and we needed to remove it when pulling the media. For the first action there was a filter available. For the second; not so much. So we temporarily forked the wp migrate db pro media files plugin and have opened a ticket with Delicious Brains requesting this specific filter.

Another big problem was handling all these different dependencies. Apart from our own plugins and tools, we needed WP Migrate DB Pro (obviously) and some related plugins, Gravity Forms for form handling and some other general WordPress plugins (Yoast SEO and Post duplicator, amongst others). We handle all dependencies with the best dependency manager PHP has to offer: Composer.

Standard WordPress plugins that are available via wordpress.org already have a fantastic Composer repository in the form of WPackagist, so that takes care of most of the 3rd party plugins.

WP Migrate DB Pro offers a fantastic solution for composer out-of-the-box. They provide their own repository to which you can post your license-key. With that added, you can safely download the latest version:


"wp-migrate-db-pro": {
    "type": "package",
    "package": {
        "name": "deliciousbrains/wp-migrate-db-pro",
        "type": "wordpress-plugin",
        "version": "1.7.2",
        "dist": {
            "type": "zip",
            "url": "https://deliciousbrains.com/dl/wp-migrate-db-pro-latest.zip?licence_key={{LICENSE}}&site_url={{URL}}"
        },
        "require": {
            "composer/installers": "^1.0"
        }
    }
},


Gravity Forms was a bit trickier as they generally only provide a .zip file for paying members. However; there are Github repo’s available which can provide the plugin for our Composer setup, even if the plugin itself doesn’t have a composer.json


“gravity-forms”: {
    “type”: “package”,
    “package”: {
        “name”: “gravityforms/gravityforms”,
        “version”: “master”,
        “type”: “wordpress-plugin”,
        “source”: {
            “url”: “git@github.com:wp-premium/gravityforms.git”,
            “type”: “git”,
            “reference”:“master”
        }
    }
},

The eventual composer file now loads in dependencies from 5 different locations and composer-repositories. WP CLI handles all plugin activations automatically, and sets our license keys for WP Migrate DB Pro and Gravity Forms.

The parent theme is just a git-repo with a valid composer.json file, and each child theme is cloned by the bash-script and renamed after the client name.


Conclusion

I loved working on this tool. It’s more of a site-generating application then a regular WordPress site. And even though it’s closed source and the application will remain property of my client, I’d love to see what else can be done with these techniques. If you have any ideas or are interested in a little demo, don’t hesitate to contact and/or hire me.

Workshop Inclusive Design

It’s been a long time since I did a workshop outside of a conference-scope. So last week felt a bit new to me, as I participated in an Inclusive Design workshop given by Peter van Grieken.

The workshop was organized by Fronteers - a branch organisation for frontend developers. I’ve been a member of them for a while now, and I used to visit their excellend frontend conference each year. But being that my function in my previous company Chef du Web was mostly focussed on WordPress development, for the last couple of years I didn’t really bother trying to get into the conference or participate in the workshops it provides. Now that I’m heading out on my own I want to change that, which is why I decided to participate.

Inclusiveness & Accessibility

The workshop was about being as accessible and inclusive to everybody as possible. It really focussed more on “mindset” then quick wins and technical tricks you could just google. I mean; it gave some practical examples, but mainly started by expanding (at least my) views on accessibility.

You see, the general consensus in accessibility is mostly that we need to make websites that work well on screenreaders. And while that’s true, it’s excluding a huge part of the population who might have other fysical or mental disabilities. Hearing a lot of examples on this really expanded my understanding of accessibility, which I though was very cool. After lunch Marnix, a partially blind guy, joined us to show us how he handles stuff on the web. We learned that internet giants like bol.com and coolblue still aren’t very accessible.

Why that matters

Well, why should that matter? Other than for moral reasons? Is there a reason to switch to inclusive design? Ehm… yeah. There is. First of all it’s currently illegal to exclude people from your service or product based on fysical or mental disabilities. That law was passed last year and is in line with european legislation. There won’t be razzia’s if you’re not complying with this law at the moment, but especially big companies are prone to be sued or fined. The other end of the argument is purely economical: if you count up people with a disabbility, with bad reading skills, with mental problems, with color blindness and other issues, you get a number of 4 million in the Netherlands (a country of 16 million people). That’s 25% of possible customers you’re ignoring. Across borders the percentage seems to be the same, by the way.

Obviously the main reason for switching to inclusive design is and ought to be; because you are a good person.

Assignment

Halfway through the workshop we where given different persona’s and the assignment to work out a car-pooling webapp. Most of the time we worked in teams of three or four to solve this issue on paper. The last couple of hours we also got our hands dirty with some code. Together with Tim Severien I build a little filter-app that works well on screenreaders, mobile and is easily readable for people with color-blindness and bad eyes.

See the Pen Under by Luc Princen (@lucprincen) on CodePen.

Conclusion

I need to learn a lot more about the practicalities and, if I’m working on an assignment, I need to prototype a lot more and for more target audiences. All in all I’ve expanded the scope of my understandind of accessibility. What I’d like to do now is follow a workshop on how to convince clients that investing in A11y matters :)

One thing I’d also like to mention is that I learned the word Neurodiversity. And as a parent of an autistic kid, I just have to say that I really love that word :) <3

Takiwatanga

Yesterday I came across an article shared by Katherine May on twitter. It was from a New Zealand news website which I would normally never read, but this article was different. The article mentioned that the language of the indigenous peoples of New Zealand (The Māori) was including new words for fairly recent disabilities. The big difference with other languages was that The Māori didn’t want to focus on the negative aspects of those disabilities; something that I really love.

So The Māori created a new word for autistic people, which is also the title of this post: Takiwatanga. The best part for that word is it’s translation into english:

his or her own time and space

I love this term and it’s underlying meaning. Thank you Keri Opai, for introducing this gorgeous word and explaining so elloquently what autism seems like.

Read the article on other disability-names as well. You won’t be disappointed.

WP Admin

Let me start with a harsh sounding statement and work my way back from there:

WP Admin is a UI clusterfuck.

Over the past few years WordPress’ name has, for some reason, been synonymous with user-friendlyness. If you only use custom code that’s well designed to work with the WordPress admin or keep WordPress down to basic functionality, there might be some truth in that statement… But since I started to do consultency again I get into more and more situations where I’m looking at a thrown-together WordPress site, which needs each active plugin for a minisucle part of it’s functionality.

It’s a collection of single page applications with little overlapping UI, colors and conventions (Visual Composer, anyone?). I mean; look at the example above. Woo introduces it’s own color, UpdraftPlus has a nag the size of a house, and each and every plugin adds one or more pages to the side-menu.

The Problem

The biggest problem isn’t WordPress itself, although It could use cleaning up… I mean; the WP Admin dashboard looks like the cockpit of a Boeing 747 that’s screaming information at you. But still.. the biggest problem is plugins. Most of them either have an extremely unique (that’s putting it lightly) user interface or have no real interface or information architecture at all.

This is in big part due to the developers themselves and the fact that plugins have gotten huge in their features and functionality, but it’s also because there’s no strict UI-guide or even UI-kit in place for WordPress. Most of us seem to have to guess what’s the best font- button or margin size for our project-page. There should also be active encouragement towards plugin and theme developers to clean up the amount of settingpages added to the side-menu. These things are bugs, and just like ‘actual bugs’ they should be treated with messages towards the developers and pull requests.

WP Admin style guide

The best solution, in my opinion, for creating cleaner new plugins and overhauling old plugins could be a styleguide that gets enforced, promoted and encouraged by the core team. In 2013 Helen Hou-Sandi started a project called the wp-style-guide. The last commit is from two years ago, which seems like it needs new love and attention.

I’ll be checking it out the coming weeks, and will try and contribute some new stuff to it, because a lot has happened to WordPress Admin and the WordPress plugin landscape over the last 2 years. If there’s anyone who wants to join me and think of cool things to add, edit or change please, leave a comment, DM me on Twitter or Github and let’s work together to clean up WP Admin a bit.

WordCamp Europe 2017

The past few days have been filled with a lot of friends, laughs, talks, ideas and yeah, a lot of beers as well. WordCamp Europe 2017 in Paris was a blast, but it’s not over for me until I blog about it (although I forgot to blog about WordCamp Europe 2014). So here goes… after last year it seems appropriate to, once again, start with a yawning selfie of me getting up way to early for the trip:

About a week before WCEU I announced that I was going freelance for a while, so this was the first WordCamp Europe I’ve attended as an independent. This meant talking to a whole lot of people which made this possibly the most social conference I’ve ever been at. Although WordCamp Nederland last October was a very hard one to beat, in the social sense.


The talks

Due to the socializing, I didn’t get to see that many talks. However; the ones I saw where very informative! There’s definitely been another bump in quality compared to previous WordCamps.

The three kinds of design - John Maeda

John Maeda is kind of a legend in the (digital) design world, so going here was -for me at least- a personal requirement.

Armed with a nice looking PDF opened in MacOs’ preview app, John started talking about what it means to do -what he called- computed design. An interesting specification that, by his own words, not a lot of designers understand yet. The big shift that is needed in our thinking is, acording to John, because we’ve never had to design anything with a shape-shifting canvas before. Now, with all the various screensizes, cultures, devices and types of connections, doing design requires a lot more know-how.

I loved the fact that he looked beyond the technical part of digital design and focussed his talk heavily on different cultures and different connection-types (celular, 4G, etc. )

Security is a Process - Mark Jaquith

It’s always smart to hear what Mark has to say. Although I was aware of a lot of the specific tools available in WordPress, the main message was a good kind of gut punch. Security isn’t a destination. It’s not an endpoint; it’s a constantly evolving process. It also requires a black state of mind to get into this process.

I’ve learned that I still need to be able to turn this non-trusting mind on or off. No idea how yet, but we’ll get there :)

CSS Grid Changes Everything - Morten Rand-Hendriksen

I submitted a talk this WordCamp about CSS Grid. It wasn’t selected in favor of this talk. I should be bitter, but I can’t overstate how happy I was I got bumped in favor of Morten. He’s a very talented speaker and explained CSS Grid in a fantastic way. Like audible-gasps-from-the-audience good. Best talk I saw this WordCamp, if I’m totally honest. I’m glad I ignored the hangover I had from the night before and was at the venue at 9am.

If you haven’t yet; please get to know CSS Grid by playing a game and check out Mortens blogpost on the topic

Accessibility In The Age Of The Headless CMS - Rian Rietveld

Accessibility is important. And it’s on the agenda at conferences like wceu in large part because of Rian. You can’t blame the organizers for inviting her again for a talk. And why should you? Because Rian showed us a very interesting -and utterly overshadowed- part of accesibility: Accessibility in combination with single-page web apps. Something WordPress has been inching towards the past couple of years.

I learned a ton of new stuff from this talk (like the aria-live attribute) but the main take-away was that learning fancy new tools like React might be cool for a developer, but first we need to get the basics right. So much of accessibility in single-page-app land is still going wrong by just using the wrong mark-up.


Conversations & People

I had a lot of great conversations, so talking about all of them would be impossible. I just want to highlight a few. On the second day of the conference I had a great talk with Omar and Anton from Yoast about a document- versus application-approach to development. It cleared a lot up for me (like the appeal for inline styling in React, which got the ball rolling conversation-wise). Had a cool discussion with Ramon of Managed WP, and I also liked talking to Jean and Alyona Galea from WP Mayor during the after-party.

Speaking of party; I loved hanging out with the fine-ass people of Level-level again and I hope they never lose that 010-swagger.

I was utterly humbled by discussions with Joost, Marieke and Michiel of Yoast, Rosanne of Buro Staal and Saskia. Thank you for your kind words. Also thanks to Marcel for some good advice ;-)


Parties

After that cascade of links, I just have to talk about the parties, because party-wise I think this was the best WordCamp Europe yet. On the first conference day, at about 4pm, a guy came up to us and told us about a pop-up bar the guys from Dekode had arranged. We had some nice beers and talked to some interesting people. It was exactly the pick-me-up I needed after a long (and hot) day of talks.

Later that night I went to the second party in Paris. It was held by Savvii and was aptly named “WordPint”. On the foot of the Sacre-Coeur, we enjoyed the view, the good company and a lot of nice beers. Apart from the occasional french jogger, the party was fantastic! Although we did mis out on a proposal over at the Go-Daddy party in the Paris Aquarium :)

Then there was the after-party organised by the event itself. The location was beautiful and the drinks were reasonably priced (for Paris). There was a lot of post-WordCamp stress unloading on the dance-floor :)

The only down-side (of the entire event, actually) was the food-situation at the party. But there has been a lot of discussion about that already, so no need to bring it up again.


Up next

In 2018 we’ll be having a ball in Belgrade! Servia’s capital was chosen as the official next host-city. I can’t wait for next year, because I’ve never been there and really love eastern europe, it’s cities, it’s people and it’s cultures. And also because of this.

Until next year! ;-)

My kid has a merge error

So as you might have read in a previous blog post, my son, Nero, needs some extra attention in the medical department. He has a form of autism (which form we’re not completely sure on) which is currently grinding his early development to a halt. He’s about 4,5 years old but doesn’t talk (not even words like daddy or mommy). And apart from the autism there’s another factor at play. I’d like to talk about that today since I get asked a lot of questions about this and sometimes it just becomes easier to refer to a blog-post.

18q Deletion

The factor at play is an 18q deletion. A fairly recently discovered syndrome where a piece of the long arm of the 18th chromosome is missing. In case you didn’t know (I sure didn’t when we started this because I used to think biology was boring); a chromosome is a twirled up bit of DNA crammed into a string-like shape. Think of a chromosome as the string and the DNA as the threads making up the string, only instead of a neatly spun string, everything is scrambled.

The 18q mutation is pretty rare (only one in 40.000 kids get it) which means there’s about two cases each year in The Netherlands where we live. Needless to say; there aren’t exactly support-groups for this syndrome.

It can be heriditary but in the case of our son it’s a mutation started at conception; it’s not a thing he inherited from me or his mom and the chance of us having another kid with an 18q deletion are still 1 in 40.000 (although statistically this chance is a lot lower because what are the chances of lightning striking twice? :))

Merge errors

So if you think about it: my kid literally has a merge-error in his DNA. Starting at the very first cell that was ever going to be my son, this merge error happend. And then that cell reproduced, and those cells reproduced and within a few months that early little human was riddled with faulty cells.

The problem with DNA is that we do not really know how to fix this merge-error since it’s now in every cell of his body. The astounding thing (to me) is the fact that, for the most part, we do know what is in this bit of DNA and which systems are associated with it.

Symptoms

First of all; the amount of symptoms one experiences through an 18q deletion is dependent on the physical size of that deletion. Luckily for him, my son is missing a pretty tiny fraction, so his symptoms aren’t as bad as it can get. A person can, for instance, get major heart or kidney trauma from this syndrome, but it seems very unlikely that my son will experience those problems.

What he does have is a softening of his muscular issue. Meaning that he has trouble flexing and working his muscles to the full extend. That wasn’t very aparent when he was a baby, but starts to be way more noticable now that he’s 4,5 years old. He can’t really sit in a normal chair, can’t walk very far and needs a lot of general physical support with stuff like climbing the stairs.

There’s also a tendency for people with 18q to be autistic. It’s not yet clear if this is one of the areas that can cause autism. As you may now, this is something that’s being studied a lot -it’s currently one of the most studied disabilities in the world- and we’re still mostly guessing on which combination of genes causes it. Anyway: the long arm of the 18th chromosome is definitely on the short-list, but can’t explain the vast spectrum of autism with such a small mutation-chance.

Turning it into something positive

We get questions a lot. From friends, other parents, professionals working on making our lives as a family easier (there are currently 9 people involved in “Taskforce Nero”). If you have questions definitely feel free to ask them. We like to explain it. Mainly because we’ve poured a considerable amount of our time in and if we can use that and turn it into something positive than that’s great.

I’ve also begun working on a tool that can make our lives, and the lives of everybody with and everyone around someone with autism easier.

The tool is actually a webapp with the working title of Plan Ahoy, which I’m writing in Laravel and Vue.

It will make visual planning a lot easier than it is right now. It’s definitely not finished yet, although I would’ve wanted it to. But I haven’t quit my job for nothing; I’ll be spending a lot of time on it in months to come. I’ll use this blog as a sort of dev-journal, so if you’re interested, please check back. And again: if you have questions, feel free to leave them in the comments.

Sass Pixelart

Last week I watched a fantastic talk by Una Kravets about creating a CSS game. She hacked together a demo, live on stage, during CSS Conf EU. The thing that got me hooked on the talk was the first part: creating pixelart in CSS by (mis)using box-shadow.

So tonight I went and did a little exercise of my own to see if I could get it. Here’s my version of CSS Pixelart, using a classic “1 Up” from Mario:

See the Pen Sass Pixel Art by Luc Princen (@lucprincen) on CodePen.

Why does this matter?

Obviously this isn’t a technique that you’d want to use in a ‘real’ game. Rendering box-shadow is a hefty thing to do for a browser, so while it makes for a good hacking tool, it’s hardly a replacement for a simple bitmap.

I still found it a great exercise to do, because I got to discover some cool concepts I never bothered about learning in Sass.


Sass Lists & map-get

I have been using Sass for about four years and I never bothered with learning lists and map-get. Sass is a more simpler tool for me; I use it to keep variables and some mixins. I used to use @extend a lot but have learned long ago that this can lead to bad practice.

I can definitely see myself usings lists for generating stuff like multiple (but similar) selectors. If you’re like me and haven’t tried Sass lists yourself, Hugo Giraudel has a pretty solid article on the matter.


Rendering box-shadow

The reason my .oneup::after element has a negative top and left position is because of the way box-shadow is rendered. For some weird archaic reason box-shadow is rendered at the bottom-right corner of a div. Now I have no idea why this is and I can’t find any other sources on it. If you know why this is, please leave it in the comments. I love finding out about quirks (which is probably why I like working in CSS 😉)

Anyway; without doodling around with the example above it I would’ve never know this.


Learn through play

I’ve purposefully not explained all techniques in my example because I wanted to urge you to watch Una’s talk and see for yourself. I honestly couldn’t have done a better job at explaining. Although you might want to rewind some parts because she only has half an hour to create full game 😉


I missed doing stuff like this over the past couple of years as I got more and more bogged down in my company and the technology it used. It feels good to be having fun again and to learn through basically just farting around. Expect more stuff like this 😉 😍.

Working Less

The past few days you may have seen this image floating around the tweetosphere of Apple’s Planet of the Apps, where a developer is boasting about not seeing his kids and giving it his all.

The romantic ideal

A lot of people -I think rightfully- took offence to that ad because of this industries inherent enabling of workaholism. Being in development -especially in a position where a lot depends on you- can be pretty daunting. You can do something that not many people can, so questions that are supposed to get more productivity out of you are a dime a dozen.

Luckily we see a new class of developers rise up in protest to romanticizing 80-hour work weeks. They’re argueing that for you to be better at your work, you should be well-rested and comfortable. Before you read the next paragraphs, let me be clear and say that I couldn’t agree more with that.


Feeling like superman

As a guy who repeatedly fell into the trap of working too much I can tell you that working less is -sadly- easier said than done. It’s hard because that romantic image of the “pirate” Apple engineer sleeping at his desk to finish the first Macintosh is hardwired in our collective consciousness. We’ve all had those moments where you’re able to run a workweek of about 60 to 70 hours and still manage to get stuff done around the house, keep your appointments and get your inbox to zero.

And. that. FEELS. FANTASTIC.

It’s like a drug. You feel a bit like superman thinking: “I’m getting so much more done than the average person! I must be amazing”.

Yeah, you’re not.

Because this might go alright for a week… maybe two, but eventually the crash sets in. Work becomes sloppier, e-mail starts piling up, partners get upset because laundry isn’t being done. I’ve been there and sadly I still get to that place from time to time.


Turning it around

I don’t have a clear-cut answer for you as to how you can turn that around. But what I can tell you is what brought my hours from an average of 60 to about 38 a week:

1. Get a time-tracker My hours this week I’ve been using Timi for three years now and let me tell you: insights into how much you’re working is everything! This got the ball rolling for me. This got me to admit that I had a problem. I’m happy to recommend Timi to anyone by the way, but they’re a Dutch startup and I don’t think they offer an English version yet.

In any case; the UI of Timi rocks. It’s super easy: just like filling in a log since it’s all just a textarea with very smart text interpretation. The lesson? Make sure your time-tracker is super easy to use. Don’t let bad UI get in your way of creating a new habit.

Logging hours


2. Define a goal

I officially started working less in 2015. My goal was to go from an average of 57 hours a week to 45. A goal in which I didn’t succeed in the first year; I got to an average of 36. I didn’t understand at first (it felt like a lot more) until I remembered to subtract my vacation and weekends (days that you’re actually -and ought to be- free). Once I factored those in I got to about 48 hours a week.

In 2016 I managed to bring that down to an average of 42 hours a week and my current average for 2017 is 38. So yeah; it took me 2,5 years to get at an exceptable number. Make sure you don’t underestimate how hard this is.


What’s next

Are you working on -or going to work on- reducing your work hours and getting over workaholism? I’d love to hear your methods / struggles in the comments. We need to have a far more open discussion about this stuff because, as the Apple-ad shows, workaholism in tech is still very much alive in 2017.

On networking

Chris Lema had an interesting post this week on the power of networking, especially for product developers. Since i’ve recently annouced I will be quitting my former company Chef du Web in favor of a mix of freelancing (with an hours-a-week cap) and product development, the title sang to me like a siren. Also; knowing Chris, his blogs and his talks, I knew it was going to be a good one.

The big issue for me

I love programming and creating products. I’ve loved it since I started in this business and I have, since then, been trying to release products. Some succesful -in that they were actually released, not in that they made a lot of money- and others crashed and burned.

I’ve always had this idea that great products sell themselves and I love quoting John Lasseter (Creative director at Pixar) on this:

“Quality is the best marketing strategy” - John Lasseter

While I still believe this to be true, Chris’ story finally made something click in me. I though clients would come automatically when they heard the product was good. But they first need to hear that a product is good. From multiple trustworthy sources. And they only way to get to that point is to build up your network slowly and steadily with actual interest in other people. So don’t be surprised if you catch me more at meetups, WordCamps and other conferences.

Also: go ahead and read Chris’ post on the power of networking and don’t be surprised if you come out the other end with tons of new ideas for products and ways to market them.

Time for something new.

The last 4,5 years I’ve been working as the technical lead in a company that I co-founded; Chef du Web. It’s a digital agency with a strong focus on marketing-communication and WordPress. And after this time, where my responsibilities have constantly shifted between making sure everything works to working on our internal tools, I’m ready to say goodbye to it.

Now what?

I’ll be getting back to freelancing for a while, which was what I was doing before Chef du Web for about 7 years. I’ll be mixing in some client work (about 24 hours a week) along with development of a few personal projects like Alpackit and Plan Ahoy.

I will also keep working on my suite of WordPress plugins entitled Cuisine to make WordPress development more fun. It’s a lot of stuff, but luckily each month will have a different focus.

Why did I quit?

Me and my wife found out about two years ago that our son (at that time 2,5 years old), Nero, had a severe form of autism which was causing a halt-to-full-stop on his development. We’ve learned since then that this isn’t the whole picture; there’s also a chromosome problem (a so called 18q deletion). This news has made it a lot harder to run a company. Basically I need a lot of flexibility in my work hours, just because there’s no one besides me and his mom who can take care of the boy (he’s turning five, getting bigger but still doesn’t talk and needs his diapers changed, for instance). While I found a lot of flexibility in the staff of Chef du Web to put up with me being away so much during regular work hours; it didn’t feel right to sit at home, still helping someone solve a problem while my son was also demanding attention. So this is me -partly- taking a step back in running a full-time business for a while.

Another big factor was that the company was going in a different direction from what I wanted: away from development and towards more marketing communication. This obviously also played a role in this choice; I could’ve seen myself figuring out a backup plan for the care for my son if my company was going in the exact right direction.

Get in touch with me!

I still have most of my week available for client work though, so I’m in no way thinking about kicking back. I’m ready for exciting new WordPress, custom frontend, webapp- or game-development assignments you might have for me, so if you need a skilled developer and designer for your next big project, don’t hesitate to send me a message, or come and find me at WordCamp Europe next week!

Privacy, Politics and the Web

Today I finished reading “Je hebt wel iets te verbergen” - translated: You DO have something to hide. A dutch book about Privacy in the age of the Internet and the way big companies and governments deal with our data in a rapidly changing technological landscape.

Privacy and Work

While I’ve been reading more and more about (online) privacy over the last couple of years and even voted for the dutch PirateParty basically for this reason, this book finally gave me a clear and (I think) rounded opinion on Privacy.

As a web developer and owner of a company that really benifits from analytics, A/B testing and other practices concerning big data, I’ve always had trouble matching my moral objections to the actual work going out into the world. I send a lot of the time when reading the book actually being persuaded by the other side of the argument: If we need to do our jobs without data, without cookies and without actual statistics, there’s no way we can deliver value to our clients; so to heck with privacy right?

Well, no. We need to find a balance in this, because entire fields in our industry (like User Experience design) are based on your data. Without it, everything online would be demonstrably more difficult. The problem is not collecting that data and using it to create a better experience for everybody. The problem is not telling users about it and then keeping the data after it’s use has expired.

Big Data and Transparency

I guess this is the exact same problem I have with governments and big data: everything is kept in a black box. There are no checks and balances in place for how this data is being handled. Everything mounts down to governmental or corporate secrets.

Big data can be extremely usefull in government; It can give a birds-eye view of the populous, especially when you start correlating data (like spending behaviour with educational level). However; security surrounding these databases are sometimes left to external companies and in a lot of cases severly outdated. The companies that deliver the correlation algorithms are also keeping the logic behind them close to their chests.

Open source

I’m going to bring in one of my favorite quotes; “Open Source isn’t just the future of technology, it’s the future of society” - Matt Mullenweg.

Being open and transparent with your procress and your calculations is crucial for us civilians. We need to be able to check if our data is safe with you and if the calculations you run on it are accurate. Especially when they begin to drive decision making.wifi

A new blog

So here we go; a new blog on a new domain. I’m trying to write more this year, so a personal blog felt like a proper solution. There is, however, a big difference in how I created this blog compared to my previous personal sites. It’s running on Jekyll instead of WordPress.

Jekyll

I’ve been using Jekyll to generate static pages for documentation for about two years now and ever since then I’ve loved it. It loads super-quick, markdown writes really easily and you do not accidentally publish a post (since you would have to commit it using GIT).

I still have to dive deeper into theming for Jekyll though. Right now I’m running an of-the-rack theme (it’s the Hyde theme, in case you’re wondering) with a few css changes (I changed the fonts and obviously the background using some css variables) which is fine for now, but I always like to keep tweaking my site, so eventually I will replace it.

My experience in switching from MacOS to Linux

I’ve been an avid Mac user for over ten years now. I really loved OSX back in it’s Tiger & Leopard phase; it was so futuristic compared to what as already out there. Lately though, apple has been leaving the pro market behind a bit and have been focussing on the consumer market. Not too weird if you look at the sales of iPhones and iPads, but sadly I’m a pro-user and I want pro features. One simple thing that has been bugging me for years is the fact that the file-system gets moved more and more to the back in favor of black boxes like iCloud and a single Documents folder. I do still love the hardware and the build quality though, although the addition of the touchbar in the new Macbook Pro didn’t cut it for me. 

Hardware

Anyway; when Apple released their new Macbook Pro line in October I started looking into alternatives. The value for money had dropped considerably compared to the competition (this was always true on the hardware side of things, although build quality should be worth a lot imho). 

The new hardware needed to be something shipping with a linux distribution so I’d at least know the hardware support was okay. Eventually I decided on the Dell XPS 13. It’s a good lookin’ machine which actually feels a lot sturdier that my previous Macbook Air and yes; it ran Ubuntu.

Elementary OS

I have to say “ran” since I tossed Ubuntu pretty much right away. I knew I wanted to try Elementary OS which is marketed more as an MacOS replacement. So far my experience has been pretty good. The OS looks great and runs very stable (no crashes or hiccups yet). There where some initial problems with my bluetooth trackpad and bluetooth headphones. If you’re switching to Linux prepare to do a lot more scripting that you’re used to. I had to change bluetooth settings in the distro’s shell scripts to get my headphones to work.

HiDPI Troubles

One thing that really bothers me at the moment though, is that there are very few linux applications that are HiDpi ready. Most of them render extremely small. MacOS provides an automated scaling function, but sadly Elementary still doesn’t have this.

Working with an external monitor in HiDPI mode is equally frustrating. Scaling every bit of your OS to twice the size on a regular 27” monitor makes everything look ridiculously huge. So for now I’m running everything in Low DPI mode, which means a less crisp laptop-screen but perfectly fine external monitor and good 3rd party app support.

Minor stuff

The only thing I’m running into now is the fit & finish; tiny things like being able to drag folders to open in sublime (Elementary adds them to the Dock instead), makes me switch to a more keyboard focused approach (which, in the end, is obviously better). So far my experience has been pretty good. It’s frustrating pouring a lot of time into things that are pretty much plug & play in the MacOS world, but the extendability is really worth it.