The past few weeks the PHP world is abuzz with Expose, an Open Source alternative to ngrok. If you're not familiar with either, they both let you share a site hosted on your local web server using a subdomain that can be accessed over the Internet. This is great for sharing a site with your client, testing HTTPS behavior with a valid TLS certificate, developing social media / SSO integrations, testing sites on real mobile devices etc.

Expose lets you run your own server for the full white label experience. It's also free of charge – except for the cost of running your own server, of course. In this article I'll tell you how to create your own Expose server and share your Joomla site with it.

Over the last few years I have standardized my access to remote servers, including GitHub, using a GPG signing subkey as the authentication credential. Having this stored in secure YubiKey hardware and locked behind a PIN is a step up in security; authenticating to the remote resource requires physical possession of an unphishable hardware token and knowledge of a PIN. Moreover, this allows me to sign GPG commits and tags.

While I had set this up on Linux and macOS since 2017 I only had the time and patience to do that on my tertiary machine, a Windows 10 one, in late 2019. I had to redo everything last week and I realised I couldn't remember a few non-obvious but critical steps. Hence this article where I explain how to combine a YubiKey, GPG4WIN, PuTTY and Git for Windows on Windows 10 to access your GitHub account – and any SSH server – securely and sign your commits.

The past few years we've seen an explosion of ″dark mode″ interfaces: bright foreground on a dark background. In this article we'll see why it's important to support it and how you can implement it on your Joomla! sites, including the emails they send out.

When you're thinking of a development, local web server with PHP you're probably thinking of an AMP stack: Apache, MySQL and PHP. In some cases your live environment may dictate using Microsoft Internet Information Services (IIS) -- typically the case with corporate deployments or when you're working with a client that's invested in the Windows platform. In those cases you are better off using IIS yourself to prevent nasty surprises from discrepancies between your local and live environments, most notably the fact that IIS does not understand .htaccess files.

In this article we will see how to create a local IIS development server on Windows 10 Professional with multiple versions of PHP and MySQL.

A tutorial on running a local Apache, MySQL, multiple PHP versions server on macOS Mojave using HomeBrew, updated for 2019. Bonus points: you can change the PHP version using the site's .htaccess like you would on most live hosts.

Compile your own PHP version from source and install it on MAMP PRO on macOS. It's possible -- despite what MAMP's developers want you to believe.

Developing PHP applications which support a variety of servers and environments requires me to occasionally develop on Windows. The first thing someone notice when switching from Linux or macOS to a Windows machine for PHP development is that it's so darned slow. Even on the exact same machine, Linux is a good 2x to 5x faster than Windows. Most of the sluggishness observer, however, is down to configuration and can be mitigated. This article explains some of the tricks I used to make PHP faster on my Windows development machines.

I've had a Surface Book with an i7 processor since November 2016. I liked the idea of a laptop with detachable tablet, the touchscreen and that it comes with a pressure sensitive pen. It makes for a neat, if slightly expensive, machine. It has a fatal flaw though: Windows 10. I tried to like Windows, I really did, but it's just so. darned. slow. File access is inexcusably slow, especially for a device equipped with lightning fast NVMe storage. In real world usage it proved 4 to 10 times slower than Linux running on the same machine... off a USB 3 attached SSD. This relegated the Surface Book to a role of a secondary machine for me, while my primary was a cheap i5 laptop with inexpensive m2 SATA3 SSD storage (and yes, there is a huge maximum performance difference to the NVMe storage, not to mention the processor speed).

To cut a long story short, I wanted to unleash the true potential of the Surface Book using Kubuntu Linux. The end  goal is having a dual boot Windows and Linux laptop with the Linux side sporting encrypted storage (because of GDPR requirements) and working keyboard, touchpad, WiFi, card reader and touch screen at the very least. I'm glad to say, mission accomplished! I'm writing this article using Kubuntu on my Surface Book. Now, this is a comprehensive How To of what I did. I am writing this mainly for me to remember all the small details and in hope I can help some of you out there. Most, if not all, of what I am writing here also applies to Surface Pro 2 and above, Surface Book 2 (2018) and Surface Laptop.

We can all agree that taking backups is important. We also agree that backups on the same medium as the backed up content are as good as no backup at all. This has led a lot of us to store our backups to the cloud, predominantly on cheap Amazon S3 storage. But how can we make sure that should the content server be compromised our backups will not be abused or deleted?

A while back I had written two blog posts about setting up an Apache, MySQL and multiple, simultaneous PHP versions environment for macOS -or Linux, same concept- and for Windows. In the meantime HTTPS has been promoted to a near necessity and so being able to build and test a site on HTTPS is very desirable. Well, as it turns out, it’s perfectly possible too!