Windows Terminal 1.0 & PowerShell 7.0

Reading Time: 3 minutes

Microsoft has recently released both Windows Terminal 1.0 and PowerShell 7.0, both with considerable enhancements that give most other terminals a run for their money.

In this guide, I’m going to show you how to get and install the latest Terminal and PowerShell for Windows 10:

Terminal 1.0 with PowerShell 7

1. Get Windows Terminal 1.0

Get Windows Terminal free from the Store. You can also get it from GitHub’s releases but I recommend the store because it’ll stay up to date automatically.

2. Get PowerShell 7.0

Download and install PowerShell 7 from the repository: https://github.com/PowerShell/PowerShell/releases/tag/v7.0.1 (in my case it was the PowerShell-7.0.1-win-x64.msi version I needed)

3. Open up the Windows Terminal settings file

Launch Windows Terminal and open the Settings.json file ( ctrl + , ) – the settings.json will open in an editor like VSCode or Notepad.

4. Prioritize Terminal ordering

Re-arrange the terminals order so that PowerShell 7 is both first and the default: (see my settings below)

Moving the new PowerShell to the top of the list:

Ordering PowerShell 7 to the top (you can remove the older, second PowerShell code)

Changing the defaultProfile to match the new PowerShell’s guid:

Make sure the GUID’s match for the defaultProfile

If you want to add transparency to your terminal, I would also add the option useAcrylic option to each editor. (see screenshot above)

"useAcrylic": true 

5. Install an awesome theme and ‘Posh’ it up

Install-Module posh-git -Scope CurrentUser
Install-Module oh-my-posh -Scope CurrentUser

Also get PSReadline if you’re on PowerShell Core:

Install-Module -Name PSReadLine -AllowPrerelease -Scope CurrentUser -Force -SkipPublisherCheck

6. Set the default theme to start with terminal

Make sure you’re awesome new theme is enabled by default each time you close and open the Terminal:

Run “notepad $PROFILE” and add these lines to the end:

Import-Module posh-git
Import-Module oh-my-posh
Set-Theme Paradox

7. Get a great font and working glyphs in Terminal 1.0/PowerShell 7

Download the Cascadia Code 2005 font from here and install it.

Then ensure you are calling the font in your settings.json file for each terminal with the below line of code:

"fontFace":  "Cascadia Code PL"
Setting the font for each Terminal

Inspiration for this article came from both Make Your PowerShell 7 Truly Powerful by Jung-Hyun Nam and How to make a pretty prompt in Windows Terminal with Powerline, Nerd Fonts, Cascadia Code, WSL, and oh-my-posh by Scott Hanselman.

Ubuntu 20.04 LTS – Now is the time

Reading Time: 3 minutes

Linux and Ubuntu, in particular, have been on the up and up these past few years. Today marks the release of Ubuntu 20.04 LTS, a major milestone in the releases for this massively favoured Linux distribution.

LTS?

LTS stands for Long Term Support in the release cycle world of software development. It marks a version that is usually safe to use and will be supported for a long time to come. You could almost equate it to a big release in the Windows (Service Packs/Red stone releases) or MacOS world (High Sierra/Mojave/Catalina etc.)

LTS releases come around every 2 years or so with the intention of a long supported development cycle that will ensure your software gets updates for the next 5 years (at least). You can read more about Ubuntu’s release history here.

Ubuntu 20.04 desktop

What’s New?

While there is a lot to go through, some of the highlights I found interesting include:

  • Desktop
  • Developer-centric improvements
    • Python3 is now the default (RIP Python 2)
    • PHP 7.4 support out the door
    • Ruby 2.7
    • Ruby on Rails 5.2.3
    • Apache, TLSv1.3, client cert auth
    • OpenSSH improvements
    • PostgreSQL 12
  • Network configuration / management improvements
  • Snap store
    • The Snap Store (snap-store) replaces ubuntu-software as the default tool for finding and installing packages and snaps.
  • Linux kernel 5.4
    • Boot speed improvements.
    • Significant power-saving improvements.
    • Numerous USB 3.2 and Type-C improvements.
    • Support for raspberry pi (Pi 2B, Pi 3B, Pi 3A+, Pi 3B+, CM3, CM3+, Pi 4B)
    • Includes support for new hardware including Intel Comet Lake CPUs and initial Tiger Lake platforms, Qualcomm Snapdragon 835 & 855 SoCs, AMD Navi 12 and 14 GPUs, Arcturus and Renoir APUs along with Navi 12 + Arcturus power features.
    • Support for AMD Rome CPUs, Radeon RX Vega M and Navi GPUs, Qualcomm Snapdragon 845 and other ARM SoCs and Intel Cannon Lake platforms.
    • Support has been added for the exFAT filesystem
    • Built-in support for the Wireguard VPN.
  • ZFS 0.8.3 file system
    • Big improvements to the already snappy ZFS file system such as hardware-accelerated Native Encryption and performance improvements.

I personally found the previous Ubuntu LTS release (18.04) to be quite solid and but this release looks to take things to the next level in exciting new ways.

Why Ubuntu? Why now?

Ubuntu is a well established, well recognized name in the Linux community. It’s well used, well documented and is extremely stable and easy to use without compromising on more advanced features one may require.

Ubuntu is perfect for the following groups of people; open-source developers and web developers, people looking to use a free, solid operating system alternative to Windows, elderly who pretty much just want to use the internet to browse, schools looking to teach students about real-world development challenges/computers, open-source enthusiasts, people who are donating older hardware and want a non-complicated operating system, business people and over the past few years, even gamers (Steam now has over 6000+ Linux games).

The beauty of Ubuntu is that it runs well on high-end hardware, but runs extremely well on older hardware, to the point where it can breathe new life into old machines. There is a reason developers love and enjoy Ubuntu, it’s fast, stable, to the point and extremely customizable to please even the most hardcore of developers.

Uses for Ubuntu

  • Use is as a Kodi/Plex media streaming server.
  • Give back by running a [email protected] server.
  • Use it as a web development server to build/test/run web applications or if you are looking to learn web development, Python development or server management.
  • As it’s super user-friendly, install it on your parents/grandparents machines and say goodbye to viruses/malware for the most part.
    • Software compatibility includes; Chrome, VLC, Skype, Spotify, GIMP, Inkscape, Dropbox, Steam, Visual Studio Code as well as a host of other software.
  • Hassle-free – perfect for education campuses, schools, learning centres or donated hardware looking for a free operating system.

Ubuntu installable image files can be downloaded from here.

My list of trusted WordPress plugins for 2020 and beyond

Reading Time: 8 minutes

Ask various developers what their preferred list of WordPress plugins is and you’ll get a varied and subjective list. The immense repository of WordPress plugins available to users is so overwhelmingly vast, it’s likely that nobodies two lists will look the same. With that being said, I’ve decided to write my list of trusted WordPress plugins for 2020 and beyond.

Before I continue, I should note that all of these plugins are 100% free, unless otherwise stated. I will be touching on some Premium plugins, but only a few as I want to make this list as accessible as possible.

AMP

AMP

Category: Mobile

Implementing AMP into a website has never been so easy thanks to the official plugin for WordPress.

The plugin can be configured to follow one of three different template modes: Standard, Transitional, and Reader.

In Standard mode, you use AMP as the framework for your site, and there need not be any separate AMP and non-AMP versions. When configured to operate in Reader and Transitional modes, a given page will have a canonical URL as well as a corresponding (paired) AMP URL.

The most important thing to understand about the plugin is that it’s not serving as a mobile theme; it does not redirect mobile devices to the AMP version. Instead, the AMP version is served to mobile visitors when they find the content on platforms such as Twitter, Pinterest, Google Search, and others.

[Link]


Block Bad Queries (BBQ)

BBQ

Category: Security. (Free & Pro version available)

BBQ is a great light-weight bad query blocker that protects your site against malicious URL requests. The plugin checks all incoming traffic and quietly blocks bad requests containing nasty server requests and excessively long request-strings.

The best part of it is that it’s a simple yet solid solution that requires no configuration. The free version is good for most blogs, but the Pro version comes with a lot more configurable features such as a customizable firewall and additional scanners.

Due to this plugin’s light-weight nature, I often prefer it when compared to its meaty alternative, Wordfence Security.

[Link]


Wordfence Security

Wordfence

Category: Security. (Free & Pro version available)

Probably one of if not the most popular WordPress security plugin out there, Wordfence sets out to secure your WordPress website in a number of ways and ultimately excels at it.

Wordfence includes an endpoint firewall, login security protection, traffic monitoring and malware scanner to name a few. The free version is a superb WAF (Web Application Firewall) and shelling out for the Pro version does come with additional benefits such as real-time firewall rules and advanced scanners.

The plugin has helped me out a couple of times for websites that have been both compromised and under attack.

If you looking for solid security for a WordPress website, I think very few could argue against Wordfence – it’s extremely good at what it does and coupled with the fact that it’s highly configurable, that’s definitely a plus for any WordPress website from a tiny blog to a full-fledged corporate website.

[Link]


Contact Form 7

Custom Form 7

Category: Forms

Contact Form 7 is not the best form plugin out there. However, it does one thing really well; simple no-frills forms for your website.

The popular plugin has some missing features one would come to expect from modern WordPress form plugins (see Gravity Forms below) such as saving submissions, conditional form fields and submission redirects – but those can either be remedied with additional plugins.

When I’m looking to add a super simple no-frills form to a website, Contact Form 7 (coupled with the next plugin I’m about to discuss) is my go-to. For more advanced form features, I usually look elsewhere like Gravity Forms.

[Link]


Flamingo

Flamingo

Category: Forms. (Requires Contact Form 7 to operate)

Flamingo is a straight-forward submission saving plugin for Contact Form 7.

Because Contact Form 7 doesn’t have a submission saving functionality, one usually has to rely on another plugin to extend its functionality and this is where Flamingo comes in.

Each time a Contact Form 7 form is filled out and submitted, Flamingo will log that submission. A nice little touch is that Flamingo can export all entries as a CSV file – handy for reports.

Flamingo goes hand-in-hand with Contact Form 7 and coupling the two together will bring much desired additional functionality to a rather simple plugin.

[Link]


Gravity Forms

Gravity Forms

Category: Forms. (Premium plugin only)

Gravity Forms is a modern form solution that goes over and above the basic functionality that something like Contact Form 7 and Flamingo provides.

Features like advanced fields, conditional logic, friendly interface, hooks, add-ons (upon add-ons) and an API makes Gravity Forms a much more extensible and developer-friendly solution to working with forms in WordPress.

I’d definitely opt for Gravity Forms over Contact Form 7 if I’m going to be implementing forms on a larger website or a website that requires forms to be more flexible.

[Link]


LiteSpeed Cache

LiteSpeed Cache

Category: Caching

WordPress has many well known caching plugins, but none of them quite come close to the speed and configuration that LiteSpeed Cache offers.

I personally find caching plugins such as W3 Total Cache, WP Rocket, Autoptimize and WP Super Cache to be hit or miss – more often miss than hit thanks to their fiddly nature, but LiteSpeed Cache for WordPress takes caching to a whole new level.

The way it presents itself and works with the user to optimize caching potential feels like a breath of fresh air in a sea of other caching plugins all trying to do the exact same thing.

LiteSpeed cache comparison

I found this plugin also offers more modern features over other caching plugins such as HTTP/2 & QUIC support, ESI (Edge Side Includes) support, Cloudflare and Memcached/LSMCD/Redis support.

If you’re looking for a solid and modern caching solution of WordPress, I’d definitely urge you to give LiteSpeed Cache a chance.

[Link]


Redirection

Redirection

Category: SEO

Broken website links are not only a headache for the user but adversely affect your SEO rankings.

Redirection is a great management tool that not only shows you broken URLs users are hitting on your website, but it allows you to put a redirect in place.

The plugin also features logging, conditional redirects, import & export functionality, 404 tracking and permission-based redirection.

In most cases, the usefulness of this plugin becomes apparent if change the slug of a long-standing WordPress post and need users quickly redirected to the new URL.

[Link]


SSL Insecure Content Fixer

SSL Insecure Content Fixer

Category: SEO & Security

While something like mixed content warnings can be resolved with a few well-placed rules to a .htaccess file, SSL Insecure Content Fixer makes it even easier and future proofs requests from trying to reach http:// over https:// ever again.

The plugin comes with 5 levels of fixing insecure requests, from simple to full. The plugin also makes provision for additional fixes for WooCommerce https:// issues.

There isn’t a whole lot more to this plugin, but it still goes on my list of trusted and necessary WordPress plugins for quickly dealing with mixed content warnings and ensuring https is locked into your website across the board.

[Link]


Yoast SEO

Yoast SEO

Category: SEO (Free & Premium version available)

What can be said about Yoast SEO that most people don’t already know about? Arguably the best SEO plugin for WordPress, it’s not hard to see why this is an essential and super popular choice for WordPress websites.

While the free version pretty much contains the features most will need, there is a Premium version of the plugin that offers even more options.

If you looking for a solid SEO plugin that ticks most of the boxes, Yoast SEO is undeniably it.

[Link]


Custom Post Type UI

Custom Post Type UI

Category: Extensibility

I’m personally not a fan of plugins that set out to do just one thing, especially if said thing can be done in code. However, I will always make an exception for CPT UI.

Custom Post Type UI provides a super easy to use interface for creating and managing custom post types and taxonomies on your website. When it comes to extending WordPress websites, ACF (see below) and CPT UI is usually my first stop.

Why this plugin is not part of WordPress core yet boggles me, but never has it been so easy to manage custom post types.

[Link]


ACF – Advanced Custom Fields

ACF

Category: Extensibility. (Free & Pro version available)

ACF is another amazing plugin that I believe WordPress should buy and incorporate into core. The amazing flexibility and potential it provides for a website make it a super popular and trusted option.

While the free version is fine, it’s the power of the Pro version where the plugin really shines brightly with it’s repeater fields, flexible content fields and clone field functionality.

If you’re building a website with slightly more complexity than your standard website, it’s likely you’re going to run in to the need for something that offers the features that ACF provides.

[Link]


UberMenu

UberMenu

Category: Menu (Premium Plugin)

Sure, the standard menu WordPress is fine when you’re operating within the realm of its limits, but if you looking to include larger, more complex menus then I have no doubt that you’re going to run into trouble.

UberMenu grants the ability to create some really unique, super complex menus that can contain some interesting features such as maps, contact forms, dynamic content, shortcodes and tabbed submenus.

I’ve used UberMenu many times in past projects and can vouch for its super ease of use and the huge amount of flexibility it gives a developer to really make those website menus pop.

[Link]


WP All Import

WP All Import

Category: Data (Premium Plugin)

If you’ve worked with data manipulation like getting batches of data out or into a WordPress website, you’ll know it can be a bit of a hassle. Thankfully WP All Import has come to my rescue a few times in the past.

WP All Import grants a developer to import data into to any theme or plugin field, update existing content with new data, import WooCommerce, ACF, users, listings and also includes automatic scheduling for those times when you want imports/exports to run on a timely manner.

The ability to also get exported data out of a plugin (and into Excel, XML or CSV) or the need to get CSV, RSS, JSON, XML, or Excel data sources into a plugin or custom post type quickly makes WP All Import a highly valuable tool well worth the price tag.

[Link]


I hope you enjoyed my list of trusted WordPress plugins for 2020 and beyond. Going forward, I’ll try keep this list updated by adding any other trusted plugins I use on a regular basis that I feel belong on here.

Derivco DevNight: The Missing Piece with Juval Löwy

Reading Time: 3 minutes

Last night I had the pleasure of attending a Derivco DevNight featuring a talk by Juval Löwy, founder of IDesign, master software architect and author of the book, Righting Software.

Derivco DevNight: The Missing Piece with Juval Löwy

In his 60 minute talk, we learnt why the software development pipeline is currently broken; the dissonance between software development and coding against requirements handed down by the “ivory tower”.

To be honest, I can’t argue with that. Development can be frustratingly slow, cumbersome, even under the guise of Agile methodologies. As Juval discussed, currently we have too many devs, leads and project managers going through the daily or weekly “Agile rituals” – the stand-ups, the feedback loop – listening, but not actually doing. As devs, we go through the motions, but we’re not actually delivering Agile results – the very purpose of what Agile is trying to achieve.

His solution to the above was very simple; “Don’t just do Agile, be Agile.” Being agile involves working towards a goal with an initial set of requirements, however, the grim reality of it all is that requirements are going to change and Juval’s advice was simply not resisting these potential changing requirements but instead embracing them, being agile in your workflow and working with them rather than resisting them.

The second half of the interesting talk touched on system engineering and how to step back, and decompose a system into smaller reusable building blocks or services, based on volatility. This feeds into the above point about agile and requirements as smaller building blocks will give a team the tools to be more agile. Comparisons were drawn against vehicle manufacturing and it’s not hard to see why.

We then learnt why there is no such thing as a micro-service(s). As Juval explained services and micro-services are the same things; services (no distinction between major or micro). Using the analogy of pumps found in your car and pumps found in your house (a pump is just a pump – we don’t distinguish between a pump and a micro-pump as it serves the exact same purpose). Hard to argue there.

The end part of the talk he touched on a rather opinionated view (Juval admitted this) of developers taking a long hard look at their future career with the inevitable rise of AI around the corner and what just might happen when AI learns to code more effectively than humans. I felt this served more like a mental take away – food for thought.

The talk was a very interesting one and definitely left me with lots of takeaways to think about. How as an industry, we need to change, not just go through the motions of doing tech rituals such as daily-standups but become more agile in our approach itself with the help of the right tools such as smaller building blocks.

If you’d like to know more, I suggest getting a hold of Juval Löwy’s book Righting Software which takes a much deeper dive into the above topics I’ve covered above.

Personally I want to say thanks to Derivco for putting on such a kick-ass evening – these types of events are rare in Durban and it’s always great to both attend them and appreciate the amount of effort that goes to putting one of these events on.

Laragon: The fastest way to setup WordPress locally

Reading Time: 2 minutes

Usually, when it comes to setting up a local dev environment you have a few options. I’m here today to share with you, the joy that is Laragon. The fastest way to set up WordPress (or any other PHP CMS really) on a local machine.

Depending on your operating system, most people would opt for a WAMP / LAMP or MAMP stack setup on their machine. Some prefer running a VM with their own web server they have set up.

Vagrant is a popular option which is essentially a Virtualbox VM in the background. Another popular option is WampServer or XAMPP, but these are quite specific to Windows (although XAMPP is cross-platform).

Recently I came across Laragon (Windows only), which is essentially XAMPP on steroids. Never before in my 15+ year career have I been able to set up a brand new WordPress (or Drupal) installation as quickly as Laragon can do it.

I was using Xampp for local development until about a year ago when I found Laragon & I haven’t looked back since. This is seriously the most powerful local development tool I have in my entire “developer toolkit”.

Laragon Forum user (Link)

You can go from having a freshly installed Windows operating system to having an entire WordPress installation in less than 30 seconds. In fact, I created a .gif to show you the magic in action. Behold;

Laragon comes with hosts file management so that means it will automatically create a neat local URL for you projectname.test – gone are the days of having to use http://localhost/projectname or http://127.0.0.1/projectname – Laragon handles this for you out the box.

There are quite a few additional benefits and features that come with Laragon;

  • 1-click PHP extensions enable/disable
  • Comes with phpMyAdmin and HeidiSQL (my preferred MySQL GUI manager)
  • HTTPS/SSL support
  • Ability to run NGINX alongside Apache
  • Extremely light-weight and blazingly fast (I can confirm)
  • Git / Redis / Memcached integration
  • Extendable – Laragon setup can be customized in nearly every way
  • Cmder integration out the box for shell access
  • Ability to install and switch between additional PHP versions
  • Symfony, Laravel and Drupal 8 1-click setups out the box
  • Additional support for Node.js/MongoDB, Python/Django/Flask/Postgres, Ruby, Java, Go once installed

Laragon comes in 3 flavours; Full (~130MB), Lite (~85 MB) and Portable (~18 MB) – I’d suggest the Full version to get you up and running fast, but that depends on your preference.

Batch delete all local Git branches

Reading Time: < 1 minute

If you’re tired of having tons of local branches and need a quick way to batch delete all local unused git branches, then this is for you.

Make sure you switch to develop or master before running this:

git branch --merged | grep -v \* | xargs git branch -D 

Once run, your local branches will look a lot cleaner and you should see a summary of the deleted local branches like so:

Deleted branch 403canonical (was 8f34dcbfef).
Deleted branch refactor (was 80b4b6f9d0).
Deleted branch adjust (was 0621a85c71).
Deleted branch QCT-153 (was 5d7f67240c).
Deleted branch bug/forms (was c5be3892f8).
Deleted branch enable-minify (was 48357f0583e).
Deleted branch images/improve (was 48bc63a9ca).
Deleted branch image/increase (was 6fd4126a78).
Deleted branch image/optimization (was f2bd2a9331).
Deleted branch image/optimization (was fdfd409582).
Deleted branch image/tweaks (was 13555da609).
Deleted branch jobs-fix (was cf92f7759b).
Deleted branch jsalter (was 7db8446f0c).
Deleted branch menu/detectionfix (was 998721ed92).
Deleted branch pagealias (was 5ca729a480).
Deleted branch path-update (was 73415d677d).
Deleted branch phpmailer (was 08c62cd6ee).
Deleted branch prod-fixes (was 5f3bab0220).
Deleted branch robotstxt (was 7d7e669375).
Deleted branch update/articles (was f14acbd8c6).
Deleted branch sitemap-fix (was a0e63485f8).
Deleted branch various-fixes-20 (was e87cf28406).

10 Tips for Travelling in New York

Reading Time: 6 minutes

Over December 2019, I had the amazing opportunity to do some travelling in New York. Here are my top 10 tips for travelling in New York:

Download a Toilet App

You’re human (I hope) and have human needs, specifically when nature calls.

New York is huge and being in a city of that size, it isn’t always so clear where members of the public can go to relieve themselves. A life-saving app I had on my phone was a public toilet finder app that showed me all public toilets around me no matter where I went.

I cannot stress how much time, pain and stress this saved me. I used Where is Public Toilet which even has a nice feature to download maps to use later offline – helped when I had a spotty signal or no access to WiFi. Android / iOS (not available on iOS, but Flush seems to do something similar)

Expect to walk. A lot.

New York is absolutely huge, but I’m sure you knew that already. Expect to walk at least 7 – 10km a day if you are wanting to sight-see, shop, experience the city. You will be doing lots of walking.

Wearing comfortable walking shoes is a must. Forget looking fashionable – dress for comfort first. The last thing you want to do is get blisters on your feet after the first day of exploring. That can really put a dampener on your visit.

Ditch Uber and Lyft; enter Via

Don’t get me wrong, Uber is a fantastic app. However, I found it quite pricey to use in New York.

In most cases I found using Lyft cheaper than Uber, but I still found it quite pricey to use regularly getting around.

Thankfully after chatting to a local, I learnt about Via – another transportation app that is even cheaper than Lyft. It instantly becomes the go-to app for cheaper transportation around New York.

Via calls itself a Low-Cost Ride-Sharing app and it does just that. Sometimes you will share a ride with a complete stranger, but most of the time this wasn’t the case.

You can download Via on Android and iOS.

Get an easy to take off jacket and beanie

If you’re going to be travelling to New York between October – March, you can count on some really cold days.

Fun fact; most heat is lost from the human body via the top of the head. Travelling around New York during this cold period, without some sort of head warmth is ill-advised.

You’re going to find that most (if not all) inside places are heated which will cause an annoying problem with that warm jacket you’re wearing. You’re going to start sweating and you are going to want to take it off. Make sure you wear a jacket that is easy to take off and put back on again.

This take-off jacket / put back on will become your most annoying new habit in New York and the last thing you want, is to spend ages doing this.

Tipping is a must

South African’s are pretty used to tipping the customary 10%+ at restaurants, but in New York, 18% – 20% seems to be the norm.

A bit steeper than what we’re used to. Also, tipping seems to go a bit further than waitrons at a restaurant, car guards or even your petrol pump attendant.

If you’re a lady and getting your nails done, expect to tip. Likewise, if you’re getting a tattoo. Don’t forget to tip your service lady/tattoo artist.

A slave to WiFi

As a Vodacom user, I had pretty spotty access to mobile data. When roaming did work, it was expensive and intermittent.

Scanning for public WiFi to use (always be careful using public WiFi!) and making use of, by connecting to any hotel, retail stores and restaurant WiFi you possibly could, become a must.

I highly suggest downloading offline Google Maps for the entire area you’re going to be on your holiday to save that extra bit of data/hassle of getting lost when there is no signal/connection.

Don’t be shy to ask for the WiFi password, worst case scenario you have to ‘be a customer’ by buying a cup of coffee.

Your daily budget

This is a subjective one. If you’re planning on eating a meal at a decent sit-down restaurant (not fancy), expect to pay $75 – $100 for a couple incl. tip. If you can get by on fast food, expect about $25 – $50 for a couple for a meal.

Spending money for activities will vary depending on what you want to do, so plan accordingly.

It’s worth mentioning that America has a nasty habit of excluding sales tax. So don’t expect to pay the price you see. Instead, you will need to add 8.75% over and above the sticker price. (Buying something for $25? It’s actually going to cost you a little bit more)

Transportation such as Via (see above), you could budget around $10 – $25 a trip depending on where / how far you want to go.

I found using an app such as TrabeePocket helped massively with budgeting and keeping track of spend (especially viewing that back in SA Rands). You can download TrabeePocket for free for Android and iOS.

Carry identification with you

If you’re planning on doing some retail shopping while you’re in New York, be sure to carry some identification with you.

Swiping your card for orders over $600/$700+ in one go will likely prompt the cashier to ask for some sort of identification.

A valid South African drivers license will do the trick.

Carry some cash with you

Despite being a first-world city, you may be shocked to find out that not everywhere accepts a card for payment. (97% – 99% of places do though, even most street vendors)

While this is very uncommon, we found ourselves an obscure little Japanese ramen place that only accepted cash.

Cash is also great for tipping people on the go.

A backpack is a must

A decent sized backpack was extremely helpful during our time exploring New York. Not only was it useful for carrying bottles of water and some snacks, but it was super handy when it comes to shopping.

The last thing you want to do is journey all the way back to your AirBnB / Hotel to put your shopping down just so you can go and explore again.

Bonus Tip: Times Square

If it’s your first time to New York, it’s highly likely that you’re going to want to visit Times Square.

The reality is that Times Square is going to be super busy no matter what time of the day / early evening you go.

My advice would be to go after 11pm / 12am. The reason being that the hordes of people will be significantly less and the electric billboards will shine brighter than they ever have for you – it will be also easier to navigate to take photos.

On the subject of taking photos – avoid taking photos with the super heroes/characters in costume on the street. They will charge you a pretty penny.

What Development Language or Framework Should I Learn in 2020?

Reading Time: 2 minutes

If you’re asking “What development language or framework should I learn in 2020?”, then this post is for you! I too was intrigued by this question and it got me wondering how I should go about figuring this out.

It dawned on me that the best way to figure this out, would be looking at what dev jobs are being asked for – not just locally, but internationally too.

My thinking is those job postings by language and country will surely give an indication as to what employers are looking for and what skills are in demand. And here are the results:

Global Top 3 Development Languages

Globally, here are the top 3 languages you should strongly consider learning in 2020: (no shortage of jobs with these skills)

  • Java
  • Python
  • React

(Note: C# came in 4th place)

South African Top 3 Languages

South Africa paints a slightly different landscape. Locally speaking, here are the top 3 languages you should strongly consider learning in 2020: (no shortage of jobs locally with these skills)

  • C#
  • PHP
  • Java

(Note: ASP.net came in 4th place)

Bottom 3 Development Languages

However, based on my findings, the 3 languages/skills with little to no jobs on offer:

  • Cordova
  • Haskell
  • Rust

(in other words, if you’re job hunting, I’d say it’s safe to give these a skip learning in 2020)

Global Top 3 Frameworks

Two front-end frameworks seem to come out on top here.

  • React
  • Angular
  • WordPress

(Note: Vue came in 4th place, with Laravel not too far behind it)

A closer look

Below you’ll find a city in a country with dev languages and frameworks ordered by the number of jobs. To gather this info, I used LinkedIn Jobs to search for keywords, left with the default option of “within 25km” of the city.

Just a note: The cities and dev languages I’ve selected are based on my own interests, but to be broad, I’ve included some languages and cities that don’t necessarily appeal to me but may provide insights to others.

I apologize if a dev language/city you were looking for isn’t listed below.

It should also be noted that these results are based on just one job website (of many) and some countries/cities may not use LinkedIn Jobs to it’s fullest potential.

Cape Town, South Africa

LanguageJobs
PHP4582
C#4545
Java4419
ASP.net2020
Python1943
Angular1745
WordPress1257
React1086
Node973
Laravel878
Ruby573
Django538
Drupal335
Ionic314
Cordova304
Vue302
Kotlin107
Haskell17
Rust9

Johannesburg, South Africa

LanguageJobs
C#4879
Java4633
PHP3246
ASP.net2237
Angular1425
Python1030
WordPress688
Node643
React606
Laravel604
Ruby250
Django219
Vue178
Drupal158
Cordova150
Ionic132
Kotlin63
Haskell25
Rust19

Durban, South Africa

LanguageJobs
C#659
PHP406
ASP.net293
Java223
Angular194
WordPress170
Laravel95
Node94
React83
Python82
Drupal48
Vue47
Ruby26
Ionic24
Django17
Cordova11
Kotlin6
Rust0
Haskell0

Dublin, Republic of Ireland

LanguageJobs
Java1648
Python1411
C#844
Angular646
React628
Ruby423
PHP325
ASP.net323
Node230
Vue140
Kotlin95
WordPress74
Django62
Laravel44
Rust15
Ionic11
Drupal10
Cordova9
Haskell8

London, United Kingdom

LanguageJobs
Python14753
Java10704
React7300
C#6212
Node3436
Angular3190
PHP2688
Ruby2501
ASP.net1609
WordPress1244
Vue1107
Kotlin991
Django876
Laravel372
Drupal351
Haskell176
Rust148
Ionic38
Cordova36

Brighton, United Kingdom

LanguageJobs
React410
Python345
Java314
Angular239
PHP223
ASP.net220
C#175
Node144
Vue107
Ruby106
WordPress88
Laravel78
Drupal33
Django21
Kotlin20
Haskell1
Cordova0
Ionic0
Rust0

Miami, Florida, United States of America

LanguageJobs
Java725
React674
Python663
C#391
Angular207
WordPress171
PHP155
Node144
Ruby94
ASP.net82
Kotlin39
Vue31
Drupal28
Django10
Cordova8
Laravel7
Ionic7
Rust5
Haskell0

New York, United States of America

LanguageJobs
Java10936
Python9695
React4391
C#2966
Node2391
Angular2314
Ruby2151
PHP1316
ASP.net1290
WordPress669
Vue574
Django474
Kotlin428
Drupal282
Laravel96
Rust82
Haskell66
Ionic49
Cordova41

San Francisco, United States of America

LanguageJobs
Python16645
Java12693
React5349
Ruby2989
Node2568
C#2422
Angular2255
PHP1314
Django752
Vue648
Kotlin610
WordPress477
ASP.net274
Rust211
Drupal205
Ionic87
Haskell85
Cordova75
Laravel40

Auckland, New Zealand

LanguageJobs
React173
Java156
Python137
C#114
Angular86
PHP71
Node45
Vue39
ASP.net28
Ruby28
WordPress23
Drupal18
Kotlin16
Laravel9
Ionic5
Rust2
Django1
Cordova0
Haskell0

Sydney, Australia

LanguageJobs
Java1329
Python1299
React696
C#
631
Angular460
Node371
PHP343
Ruby310
WordPress162
ASP.net154
Vue136
Kotlin96
Django66
Drupal54
Laravel33
Haskell19
Rust16
Ionic6
Cordova4

Mumbai, India

LanguageJobs
Java1773
Python1090
Angular778
PHP755
C#658
React590
Node543
ASP.net477
WordPress267
Ruby262
Django175
Laravel154
Vue117
Drupal85
Kotlin78
Ionic48
Cordova35
Rust5
Haskell4

Toronto, Canada

LanguageJobs
Java3190
Python2471
React2188
C#1701
Angular1644
Node1046
ASP.net682
Ruby624
Vue476
PHP364
WordPress217
Kotlin216
Django146
Ionic74
Drupal66
Rust62
Laravel45
Cordova41
Haskell4

São Paulo, Brazil

LanguageJobs
Java2121
Python1136
Angular907
C#849
React837
PHP829
Node531
ASP.net377
Ruby375
Vue218
WordPress199
Kotlin193
Laravel153
Django95
Ionic91
Drupal40
Cordova25
Haskell3
Rust2

Dubai, United Arab Emirates

LanguageJobs
Java40
Python33
C#26
PHP17
Node15
React14
ASP.net12
Angular9
Ruby9
Kotlin4
Vue3
WordPress2
Laravel2
Drupal2
Django1
Ionic1
Cordova1
Rust0
Haskell0

Disclaimer: The job results listed here were taken in early Dec 2019 and were correct at the time of publishing this post.

PHP in 2019 – PHP 7.3 is the new minimum. Here’s why.

Reading Time: 2 minutes

Web server admins. Content Management System users. Anyone who runs a WordPress, Joomla and Drupal website. Laravel users. All take note; it’s time to upgrade your version of PHP.

At the very core of most of the usable web, is PHP. An underlying scripting language that powers 79%80% of the web.

Because of its popularity and the sheer amount of websites running PHP, it has a common underlying issue; while new versions of PHP are released regularly, it’s not updated on web servers around the globe nearly as often as it should be.

This poses a serious security problem for both the website and users visiting the website.

You can blame lazy web server (or network) admins, or slacking service providers or even website owners who run older websites not ensuring that their old website ‘plays’ nicely with newer versions of PHP.

If you’re not too tech-savvy, you may be asking “So what? Why should I even care if my WordPress website is running an older version of PHP?” The short answer is two-fold; 1) Security (the most important no-brainer answer) and 2) “Progress”.

“Security, got ya, but why should I care about progress?” you ask. There is a myriad of fundamental reasons why both your website and your PHP version should be kept up to date.

Firstly, the web and more importantly web technologies move at an astounding pace. As the months go by, incremental improvements are made to the scripting language, massive security improvements are made and more tools, features and optimizations become available to developers.

Web developers heavily rely on a scripting language such as PHP to deliver the end product to a user be it a web application or website.

Secondly, because of this tectonic shift between the web server, PHP versions and the code running on your website (ie. a WordPress CMS) it’s common for a CMS to get updated while the PHP version is left behind; usually decaying to a point where it becomes almost critical to update.

This is usually where the problems begin to occur as certain components / plugins / features cease to stop working on newer versions of PHP. This can become a very expensive and time-consuming exercise to try to align older code with modern versions of PHP. It’s something that could have been totally avoided if PHP was just incrementally kept up to date on your web server.

As of 2019, a shocking amount of websites still run older versions of PHP, specifically PHP 5 which is now discontinued. As is PHP 7.0.

In fact, PHP 7.1 is on it’s way out too with PHP 7.2 reaching the end of it’s life span next year, around this time (no more security updates). Here is a handy chart to make sense of it all:

PHP supported versions
30 Nov 2020 is when PHP 7.2 stops receiving security updates. Source.

Going into 2020, one should be aiming for a minimum of PHP 7.3 (7.4 if possible) to avoid both headaches and heartbreak. If there is one thing I can ask you to take away from this; it’s the knowledge that not maintaining your PHP version can become a very costly lesson.

Drupal: 2019, the year of Twigging

Reading Time: 2 minutes

Drupal 8 Logo

Having worked with WordPress and Joomla over the years, one CMS always eluded me; Drupal. It wasn’t that I never wanted to work with Drupal, to be honest with you, the opportunity to learn while working with it just never happened.

I initially stumbled upon Drupal 6 many years ago – but I never fully explored it. I then dabbled in a bit of Drupal 7 many years later, but never to the extent of producing anything official or worth showing anyone. Thankfully this year my luck changed and I finally got around to extensively working with Drupal 8 on not just one, but two major projects.

Drupal is a free and open-source content management framework written in PHP. Drupal provides a back-end framework for at least 2.3% of all websites worldwide – ranging from personal blogs to corporate, political, and government sites.

Wikipedia

I’ll admit, going into Drupal my knowledge beyond the basics wasn’t very high. I found the learning curve a little rough initially, especially when I’ve been so accustomed to WordPress for so long.

Along the way, there were many curve balls that caught me off guard; from the way Drupal’s internals work to the way it expects the developer to work. An added level of complexity came from layering Docker on our build and also getting comfortable with Drush (a command line tool for Drupal), all while building a time-sensitive project that had to be delivered on time and on budget.

Over the past 10 months, working exclusively with Drupal 8 and successfully launching two large websites I’ve found a new respect for this CMS. As a CMS, what it sets out to achieve, it does fairly well albeit it still has some rough edges, but it’s nothing a little bit of work can’t resolve.

Along the way, I did encounter a few head-scratchily annoying issues (some settings can be fiddly), but nothing that was a deal breaker when it comes to learning more and using the CMS again in the future.

One small gripe I feel I must mention is how Drupal 8 uses Twig for theming. While it’s meant to be more ‘developer friendly’, I find it’s the opposite especially when one has to look up the Twig equivalent of commonly used PHP functions.

Twig is a template engine for the PHP programming language. Its syntax originates from Jinja and Django templates.

Wikpedia

Would I use Drupal to build a simple one page website? The answer is no. I’d still resort to using WordPress or at least straight-forward HTML. My feeling is that Drupal is a little over-engineered for that. But if you ask me to build a booking website or something that requires a bit of data capturing with web presentation on the front-end, I’d definitely be more open to using Drupal over WordPress.

With Drupal 9 on the horizon, the future for Drupal looks bright. I look forward to revisiting this CMS one day soon.