Thoughts on Unit Testing

I’ve never been someone who understood the value of unit testing. During my programming studies, when I learned new languages like PHP or JavaScript, unit testing was never a topic that came up. The byproduct of a non university, tertiary education I guess?

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.

The Clear View – Get the MOST from your freelance developer

A-Clear-View

Have a clear understanding of your project requirements to ensure you get the most out of your freelance developer

The purpose of this post is to ensure that you know precisely what you need to do in order to get the most out of the freelance developer you’re about to hire. You need a complete understanding of what you want to achieve before even looking at the Freelance for Hire pages. Seriously. Otherwise you will waste time and money and nobody has an endless supply of either.

Here’s a great example…

You are an expert teddy bear maker. You love them. You know that your particular brand of bear is exceptional and you want to build a business out of them. You contact a developer and you say, “I want to sell teddy bears online.”

While an admirable plan, this is too vague and will require a lot of work to fine tune into a final requirements list. Instead, look at developing a breakdown of your requirements that outline every aspect of your business, your needs, your requirements and your customer deliverables.

Something like this…

–          I would like to build an eCommerce store that can help me to sell my teddy bears

–          The store needs to support a product gallery that can showcase each bear

–          The store needs to support a short product description for each bear along with a list of specifications such as fur used, type of eyes etc.

–          I would like to accept credit card payments along with EFT and possibly Snapscan or another app payment platform

–          I would like the payment gateway to support both international and local credit cards

–          I need to add shipping to the order after it has been placed as these will differ depending on the product purchased and the location of the customer

–          I would like web hosting options

–          I have a domain and email accounts that are linked to that domain, and I think the domain and emails are managed by my internet service provider

–          I would like my store to be built with WordPress and WooCommerce

This level of detail really helps both you and your freelance developer to assess the job and what will need to be implemented to make it work. And what underlying technologies will need to be used. We will be exploring the process of clarifying these requirements in greater detail in a later post/chapter as they will help you with pre-hire and with how to harness the help of a freelancer in the scoping and investigative phase.

The detail

Have you ever tried to explain a complex concept to a child? As the parent of two very inquisitive young boys I have learned a lot about how to take something complex and breaking it down into pieces that their brains can understand.  To achieve this, you need a solid understanding of the concept yourself. There’s little point in explaining the concept of why the wind blows unless you understand high and low air pressures (I was a geography nerd at school).

The same theory applies to your product or service. Understand your product and its requirements intricately before you move into a relationship with a freelance developer. You can’t brief something unless you know it really well. This also ensures you have a clear vision and will inform all your engagements with your freelancer.

Another bonus is that it will also refine your vision and you will potentially identify any loopholes or issues before it is too late.

CASE STUDY: The successful client/freelance relationship

Craig from Seriously Simple Podcasting

–          He understands the concept of podcasting really well

–          He was able to define the value of Seriously Simple Podcasting and how its add-on services delivered value to customers

–          Already had a viable customer base

–          Understands what his clients want

–          Has completed some programming tutorials and has some understanding around the basics of web development and the concepts that define it

–          Works with his freelance developer to define scope, determine project goals and discuss possible solutions to any problems that arise

CASE STUDY: The flexible partner

Melinda from Agency Of Creativity*

–          She is a designer and owns her own agency

–          She uses a popular page builder plugin to build her client’s websites

–          Each client has a common requirement that she has to build from scratch each time and she realises that this could be developed as a plug-in

–          She isn’t clear on the underlying technologies required to make this a reality but she is happy to hire a coding expert who can work with her to achieve her goals

–          She provides clear and concise instructions

–          She knows exactly what her clients need and is the ideal person to test what is built along the way to ensure it meets specifications

CASE STUDY: The client that can’t

Dawid from Services R Us*

–          He has a vague idea of the service listing he would like to provide but isn’t sure about implementation

–          Assumes that the process is as simple as ‘just add this field to this page, it should be quick’

–          Rambles on about different ideas that pop into his head without actually getting to the point

–          Doesn’t send a clear briefing email but rather wanders with his thought processes

–          Can’t provide a detailed list of requirements but expects a clear and fixed cost/time estimate

–          Constantly contacts the developer, asking them to fix other technical issues that are unrelated to the project. He expects freelance support for free just because of the project

The first two projects are a development success. The last is a time and energy vortex that leaves both client and freelance developer gasping. The best way for your project and your vision to succeed is to have a clear vision and to be open to the reality of what is required.

*Names changed

New focus in 2019.

Usually, towards the end of a year, I start looking back at the year that has been, and looking forward to the year ahead, planning my new goals and resolutions.

This year, however, I have one very specific goal in my head. It’s an idea that actually birthed itself way back in July of 2016, when I wrote a post about why I got into development and blogging about development, in the first place. 

2018 has been a year of personal goal achievement and so for 2019 I want to get back to sharing my (limited) knowledge and experience with others, to assist them in achieving their goals, both personally and professionally. So with that in mind I’d like to announce a few changes that will happen on this blog and my podcast, and a few other additions I’m making that will hopefully help support my efforts.

The Jonathan Bossenger Patreon

I have retooled and relaunched my Patreon page. The goal of this page is to give those of you who read my blog, listen to my podcast, or generally follow me online, the ability to help fund my work. I get a lot of folks asking questions in the comments area of my blog posts, and I’d like to be able to spend more time in helping them solve the problems they present. The Patreon is the perfect place to do this.

If you’d like to be able to get a little more out of me, from answering your questions to helping you solve your WordPress or web development problems, or you want me to write about specific experiences or topics, or even interview specific people on the podcast, the Patreon is the perfect way to have your voice heard. For a small monthly fee you can help me bring you the kind of content you are looking for.

The Jonathan Bossenger Mailing List

At the bottom of every blog post there is a ‘subscribe to my mailing list’ form. If I’m honest I’ve not really used my mailing list to it’s full effect. I intend to do so moving forward. I promise I won’t bombard you with rubbish, but I will select a few useful topics or articles, from either my blog or the web, that I think you will find useful, to send to you, no more than twice a month. 

I will also use this mailing lists to announce any new exciting things I am doing.

A new focus for the blog.

You may have noticed that I have been blogging a lot more the past few months. This is because I’ve recently started working with a copywriter, who is helping me get my content out there. While I will still use this blog to share my personal experiences, it is my hope that with the assistance of the copywriter I will produce more useful and relevant content to my readers.

WP HackerCast – Season 2

If you were a regular listener to the podcast, you will have noticed things went very quiet after episode 18. This was mostly due to not really having enough time to find guests and prepare podcasts. For 2019, and with the help of my Patreon, I hope to relaunch the podcast with more interesting guests and interviews.

So, if you like the sound of all this, and you want to be more involved in what’s happening here or on my podcast, then please consider becoming a Patron, subscribe to my newsletter, or visit and subscribe to the podcast.

The evolution of a work space

It’s amazing how stories mutate. What started as a simple ‘this is my setup’ post, then turned into a ‘what a day in my life looks like’. This morning I woke up and realised it might be more interesting, and less braggy, to look at how, and why, my workstation has evolved in the last two years, since I moved from office worker to freelancer.

A long, long time ago…

First, a little background. In 2011 I moved from being employed to being a combination of self employed (in the business my wife and I run together) and contract worker (at a local web development agency called Reamdigital). This meant I was working half the time from on office and half the time from home. This lead to me purchasing my first ‘developer’ laptop, a 17 inch Dell Vostro with a Core i5 processer, nVidia graphics, 16GB of RAM (manually upgraded) and a 750 GB hard drive. About a year later I upgraded the hard drive to a 500GB SSD and put the 750 GB drive into an external housing, but that laptop lasted me for a good 5 years in that configuration.

This laptop replaced my then current desktop computer, which I had custom built in 2010, while I was still employed at a company. Using my bonus that year I built a mid range gaming computer. The original specs aren’t important, but by the time I purchased the laptop it had the original AMD Phenom II 945 processor, 8GB of RAM, a 128GB SSD boot drive, a Radeon GPU, and a 1TB Hard drive for storage. My monitor was a 23 inch Samsung Syncmaster, which my wife had kindly purchased for me as a birthday present the previous year.

Other peripherals I had purchased for the computer over time included a Logitech gaming mouse, a Logitech 2.1 surround sound set and a Logitech gaming headset. Some years before my wife got me (another present) a Microsoft ergonomic keyboard, after my previous one died.

As this computer was originally built as a gaming rig, when I purchased the Dell laptop I turned this into a media streaming centre, and played the odd game on it in my lounge. Much fun was had with my oldest when I re-discovered the MAME emulator, and we had hours of joy playing the Teenage Mutant Ninja Turtles arcade game together.

The ‘dad-station’ days

So, fast forward to January 2016 and I’m 100% freelance/self employed and working from home with a 1 year old at home all day and a 4 year old at home for the afternoon. Part of the reason I left the agency was to be able to spend more time with my boys, so I had a bright idea.

Scouring the local online classifieds, I found a second hand (this will become a recurring theme in this story) computer stand and set the laptop and monitor up in what I affectionately called ‘the dad-station’. This allowed me to work in the house seated or standing. The standing option was so that I could strap the 1 year old onto my chest and work while he sleeps, or just keep him busy while my wife tries to get some work done, or just take a break for sitting down all the time.

In the picture you can also see the Microsoft keyboard, Logitech  gaming headset and mouse, and the R2D2 bobble head I received from the Reamdigital for my last birthday there.

It was during this time that the first of a few incremental changes happened to my work setup.

Firstly, having never previously worked on the Microsoft keyboard for a full day, I discovered that the so called ergonomic keyboard I had was causing a repetitive strain injury. For whatever reason, the way I use my right little finger on the shift key on the keyboard was leading to the top joint of the finger being slowly bent to the right over time and causing pain. To this day that top section of the finger is not straight when compared to the other hand. 

While I was at Realmdigital someone suggested I look into the Logitech Marathon mouse, which I had done, and discovered it’s not only amazing battery life, but the fact that it uses the Logitech unifying software to connect, meaning you only need one USB dongle to connect multiple devices. When the keyboard starting giving me issues I went searching for a Logitech keyboard that was similar to a laptop keyboard (as I’d never experienced the problem when working on my laptop keyboard) and found a keyboard that was very similar, and also used the unifying software, so I purchased the wireless keyboard and mouse to replace my current gaming set.

Side note, the person I sold the mouse and keyboard to, a friend I know through jiu-jitsu, recently let me know that he is still using them, so I’m glad they found a new home.

At more or less the same time I purchased a second hand 27 inch monitor to replace the 23 inch, and moved from the house into our home office space. I also purchased a Gigabyte laptop stand so that I could have the bottom of the laptop screen at roughly the same height as the bottom of the monitor.

Towards the end of 2017 the Vostro laptop was in need of an upgrade, having served me well for 5 years. I opted for another Dell laptop, this time a Core i7 Dell Inspiron gaming laptop, RAM upgraded to 16GB, and a nVidia GeForce GTX 960M graphics card. It came with a 128GB M.2 SSD and I took the 500 GB SSD from the Vostro and installed it into the Inspiron, dual booting Ubuntu on the 500 GB drive and Windows on the 128 GB. I had a 320 GB notebook drive spare, which I installed in the Vostro and sold second hand to help pay for the Inspiron.

Unfortunately, as the year progressed, and as my workload and stress levels increased, it became obvious that working at home wasn’t productive or beneficial to anyone. My sons, as much as I love them, don’t understand either what a closed door means, or ‘the headphone rule’, and the constant interruptions caused me to start looking for an office space within a few kilometres radius.

In September 2017 I moved into my current office. Here is the original Instagram post I shared when I started in the new space.

What you can see in this image is the 27 inch monitor, the Inspiron laptop on the Gigabyte stand, the wireless mouse and keyboard, and the original gaming headset. As you can see R2D2 moved with me. The desk is a 6 seat dining table that was already in the office and the chair is an AllOffice contract office chair I used at home.

This is what my work space looks like now.

As you can see, quite a bit has changed.

Making the perfect space.

I replaced the dining room table with a second hand adjustable desk that I’ve made slightly higher then a standard office desk, to suit my size. I purchased an AllOffice Accent, which is a cost effective ergonomic office chair. I have definitely noticed the difference in purchasing an ergonomic office chair.

Next to my desk I have a small bar fridge and various coffee making paraphernalia, including a pour over coffee maker for when I want good coffee and a jar of Jacobs for when I just want OK coffee.

The workstation

upgraded the custom built workstation, to be powered by an MSI x470 gaming motherboard, 6 core AMD Ryzen 5 2600x, 16GB of DDR4 RAM and a Zotac Geforce GTX 1060. OS is taken care of by two 128 GB SSD hard drives dual booting Ubuntu and Windows, with the original 1 TB hard drive and a new one purchase for storage for each OS. This handles every thing I throw at it, including some down time gaming between work sessions.

My peripherals now include a new Dell 27 inch LED, the 7 year old Samsung 23 inch Syncmaster and a Philips 24 inch monitor I picked up second hand recently. My wife is currently using the other 27 inch monitor, as I found the frame around it to be too big when I wanted to add additional monitors. The side monitor stands are a combination of phone books and Dos 6.2, Windows 3.1, and Office manuals I found in the office when I moved in.

You’ll see my R2D2 bobble head stayed, and he’s joined by the Lego Mini-Me I got from WordCamp Cape Town 2017. Next to that is the travel mug we all got as swag from WordCamp Cape Town 2018.

The wireless mouse, keyboard and headset are all the same, and I dug out my Logitech 2.1 surround sound set. I was actually pretty happy to be able to use my speaker set again, as it’s been sitting in a cupboard for almost 7 years now, since the days of the ‘dad-station’. Because I switched from a laptop to a workstation, I had to purchase a separate webcam which, if you’ve not already noticed the trend, is a Logitech one.

Finally I also purchased a Samson mic for meetings and podcast recordings.

I had previously purchased a Griffin stand to replace the Gigabyte one after I moved into the new office, mostly to allow for more space. I keep it around for when I need to use my laptop at the office (mostly to copy something I’ve forgotten to sync to the cloud). In this picture it’s on my desk, but I usually pack it away when I’m not using it.

Operator

My main OS is currently Ubuntu 18.04 LTS, and I generally stick to the LTS version unless something cool is coming out on a newer version. The Windows 10 install is mostly for gaming (those games that don’t work via Steam on Linux) or if I need to test something in a true Windows environment.

Remote work

I still use the Inspiron laptop, mainly when I’m travelling, either for meetings or conferences, or working from home. I took the 128GB SSD out of the laptop for the workstation and installed Ubuntu on the 500 GB SSD as the main OS. At the moment I am considering selling this laptop and replacing it with something lighter, slightly less powerful but with better battery life, as I still do some development on it, but not as much as I before, and definitely not enough to warrant such a powerful laptop.

The Office

The office is 5 minutes drive away from home and my morning commute takes me directly past a Vida, Xpresso and Seattle, so I can mix up my morning coffee flavours.

The office has a wall size street map of the Cape Peninsula, which is a talking point whenever I have video calls with folks from outside Cape Town and provides fun conversations when my 6 year old comes to visit.

There’s also a spare chair, if I ever have physical meetings, or the 6 year old is visiting. I like to keep the rest of the office as tidy as possible, but at the time of this photo there were a few boxes of stuff left over from WordCamp.

Downtime

One advantage of my office is that because it’s actually at the back of my father-in-law’s home office, I get to enjoy the pool whenever the Cape Town weather gets too hot. This is helpful as the office itself has no air conditioning.

It also means that if my children want to visit the grandparents for a swim, all I have to do is make sure I have my costume and towel, and I can join them for some water fun.

And in case you’re wondering, all that is in the bar fridge is some long-life milk for coffee, and a few bottles of water. I leave the beers at home, to be enjoyed on my couch with my family, after a long day 😉

The future

As it stands, I probably won’t make any changes to this setup any time soon. As previously mentioned, I might replace my laptop, but there’s no real need to yet. I will probably only start looking at upgrading the computer hardware in about 5 years.

During that time, the only hardware I might consider upgrading or replacing is my headset, to a wireless option, and possibly replacing the second hand monitors with newer Dell ones. I really like the minimalist build of the Dell monitors, but at around R3000 a piece for new 24 inch models, there’s no real desire to do so.

If I do spend money on the office space in the near future, it will probably be on air conditioning. Currently it can get quite hot in the summer and quite cold in the winter, and comfort is more of a current priority than computing power.

Either that, or a bean to cup coffee maker!

WordCamp Cape Town 2018 is over, now what?

Last weekend marked the beginning of the end of my journey as lead organiser of WordCamp Cape Town. Over the course of the past two years I’ve worked with an amazing team of local volunteer organisers plan and execute our yearly WordPress conference.

The question on my mind as I wind down from the joyride that is planning a WordCamp is, what next?

So what I do know, is that I am not going to jump straight into the next big thing. Planning a WordCamp is time consuming and mentally draining, so I’m going to take a break from my contributing activities for a few weeks to recover. There are also a bunch of small WordCamp wrap up related tasks I need to complete anyway.

Once that is over however, I’m looking forward to resuming my community deputy duties, namely meetup vetting and orientations. I’ve also applied to be a WordCamp mentor, so I look forward to helping another lead plan and execute their WordCamp next year. 

Besides that, the next big thing that I’d like to help with is the next Global WordPress Translation Day. I hosted a very small translation meetup during the 2016 event, but I’d really like to plan a much bigger meetup for the next one. We have 11 official languages in our country and it would be amazing to mentor local volunteers and help them get WordPress translated into their own language.

Completing the beast – the dream of a lifetime come true.

I stumbled across Car Masters: Rust to Riches on Netflix this past week. As a bit of a petrol head I’ve always enjoyed a good car restoration show and I found the ‘upgrade and trade’ business model that was central to the series story line extremely interesting. 

Watching the team from Gotham Garage upgrading and transforming old cars into new, it got me thinking about my own recent upgrade project. I like cars, but I’ll never be the type who restores an old one in my garage as a project. I like cars that are new and shiny and go fast now. What I do like doing for fun, is fixing and upgrading computers.

This is, in part, what lead me to upgrading my old gaming pc and turning it into my current development workhorse. This is also what lead me to finally get something I have wanted for many years, a proper multiple monitor setup.

A few months ago I purchased a new Dell 27 inch LED monitor, and the Zotac graphics card I purchased has support for up to 5 screens. I still have a Samsung 23 inch monitor my wife purchased for me over 7 years ago for the original desktop build, and a few hours of scouring local online classifieds, led to me picking up a Phillips 24 inch monitor to complete the set.

I was able to work on a three monitor setup very briefly using my old Dell 17 inch laptop, which had both an HDMI and VGA output, and I found it very productive, so being able to work this way for the past few months has been amazing.

I don’t think I’ll be doing any upgrades to this set up any time soon, as for now I really feel like I’ve upgraded to my perfect development workstation.

This is why you want to become a Codeable Expert Developer

Is the Codeable Expert Developer certificate worth the weight of the digital paper it’s printed on?

In 2016 I certified as a Codeable Expert Developer. I’d already spent a number of years working with freelance platforms such as Upwork and Freelancer but Codeable has stepped out from this crowd to become my preferred platform of choice.

Why?

There are quite a few reasons why Codeable is the kingdom where every developer should hang their hat and here are six of them…

Reason 0ne: You don’t just sign on the line and instantly become a Codeable Expert

Entering into the Codeable world isn’t as simple as filling in a few forms, locating the perfect profile pic and waiting for the work to come to you. The application process tests you on your development knowledge, ability to handle difficult clients and skills in managing complex situations. For Codeable, technical knowledge is essential but customer service is critical. 

Experts have to pass stringent tests to gain access to Codeable – tests that are improved upon daily by the Codeable expert community. You have to know the web, WordPress and development inside and out before you can even be considered. You also have to demonstrate the ability to manage expectations and a willingness to engage in open communication and collaboration.

Codeable Experts are project managers, quality testers, customer relationship managers and so much more. This assures Codeable Experts that they will be connected with genuine clients and it assures clients that they are going to get connected to incredibly talented experts. And everybody knows that this level of skill doesn’t come at cost price.

The Codeable process may be rigorous and complex, challenging your skills and your experience, but it is worth every hurdle and hoop.

Reason Two: Client focused but expert friendly

The founder of Codeable, Tomaz Zaman, jokingly refers to Codeable as the Tinder for WordPress. It’s easy to see why. It connects the best WordPress experts to the best clients and everybody walks away happy and in a new, fulfilling relationship.

This is primarily driven by Codeable’s commitment to making both the customer and the Codeable expert happy. A commitment that’s clear from the moment you apply. Codeable gives every applicant personal attention and team members take the time to explain each part of the application process. They also provide immediate feedback when sent questions or concerns. I dealt with people who cared and who understood that sometimes life got in the way of the application.

Once you’ve been accepted, you need to spend some time getting to know the Codeable process. The entire platform has been designed to provide you with a really strong support structure so you can quickly learn about how to engage with customers and how to deliver the ideal Codeable customer experience.

There is a very delicate balance between the needs of the client and support for the experts and Codeable manages this perfectly.

Reason Three: Defining the ideal customer

There are three things that define a great customer within the Codeable universe:

  1. A great customer is someone who understands that a freelancer is a human being and not just a tool. Developers have lives and families. We get sick and we have to juggle the unexpected moments that life throws at us just like everyone else. Knowing that a customer can understand and accept this makes everyone’s experience so much better.
  2. The customer understands their product or service and can succinctly explain or describe the problem. They make suggestions, not assumptions. You may look at a web page and think that it should be easy for the expert to change the font but you likely don’t understand that perhaps the CSS rules aren’t structured properly or that a font change on the home page will knock on to other parts of the site.
  3. As Codeable experts we pride ourselves on our communication skills but if a client goes quiet, especially when it’s time to mark the project as complete, it can leave a bad taste. A communicative customer is wonderful to work with.

Reason Four: Codeable creates collaboration

Codeable doesn’t limit you to the Codeable workroom system. Once a project has been funded you can use any communication tool that you and the customer prefer. That said, the Codeable workroom system has some nifty tricks and treasures hidden in its depths that add enormous value to client communication.

  1. The Credentials Vault – you can share sensitive information, such as site logins, with relevant experts.
  2. The File Storage System – you can upload images, documents, video tutorials and other file objects for easy, shared access.
  3. The Live Chat System – this is also replicated as emails to both the customer and the expert so that communication is seamless and easy. The only thing missing is a voice option…

Reason Five: Collaboration really is key

There is one thing that Codeable doesn’t have…Expert Wars. On this platform the experts aren’t competing, they’re helping. It’s more like a distributed family that steps in to ensure that clients always get the best out of their chosen expert.

Codeable is the first platform I’ve experienced that has captured the true heart of the community-driven ethos of the open source platforms we use.

Reason Six: The value of Codeable

The fact that we, as Codeable Experts, are not in competition with one another makes this one of the best platforms in the world. The expert community is perhaps the biggest reason why I am passionate about Codeable and its potential. We help one another on projects, give each other advice when entering into pre-hire discussions, and share expertise on the forums. It is open access to the most impressive group of WordPress experts in the world. You are constantly surrounded by intelligent people who can teach you something new every day.

Last year I had the opportunity to meet up with a group of my fellow Codeable Experts at WordCamp Europe 2018 and it was like meeting up with old friends.

Codeable has also taught me that the knowledge and experience I have is invaluable. If you work with the right clients you don’t have to kill yourself to make a living. Since joining Codeable in 2016, my income potential has doubled and I have been able to do things I’ve never done before. I built the perfect development workstation, I took time off without worrying about my next project and I learned new technologies while taking on exciting new projects.

Some tasty tips for Codeable success…

If you want to enter into the world of Codeable, then here are four top tips that will help you get in, get involved and get insight from brilliant Codeable minds…

  1. Know WordPress inside and out. You don’t need to be a core contributor, although that would help, but you do need a good understanding of WordPress APIs, hooks and core fundamentals.
  2. Understand web development in general – a good grasp of this will come in handy as clients will often have requirements to connect their WordPress sites to third party applications and systems.
  3. Be a problem solver – the ability to install a WordPress theme and a bunch of plugins isn’t enough. You need to create custom themes or plugins and have the ability to extend those. You must have a higher than average skillset in creating custom solutions for WordPress.
  4. Customer collaboration skills – you need great customer service and a healthy attitude towards project management and communication. At Codeable you don’t win projects based on price – you need to be prepared to go the extra mile during new project discussions and to provide value to new customers.




Social Media Sabbatical

Clean Slate

I’ve been thinking a lot about my use of the internet and it’s associated tools and apps lately. I’ve never been the biggest fan of social media, but since roughly 2015 I’ve found myself getting drawn into the online conversation more and more, so much so that I’ve recently realised I may have a little bit of an addiction.

A few days ago someone suggested Catherine Price’s book How to Break Up with Your Phone. (The irony of the fact that it was suggested because I follow that person on Twitter is not lost on me). It made me realise that I need to take a long hard look at my social media and mobile phone usage and make some changes.

As such, like others before me, I’ve decided to take a month long sabbatical from social media, for the month of October. This may prove difficult, as I am attending WordCamp Johannesburg at the end of the month, and the need to live tweet stuff will be strong, but it’s as good a time as any to see if I really can do it. Hopefully it will allow me to change my internet habits and spend more time on things that matter.

In the meantime, I hope to blog more here during the course of the month, which will automatically be shared to my social media accounts. So if you want to converse with me online, feel free to leave a comment on one of my blog posts, email me (my name at gmail) or find me in the various Slack channels I hang out in.

Until the 1st of November then…

Upgrading the Psyrig

Upgrading the Psyrig

About 8 years ago I built my first “proper” gaming computer, which for various reasons I nicknamed Psyrig. It wasn’t the first gaming computer that I owned, but it was the first time I carefully selected all the components, including the case, and put it together myself from the ground up. It was built to serve two purposes, both as a development workstation and a gaming rig. 

In the years that have followed I upgraded the cooling fan, added a 128GB SSD to improve boot times and eventually upgraded the graphics card to handle newer games. After 8 good years of service, it was time for a more drastic upgrade: new motherboard, processor, memory and graphics card!

Part 1 – the plan

I’ve been toying with the idea of upgrading the computer for a while now. Since purchasing my first development laptop about 5 years ago, the computer was relegated to powering our home media centre, and the odd game when I had time. However I find gaming in the lounge to be suited better towards consoles and games that play better with controllers, so having a gaming computer not connected to a keyboard and mouse never seemed logical. What seemed even less logical was letting the power of a  gaming computer run mostly as a media centre. So, after I purchased a 2nd hand workstation to take over media centre capabilities, the gaming computer was taken to my office and I started planning the upgrade.

The purpose of the upgrade was two fold.

First, I wanted to have a dedicated workstation at my office, on which I would maintain all my work. This would mean I would be less inclined to bring work home. Right now everything is on my laptop, which I bring home, and it’s too easy to just open it up and do some work. I also wanted to make sure that the upgrade would last me at least the next 5 years.

Second, I wanted to be able to play some of my newer game purchases on it. I recently purchased the latest Deus Ex game, and I’ve not had the time to get into it. So the idea was that whenever I took a break from work I could pop in a half hour of gaming instead of watching some YouTube video.

Part 2 – the parts

After much online shopping for probably the better part of the last year, I finally settled on another AMD powered set up. I’ve been an AMD fanboy since I got into serious PC gaming and my last two computers were AMD powered.

This time around I chose a AMD Ryzen 5 2600x with 6 cores and a core clock speed of 3.4 GHz. I partnered it with an MSI x470 gaming motherboard, 16GB of DDR4 RAM and a Zotac Geforce GTX 1060.

Part 3 – the OS

This was probably the trickiest part of this build.

I’ve been a Windows user, because gaming, for as long as I remember. However, I’ve been what I like to consider an Ubuntu power user since I discovered it in 2008. On my laptop, which came with a 128GB M.2 drive, I also installed a 500GB SSD, which runs Ubuntu and is my main OS of choice. I have Windows installed on the M.2 for when I feel like a game, or if Ubuntu isn’t playing nicely with some projector, which hasn’t happened since Ubuntu 17.10. I really like Ubuntu and all the unixy goodness when it comes to development. I also liked the fact that Valve recently started working on a project that will one day allow all my games to run smoothly on Ubuntu. That day is not however today.

Because I only have one SSD installed in the PC, it means either installing Windows now and then purchasing a new SSD later to dual boot, or installing Ubuntu and only playing the games that currently work on Linux. Granted the primary purpose of the computer is not gaming, so I doubt this will be a problem, but it’s also nice to have a Windows install for things that don’t work on Ubuntu (I’m looking at you Adobe Creative Suite).

I even went as far as asking folks on Twitter, and the resounding response was dual boot, which was going to be difficult at this time.

By the time I came to the actual build, I still didn’t know what to do.

Part 4 – the build

Pre build – look how neat everything looks.

When I’m building or upgrading a computer I like to open all the boxes and lay all the new parts out on the table around the case, along with any tools I might need. After 10 or more years of building, upgrading and fixing computers, I’ve learned to make sure everything I will need is close at hand. The one thing that is missing are the cable ties, but I knew where to find them when I needed them.

During the upgrade I was reminded why I decided to not go into computer hardware for a living. Having big hands and fingers makes it tricky to get into all the nooks and crannies of a computer casing to ensure mounting screws and the like are properly installed. 

About halfway through the process, things got a little interesting. While plugging in the various case cables (power switches, front side audio and the rest) I discovered that my new motherboard supported M.2 drives! This was quite a moment, because I realised that if I could take the M.2 drive out of my laptop, I could keep the laptop as an Ubuntu machine and effectively dual boot the computer.

Taking the M.2 drive out of the laptop proved to be easier than expected, once I realised that part of the bootloader was installed on the M.2 drive. I quickly created a bootable Ubuntu USB, booted live from the USB and installed the Boot Repair tool. This reinstalled the bootloader onto the Ubuntu installed SSD, and I could now safely remove and install the M.2 drive into the computer.

The build is complete.

The next things that happened absolutely shocked me. After plugging all the cables in I booted the computer, expecting it to give me some ‘non bootable disc error’ or similar. But no, it actually booted into the Windows 10 install on the M.2 drive and, after setting up some devices, I was actually able to use the computer. I was not aware that Windows 10 was able to do this and even though I intend to reinstall everything from scratch anyway, I was pretty impressed. Maybe Microsoft has come as far as everyone says they have.

And that was it, I’ve installed Windows on the SSD and Ubuntu on the M.2 and I’m happy dual booting on the computer. I was hoping to be able to Activate my Windows install using the Windows 10 key I had installed on the old system, but it turns out the free upgrade license I have doesn’t support a motherboard change. I found this a little annoying. I could go and buy a new Windows license, but seeing as I’m only going to use that drive for gaming, I may just leave it un-activated, it turns out that Microsoft doesn’t cripple un-activated installs like they used to

Now all that’s left is installing all the software…