Category: Software

Apple has just released the macOS High Sierra with new features, one of them is the brand-new Apple File System (APFS) that is optimized for flash storage which newer Macs enjoy. If you happen to be using macOS in a virtualized way, e.g. with VMware, you may have trouble getting the new OS to work as the upgrade forces conversion of the boot partition to APFS which the VMware UEFI does not support.

To solve the problem, we need to let the VMware UEFI know APFS and luckily the APFS driver can be extracted from the High Sierra installer as a UEFI driver executable. We can then slip the driver to the UEFI BIOS that bundles with VMware Player itself and everything should work.

Getting Started

To simplify things, you can download my modified UEFI BIOS (tested on VMware Workstation Pro 14, may work for other versions too). If that ROM doesn’t work for you, go after these steps to get a modified BIOS with APFS support.

Use UEFITool to open EFI64.rom located at [VMware Installation Folder]/x64/, select File > Search and choose GUID tab. Type in 961578FE-B6B7-44C3-AF35-6BC705CD2B1F and double click the result inside Message section. Leave this screen for now.

Extract the FFS tool to the same directory as the APFS driver file. Open your command prompt, change directory to that place and run this command:
GenModapfs.efi .

Go back to UEFITool, right-click the selected item and choose Insert After, then select apfs.ffs from the FFS directory. The screen should look like this.

Save the modified ROM with the name efi64_apfs.rom to your VM directory.

Applying the new UEFI BIOS

To get the modified UEFI BIOS to work, use a text editor to open the VMX file. Ensure the file contains the following lines.

1

2

firmware="efi"

efi64.filename="efi64_apfs.rom"

Save the VMX file and start your VM, your macOS High Sierra will now boot as expected with an APFS volume. Voila!

After I set up my streaming server, there are some problems brought by the design. Using CPU to process the streams will consume lots of CPU cycles and if the streaming server have lots of connections, resource to handle them will run low if the machine itself does not have strong CPUs. NVIDIA’s NVENC is a way of offload the transcoding to GPUs that is dedicated to such processing and leaves much more CPU cycles for other purposes. However, installing NVIDIA’s driver is a nightmare, which is why I decided to write it down for future reference.

Recently, I’m working out a system to smoothly stream live events for an organization. That is pretty new to me and, after a bunch of research, found that Nginx with the RTMP module seems to be a good choice. There are many difficulties when setting all this up and after several days of testing, I found a good setting that is worth a post.

Setup Nginx and RTMP module

First, let’s get Nginx set up. In order to use the RTMP module, we need to compile that as an Nginx module. It would look something like this:

If you can see that Nginx RTMP is included, you can go to the next step. Before we proceed to configuring Nginx for live streaming, we should confirm what kind of resolution we should provide for live streams and how much hardware power you have.

Prerequisites

For converting live streams into several streams for adaptive streaming, you need to make sure your server have enough CPU for such workload. Otherwise, the live stream will suffer from continuous delays and/or server becomes unresponsive. I have spawn some EC2 c3.large and c3.xlarge instances, test with them and I found out their optimized CPU can handle such workload with ease. Something that also worth mention is about the I/O limits of the disks. If possible, store the HLS fragments generated to an high-speed SSD helps maintain smooth streaming experiences.

CPU Usage when using an EC2 c3.xlarge instance.

Then, you also need to think about what kind of resolutions you will be offering for adaptive streaming. Generally about 4-5 variants are good enough to provide great loading speeds for different network speeds and devices. Here’s my recommended list of variants used for live streaming:

240p Low Definition stream at 288kbps

480p Standard Definition stream at 448kbps

540p Standard Definition stream at 1152kbps

720p High Definition stream at 2048kbps

Source resolution, source bitrate

Configuring nginx for live streaming

Here is my own nginx.conf with comments that you can have references on.

I think everyone know the news that Microsoft is ending support for Windows XP at today. Despite the fact that the system itself is old and difficult to maintain, it is Microsoft’s best seller in the history. Since 2001, it sold more than 500 million copies around the globe.

You know, almost 20% of all websites are created with WordPress. Many of them have security risks as their version of WordPress is not updated and old versions usually will have lots of vulnerabilities and make them easy to be hacked in. Cases of WordPress sites getting hacked is getting more serious today.

Finally, in the WordPress 3.7 update, it introduces a new feature that is quite attractive to me and solve the problem of using old versions of the WordPress core. Now, the WordPress system will check for core updates, plugins updates and themes updates & automatically install them when they have new versions.

For me, this feature has a great potential that I don’t need to check and install updates as often as what I’ve done in this blog. Also for blogs & sites that don’t need to update so often, this feature reduces the work to keep up the site.

However, as I tried, I can’t see any controls to fine tune the behaviour of this great auto update feature as some people may not want auto updates or they want to control how it should behave.

Overall, I’ve waited this feature to be available in WordPress for a long time and it has come true!

That’s a scary news. Everyone knows that Windows XP is the operating system that has the largest threats and it’ll expire after August 4, 2014. If you have seen this and you’re still using Windows XP, please upgrade your operating system ASAP.