Sharing Folders with VirtualBox


You would like to share a folder between a VirtualBox Linux Guest and a Windows Host.


  • Start your VM
  • Switch to Windowed Mode
  • Select Devices / Shared Folders / Shared Folder Settings …
  • Create a New Folder on your Linux Guest. e.g.:
    • /home/[Your User]/WinDocuments
  • Add a new Shared folder there, e.g.
    • Share Name WinDocuments
    • Windows Folder: C:\Users\[Your User]\Documents
  • Open a Terminal and run the following:
sudo mount -t vboxsf -o rw,uid=1000,gid=1000 Documents /home/[Your User]/WinDocuments

Now you should be able to copy files to and from Windows from your Linux host.


Permission Problems

There are often tricky permission problems that prevent you from copying folders to Windows. You will get messages like ‘Access denied’ or ‘Error while copying’ or ‘You do not have permissions for this operation’.

There are many ways to fix this, but the easiest is to start your the file browser of your Linux system with sudo or, if your Linux doesn’t come with an UI, copy the files using sudo.

For instance, if you have the Nautilus file browser installed, run the following on the command line:

sudo nautilus

Then navigate to your shared folder and copy the files there.

Otherwise, copy files as follows:

sudo cp /local/file /home/[Your User]/WinDocuments

Unmounting the Folder

When you are done working with the files, simply run the following from the command line:

sudo umount /home/[Your User]/WinDocuments


Fix PhoneGap Shows Black Screen after Splash

In order to test how an ObjectHub Micro App can be packaged as a PhoneGap application, I used PhoneGap Build to package up a simple application.

Unfortunately, the application that I developed started off with a big, ugly black screen instead of a splash screen.

It took me quite some digging around to find out what was going on there. So here I have collected some potential solutions for the problem.

  • Do the src attributes in the splash elements point to valid files?
  • Are you using PhoneGap Build? In that case, follow the instructions on the PhoneGap Build documentation.
  • Did you include the following in your config.xml:
<preference name="SplashScreen" value="screen" />
<preference name="SplashScreenDelay" value="50000" />

  • You can try this workaround to have your app load quicker.
  • You can try to manually handle the splash screen lifecyle as shown here.

Further Links


Test if Firebase is Initialized on Node.JS / Lambda

Firebase is build on the assumption that it will only be initialized once.

This can be a problem in Node.JS applications sometimes, especially if they are run as part of an Amazon Lambda function.

This can lead to errors as the following:

Firebase App named '[DEFAULT]' already exists.

Thankfully, there is an easy way to check if Firebase has already been initialized (firebase.initializeApp). Just wrap your call to initializeApp in the following:

if (firebase.apps.length === 0) {
        serviceAccount: {
        databaseURL: ...


Testing Internet Connection Quality (with multiple hosts)

It’s always a good idea to test the speed of your Internet connection after getting a new router of Internet provider. However, my Internet connection sometimes becomes mysteriously slow.

In that case, it is great to verify that is a problem with the Internet connection or maybe with the services you are using.

There are plenty of tools available for testing your Internet connection speed. Some of these are:

However, all of these are not very reliable, since they only test the connection of your computer to one server.

Now, the Internet is a big and complex thing and that you can download quickly from one server does not mean that you can download well from others.

Thankfully, there is the service which allows you to test your connection to a whole bunch of servers at the same time.

This can be done as follows:


  • Click on the button Test My Internet

Note that sometimes there can be an error while you perform this. In that case, just run the test again.

You should soon receive an result as the following:


Don’t be too worried when you are getting the message ‘You might have a problem …’. Usually, if you have a DSL connection anything around 1 Mbps and above should be fine.


Automatically Make Snapshots for EC2

A quick Google search reveals that there are quite a few different approaches for automatically creating snapshots for EC2 images (such as herehere and here).

All of these are rather difficult to do.

Thankfully, after some more searching around I found a great way to schedule regular snapshots using AWS CloudWatch.

CloudWatch supports a built-in target for ‘Create a snapshot of an EBS volume’:


For details of how this can be set up, see the excellent step-by-step instructions on the CloudWatch Documentation.

Delete All Binary Logs for MySQL

Today I discovered that one of my servers mysteriously ran out of disk space.

I ran the following Linux command to find all the biggest files and folders on the server:

sudo du -a / | sort -n -r | head -n 100

… and found that it was the binary logs used for MySQL replication that were gobbling up all the disk space:

7375152	/
4691636	/var
4324880	/var/lib
4284952	/var/lib/mysql
1079420	/usr
1048588	/var/lib/mysql/mysql-bin.000004
1048584	/var/lib/mysql/mysql-bin.000006
1048584	/var/lib/mysql/mysql-bin.000003
802356	/var/lib/mysql/mysql-bin.000007

Now I first found some advise that using the PURGE BINARY LOGS should be the way to go. That is true if you want to delete the logs without hurting your ongoing MySQL replication.

However, I was just interested in deleting all the binary logs and the way to do that is by logging into your server with a user with SUPER privileges and executing the following command:


Now all those pesky ‘mysql-bin.*’ files should have disappeared!


Generate md5 Hash for Maven

Maven creates and checks MD5 checksums at various times. For instance, when downloading an artifact from a repository, Maven checks whether the checksum of the downloaded files (e.g. POM, JAR) is correct.

I am uploading Maven artifacts manually to a very simple, file-based repository. This requires me to calculate the Maven checksum for artifacts manually.

What sounds like a simple problem at first actually turned out to be quite tricky (as it often does with Maven? Well, I guess it’s still better than regular expressions!).

After digging around in the project checksum-maven-plugin, I finally figured out how to generate MD5 checksum files in a way that Maven will accept. The key here was to use the Hex class from Bouncy Castle to turn the MD5 digest into a String.

Following the rough-cut code to create a hash file for Maven (extracted from the maven-tools project, class WriteHashes):

public static void writeMd5(final Path baseFile) throws NoSuchAlgorithmException, IOException {
        final FileInputStream fis = new FileInputStream(baseFile.toFile());

        final MessageDigest messageDigest = MessageDigest.getInstance("MD5");
        final byte[] buffer = new byte[1024];
        int size =, 0, 1024);
        while (size >= 0) {
            messageDigest.update(buffer, 0, size);
            size =, 0, 1024);

        final String result = new String(Hex.encode(messageDigest.digest()));


        final Path md5File = baseFile.getFileSystem().getPath(baseFile.toString() + ".md5");