It all started, effectively 2 years ago, with this tweet.
I’m not sure when I started following Brent on Twitter, but he posts interesting stuff about Laravel and PHP, and I’ve learned a bunch from his blog. Sometime last year he tweeted this and as I dug deeper into the conversation, I realised something. I had, up until a few years ago, been a strong proponent of light themes.
But somewhere along the line, I was tempted by the dark side.
I can’t remember exactly when it happened, but it was recent, since about 2016 or so, that I switched my PHPStorm IDE from a light to a dark theme. I think it was when I first installed the Material Theme, and it defaulted to a dark theme. I’m not sure if I kept it because it was better, or because I was lead to believe it was better, but I’d been using it ever since.
Over the past weekend, I upgraded my workstation to the latest Ubuntu release and one of the new features of the OS is a built in dark theme, so I tried it, and hated it.
On Sunday (exactly 2 years on from the original tweet!) I was thinking about this, and I realised that there are only two places that have a dark theme; my terminal, and my IDE. Everything else I use daily has a light theme. My text editor, my Slack instance, even my browser, is using a light theme. And I got to thinking that every time I’ve tried a new dark theme (in Ubuntu, Slack, Twitter) I’ve hated it. So why am I keeping to a dark theme in the two applications I probably use the most, after Slack and my browser.
So I decided to try an experiment. I switched PHPStorm back to the IntelliJ light theme, I switched my terminal to a light theme (Tango light), and I gave it a day to see if it made a difference.
It’s now been two days like this, and I’m surprised to find that I have not noticed any negative differences. In fact, I’ve found the text in PHPStorm and my terminal more easy to read, and therefore it feels like I comprehend what’s happening quicker. As I’ve always kept my monitor brightness and contrast settings low, it appears I’ve actually been working in a sub optimal way now, for at least 3 years!
As the year comes to a close, and I sit here in the small town of Wilderness, drinking my last beer of 2019, and watching the last fire of 2019 burn down, I contemplate the past 20 years of my life. 20 years ago (at around this time) I was a lost 22 year old, with little to no direction or career to speak of, recovering from an extremely toxic relationship/break up, wishing, as I often had done in the past, for it all to just end.
How such a small period of time as 20 years has changed all of that.
In the 20 years since that night, I met the love of my life, obtained my national diploma in programming, stumbled into the world of web development, got married, purchased a house, had two children, ran (and sold) a family business, opened a jiu jitsu club, travelled to Europe twice and lost and gained more friends along the way than I can count. If you had stopped by 20 years ago and told me all this was possible, I would have swore you were crazy.
So here’s to 2020 and the next 20 years being as action packed as the last 20 were.
It’s been just over two years since I moved into my current office space, and just over a year since I last wrote about it. As my two major hobbies outside of my work as a developer are jiu-jitsu (which not many folks can relate to), and computer hardware and peripheral upgrades (which most can at least understand) I thought it might be interesting to look back at what changes I’ve made in the tools I use every day, over the last year.
Last year I posted a review of how my workspace had changed over the 2 years since I left employment and become a freelance developer. It included this image of what my desk looks like, with a short run down of everything you see (and don’t see) in the picture.
Today, just over a year later, there have been some small but important changes.
So besides the less bright lighting (more on that later), the more keen of eye among you will have noticed some subtle differences.
Firstly, my peripheral monitors have changed. I was able to pick up a newer Samsung and Dell 24 inch monitor, so now all three screens are LED powered, and the two side monitors are more uniform. I’ve definitely noticed the difference in the visual quality improvement in making sure all three monitors are LED, I no longer feel like I’m having to adjust my eyes when I switch between the different screens.
The other major changes are in peripherals, I’ve replaced the Logitech headseat with a Sennheiser HD 280 Pro studio set, and replaced the short mic stand with a proper desk mounted arm. This allows me better use of my screens and keyboard when I’m in online meetings or recording podcasts (which I’ve not done as much as I’d like to in 2019)
I also treated myself to a Sparkfox Atlas Wireless Bluetooth Controller. This is a great little gaming controller, which I can use connected via a USB cable or via Bluetooth, works on both Windows and Ubuntu and has a very similar layout to an XBox controller.
Finally, as I noted earlier, I’ve switched from using the oppressing overhead florescent lights to a smaller lamp which sits behind the left screen. It gives off just enough light for me to see the things I need, without making my eyes water during the day.
While my workstation has only undergone a few external changes over the course of the last year, I eventually decided it was time for a new laptop this year.
I usually try and use a laptop for at least 4-5 years before replacing it. I’d been mostly happy with the performance of the Dell Inspiron gaming laptop I’d purchased at the end of 2017, but I ended up doing more conferences and therefore travel in 2019 than I had done previously, and two things became clear. First, the laptop and bulky, ungainly charger became heavy when carrying them around a lot, and second, the battery only held around a 4 hour charge.
I’ve always been partial to Dells, and the Dell XPS 15 seemed the logical choice. However, an online friend had recently purchased an Asus Zenbook, and was raving about it.
After researching the differences in price and hardware between the two, and reading a bunch of online reviews, I ended up purchasing the Asus Zenbook UX533FD, and I couldn’t be happier.
It’s super light, has a 10 hour battery life, runs the latest Ubuntu (after a bios update), and is powerful enough that I feel as productive using the laptop as I do on the desktop. At the same time, I also upgraded my laptop mouse to the Logitech M720 Triathlon, the big brother of the Marathon mouse I use on my workstation, and it’s a great wireless addition to the laptop.
The bleeding edge of operating systems.
The other big change I made at the tail end of this year was upgrading both my laptop and workstation OS to the latest version of Ubuntu, 19.10, codenamed Eoan Ermine. I typically only run the latest LTS version on my workstation, and whatever is the latest release on my laptop, but the 19.10 release is so slick, stable and fast that I had to install it on the workstation. I was actually feeling left behind whenever I switched from laptop to PC.
Looking ahead, I don’t think there will be much I will change in 2020, as I’ve pretty much got my perfect set up. But who knows, upgrading computers is the one hobby I do tend to like to spend money on, so I can’t make any promises.
It’s a funny old world. Over the course of the past few years I’ve seen a lot of people take a step back from contributing to WordPress, and I never thought I would get there. But here I am, writing about taking exactly such a break.
When I joined the WordPress community back in early 2016, it was the first global tech community I’d ever actively joined. Like the first time you learn to ride a bike, all I wanted to do was be part of this amazing thing and do as much of it as I could. Now, just 3 years later, I feel burned out and disillusioned as to what my purpose in this community really is.
Don’t get me wrong, the community is not the problem, just like riding a bike up and down your street is not the problem. But all it takes is one or two potholes, or an inconsiderate driver, and things soon take a turn for the worse.
Organising local events
I attended my first WordCamp in Cape Town in 2015, spoke at WordCamp Cape Town in 2016, lead the team for 2017 and 2018, and was part of the team again in 2019, and I need a break. I’d like to be able to attend my home town WordCamp as an attendee next year, without needing to rush from an interesting conversation to whatever next issue might need to be dealt with. I wish the 202o team all of the very best, and I’ll happily assist wherever I can, but not in an official organising capacity.
I will also be taking a step back in organising our local meetup. Fortunately one of our members has joined the meetup organising team, and if she’s as good at organising meetups as she was running Logistics for WCCT 2019, we’re in good hands. I’ll still happily help the team plan events, liase with sponsors and find speakers, but it will be great to share the load of hosting with the three currently active meetup organisers.
I’ve been a community team deputy for about 2 years now, and it’s been an amazing journey. For 2020 I will be taking a big step back from that team, to focus on the future of WP Notify, the notifications feature project I’ve been working on with other WordPress contributors, for the past few months. I think WP Notify is something that WordPress is desperately lacking, and I see it as an important part of moving WordPress into the future, so I want to spend all my core contribution time focused on that.
Speaker diversity training.
Besides WP Notify, my other big goal for 2020 is to do what I can to support the Speaker Diversity Training programme grow and flourish within our local community. Deb Butler has already dedicated herself to launching this training programme, and I want to do whatever I can to assist her.
I am hoping that this break from all of the many volunteer things I, knowingly, get myself into, and a focus on only one or two, will help me redefine my purpose and feel some of that joy I first had back in 2016.
The general recommendation to becoming a better writer, is to write every day.
Besides high school creative writing, I am mostly a self taught writer. I’ve never completed any official copy-writing courses, even though I have three purchased on Udemy from about 2 years ago. I generally don’t understand the finer details that would take me from being a blogger or writing contributor to the ranks of editing someone else’s writing work.
That being said, since I was accepted as a freelance contributor on the Skyword platform early last year, I’ve probably completed at least two written assignments per month. I’m definitely writing more than I ever have, and it’s definitely paying off. I’m seeing the benefits not only in my paid writing work, but also in the general content of my blog.
I thought that it might be useful to share the process I follow, when I am writing content for money. If nothing else, it allows me to write something else today 😉
While the image above my not be pleasant, this is always my first step. When working on a specific assignment, I will have certain guidelines I need to follow, in terms of article content.
I’ll create a new blank Google Doc, paste any relevant information from the assignment at the top of the page, and then just type out whatever comes to mind. This is usually just a few words or phrases, maybe a title, or a sentence or two.
Once I’ve put down the thoughts I have in my head about the topic in question, I’ll start doing some research. Often this is to clarify some points of (mis)understanding, or to fill in some gaps in my knowledge. The assignment topic will define how much research I do. If it’s in an area I know little about, I can spend up to an hour researching. As I am researching the topic, I’m starting to put together a plan of how the article will look and what the story is I want to tell.
I then start writing my first draft. This is just everything as it enters my head. I might make minor edits here or there, but mostly I just write as the thoughts come to me.
This is a pretty important step, but I then take some time away from writing. I find this allows me to think about what I’ve written, if there’s anything else I want to add or take away, and allows me to come back to review what I’ve put down with ‘fresh’ eyes.
This is the most edit heavy process. I read through the content and do my best to self edit my work, taking out repetitive words, looking for other words or phrases that will convey what I’m trying to say. This is usually where I will also start adding links to relevant content, including images, and generally trimming down the content to fit specific criteria. I may also take out sentences, and sometimes whole paragraphs, that don’t fit into the edited article any more.
Immediately once the first edit is complete I’ll start the second, and final, edit. This is where I try to just read the article from top to bottom, as a reader would. Usually this is also where I look for complex sentences and try to uncomplicated them, as well as a more detailed focus on spelling and grammar errors. I will also look at the flow of the sentences and prune them where necessary.
I’m sure my process is nothing new or unique, but it’s evolved over time and I find it works for me.
I’ve been freelancing full time for just over three years now, having spent 10 years developing for either digital agencies or small to medium sized businesses, in various roles.
In the 3+ years since I switched to freelance development, the two sentences that I’ve heard/read the most from clients, and the ones that illicit the most negative responses in me, are:
“This will only take x minutes”
“This will be easy for an experienced developer”
If you are a freelancer, and you’ve been on the receiving end of these phrases, you’ll know what I’m talking about. This post however is not for you, it’s for anyone who has ever said one of these phrases to a developer, or who might not understand why they are so negative.
“This will only take x minutes”
x is usually a variable number, ranging anywhere from ‘a few’ to 30. Sometimes minutes is replaced by hours. Either way, the reason this phrase is so despised by freelancers is that it indicates to us that you think you know more about what we do, than we do.
If you know something will take 5 minutes, that means you understand the problem fully, as well as the possible solutions required to solve it and also which one to apply to solve it within 5 minutes. This means you can do it yourself. And it is therefore a lie, because if you could do something in 5 minutes yourself, you would not be hiring someone to do it for you.
“This will be easy for an experienced developer”
Personally, this one is worse than the previous phrase, and here’s why.
This phrase tells me you understand that I am experienced in my field, that I am knowledgeable, and you recognise that I can fix your problem. What it also tells me is that while you recognise my ability to fix your problem, you don’t value my knowledge enough to pay what it’s going to cost.
What is happening in both instances is that you’re trying to get me to keep my price down, because you think it will be a simple solution and you assume therefore it will be quick to fix. Unfortunately, in most cases, you’re making the same mistakes as the folks who thought that Titanic was unsinkable.
If the problem was a 5 minute solution, you wouldn’t need to hire me to fix it. And my experience, comes with a price. You either value the fact that I am capable of solving your problem, or you are looking for a cheap solution, which usually means taking shortcuts, something that I am not prepared to do.
Successful solutions take time, planning and thorough testing. By making assumptions up front, you are setting the project up for failure, and nobody wants that.
If you’re a fan of sci-fi, specifically Douglas Adam’s “Hitchhiker’s Guide to the Galaxy”, you’ll understand both the importance of this number, and the reference in the title.
I do think it’s sort of apt that the number 42 was used in this context. When I hit 40 I felt good about it, but now, a mere 2 years later, I think I have a much better idea of who I am as a person than I did two years ago, and my place in the world. Isn’t that weird, how two years can make such a difference?
What I have noticed is that in the last 2 years I have been focused less on worrying about what others are doing around me and more on just being a better version of myself. This way of thinking has bled through into all areas of what I do, both personally and professionally, and I think I’m really starting to see fruitful results.
So maybe the answer to the life, the universe, and everything, lies in having the confidence to being honest with myself as to my strengths and weaknesses, which, for me anyway, only comes from being on this earth for 40 years. I feel like there are people who get there earlier than I did, but I’ve learned that we all have our journey to follow, and each is unique, and that’s OK.
This morning I learned that the execution of Archduke Ferdinand, which kicked off WWI, happened on this day, but that the Treaty of Versailles, which effectively ended WWI, also happened on this day.
Isn’t that amazing, two major events that changed the world, happened on exactly the same day. This really gives me some food for thought.
At the end of it all I’m grateful for the 42 years I have spent in this planet, and I look forward to the next 42.
I don’t think I completed my year end review for 2018 or wrote a resolution post for 2019. However a bunch of things have happened so far this year, mostly in the past few months. As it’s almost exactly halfway through the year, I thought it might be cool to share them.
As one door closes…
Towards the end of last year, my wife and I decided to sell the family business we’d been running together since 2011. It was a hard decision to make, but as our boys were growing older we found ourselves less and less inclined to want to work on weekends, which the business required. I’m happy to say that we successfully sold the business earlier this year.
Castos and accelerator funds
Back in December of 2016 Craig Hewitt contacted me looking for someone to help him extend the podcasting plugin he had recently acquired. I’ve been working with Craig ever since, and so I was very pleased to find out the Castos, the company built to support and enhance the plugin was accepted into the TinySeed Accelerator. Which brings me to…
The investment Castos has received has allowed Craig to offer me a full time role in the company. I’ve been the designated lead developer of the project since pretty much just after we launched what was then called Seriously Simple Hosting back in 2017, but now it’s an official position, with all the benefits and responsibilities that go along with it. I couldn’t be happier, because I think we have a great product, and I now get to work with a small group of amazing people, helping our clients and plugin users from all over the world, every day, so I’m looking forward to what the next year holds for us all.
That’s not to say that I won’t be able to continue to work with my clients at Codeable. I’m lucky to have made great relationships with a group of repeat clients and I will continue to serve them in whatever capacity they require.
This position will also give me some security and time to to put into other areas, including expanding my contributions to WordPress, and getting back on the ‘building my own products’ train. Watch this space.
Castos goes to WCEU
Part of the Castos/TinySeed news was that I was able to travel to Berlin and (finally) meet both Craig and fellow Castos developers Danillo and Stefan. It was the first of what looks to become a regular, yearly team retreat. Working along side people remotely in a start up environment is a fun-filled experience, but there’s nothing like actually meeting in person. We know also know who the tallest member of team Castos is, and no, it’s not me! I’m hoping that the next team retreat will include the other members of our team.
The team retreat was timed to coincide with WordCamp Europe, which meant I was able to attend this year again. My favourite thing about WCEU is meeting people in real life, especially those I’ve only ever meet online. It’s always great to see my community team friends, but this year I was able to connect with, and meet in person, an entire years worth of ‘online only’ folks.
Professionally, 2019 is shaping up to be a pretty awesome year. I have some plans of things I want to accomplish for the rest of this year and the next, but I’m also acutely aware that one cannot succeed at everything. Win or loose, I’m exceptionally excited to be able to at least try.
The first time I discovered unit tests was when I was working with a Python developer in the late 2000s. I can’t remember how it came about, but it was through him that I learned about the concept, how you write the tests first and then write the code to pass the tests. I still didn’t understand the value, so I did some cursory research but generally moved on.
Over the course of the next few years I often saw articles or discussions on unit testing, but the idea of unit testing my code was not something that was a part of any developer position I’ve held in the last 15 years, so I never learned how to, or why I should, write unit tests.
In 2015, when I started developing for WordPress, unit testing came up again, as I looked into contributing to WordPress core. In my search to ramp up my WordPress development knowledge I discovered Know the Code, and one of Tonya’s courses was about unit tests. At around the same time I started using Laravel, which meant eventually finding Laracasts, which also included a course on Unit Testing. Through these places I eventually discovered Grumpy Learning by Chris Hartjes, who has 3 books dedicated to unit testing PHP code.
I’ve since come to appreciate the value and need for unit tests and have committed myself to writing unit tests for all new functionality I code from 2019 onward. At first it was daunting, but today something finally clicked.
It started with a new feature. I needed to verify the extension of a media file path, ignore any query strings that might be appended to that path, and return the correct base name to the actual file. Contrary to my unit testing resolution, I wrote the actual code first, but realised that when it came time to test it, I’d need to do a whole bunch of other work to deploy the code and test it manually, the old fashioned way. I realised this was a great chance to write some unit tests.
During the writing of some simple assertEquals() assertions, I soon realised that my initial understanding of the problem was flawed. By writing a few additional tests for cases I had not originally thought of, I could more thoroughly test my solution and improve it to handle these new situations.
In a round about way, I ended up eventually writing the correct unit tests I should have written in the first place, rewriting my code from scratch to solve these tests, and ending up with a much better overall solution.
The tests themselves and the code solution was trivial. What was important was the realisation that, had I started writing the tests first, my mind would have provided additional cases I might not have thought of. I would therefore be preparing myself to not only come up with a better solution, but with a much faster way to test and confirm it.
Through all this I’m getting a good grasp of which types of problems lend themselves to unit testing and which do not. I also realise that if I’m going to write more unit tests I need to allow myself more time up front to plan and execute proper unit testing. I’m still learning, so things like mocks and stubs are still far off concepts I’m aware of but will need to master. I am however excited to see how this improves as I practice, and how it improves my development output as a whole.