Improving playback timing with Core MIDI Network MIDI

The network MIDI feature for OS X and iOS is fantastic – a great way to connect your mobile and desktop apps together. However mileage can vary and timing can often become unacceptable depending on the mood of your local network.

This makes sense – Wifi is not designed for sending infrequent low latency small packets where each packet must be sent instantly.

Things can be massively improved by creating a private local network to connect your iOS device to your mac directly. And in a typically Apple way it’s ridiculously easy to do!

On your mac in the wifi menu select ‘Create Network‚Ķ’ and follow the instructions. Then on your mobile device switch to the new network.It may complain that there is no internet connection but that’s ok – you don’t want interruptions from email/twitter/etc during your MIDI session anyway ūüôā

Reducing disk bloat on the command line

Some handy nix snippets to find which directories are eating into your disk space

Show me it all

First the daddy. Show disk free (df) on all mounts (-h is for (h)uman readable disk sizes)

Show a breakdown

Show disk usage (du) for a file/directory or set

-h Again human readable

-s Value for each file/directory

-c Show a grant total for all

Rather than specify a file or path I usually cd into the directory and use a wildcard:

To sort by size pipe to, err, sort. With the -h option it groups k, m, g together so not actually in true size order but it’s easy enough to see what’s what. Alternatively remove the -h and look at big numbers!

These commands will miss dot files by default. If you need to see them use

Show recent file changes

Want to see the preference files updated when you launched an app? Or can’t remember what you’ve been doing recently? Show files changed in the last 10 minutes.

To widen the net to longer durations, say files updated in the last 10 days use ctime

Time defaults to days but alternative units can be specified:

s: second

m: minute

h: hour

d: day

w: week

Show recent file access

For file access use either amin or atime with similar pattern.

Do  dangerous stuff

Please use without effect of medication. Now you’ve found files that are possibly clogging up space (how about old backup/cache/log files?) with care you¬†can delete files. Warning it’s recursive. You can/should run the command without the -delete to see what’s going to happen first.

SVN Workout 1 – Branch and merge practise

RECOMMENDED TO USE LATEST SVN CLIENT, 1.8.4 (at time of writing)

Version control is only as good as how it’s used. And it can be used really badly. All the facilities are there to prevent trouble from occurring, but only if you use them.

A basic reliable version control workflow assumes that the trunk copy contains only stable production ready code.

To ensure only stable production ready code goes into the trunk, branches must be created to contain the work for each feature for a future release. Let’s say that again:

To ensure only stable production ready code goes into the trunk, branches must be created to contain the work for each feature for a future release.

It’s often tempting to just use the trunk for everything, avoid branching and merging to save time and hassle but that leads to bigger problems down the line and costs MORE time to later fix.

So to dispel the rumour that branching and merging is difficult, let’s do a little svn workout to show how easy it can be, and how much hassle it can save when real world problems occur.

Setting XDebug breakpoints for remote CLI scripts with PHPStorm

PHPStorm makes setting and using XDebug breakpoints easy. Just define the server configurations and click the phone icon to listen mode and load your site in a browser. With the correct xdebug.ini parameters it works if your application is either running on the same machine as PHPStorm or on a remote server.

Running CLI scripts on a different server to the machine PHPStorm is running on require a bit more effort though.

First ensure the phone icon is active so PHP Storm is listening for connections.

Again ensure server configurations are setup for your project. There will be a server name and configuration name.

On the remote server define the server name that PHPStorm should listen for:

export PHP_IDE_CONFIG=””

Now execute the CLI script on the remote machine.

If the server name you specify matches the server name you have defined in your project execution will halt on your breakpoints.

Or will it?

For me this works fine for some environments. When this is not enough export some more:


to get it going and


to stop it. Nice!

How to rename a mongodb collection

On installing a sample node.js application the associated mongo files ended up with long collection names including ‘.’ and digit blocks.

To rename you cannot access the collection directly, as the dot-digit combination is illegal. Instead use

to solve the problem.

rsync. The best way to copy files between servers.

rsync to copy multiple files via ssh to a remote machine. Same syntax as scp:

-a Archive mode (ensures that symbolic links, devices, attributes, permissions, ownerships, etc. are preserved in the transfer)

-v Increase verbosity

-z Use compression

–progress, to show progress

In this example all files in /root/temp on the host machine are copied to the remote machine.

Setting up an NFS share between a virtual Parallels Ubuntu server and OS X Mountain Lion

Parallels upto now has made my life very easy for virtualisation. Instances run fast, don’t slow down the mac and setting up shared directories so remote server and host can see the same application files works flawlessly. Until today that is…

Today I need to setup Symfony2. During it’s setup, config and running it uses a combination of cli and web tools which did not get on with my usual shared directory setup. I could either get it running on the mac without the ubuntu server able to see it or working on ubuntu without the IDE on the mac able to see it.

The solution turned out to be simple – NFS to the rescue!

On the mac to setup the NFS server edit the /etc/exports file to specify the directory to share and the network range that can see it. Most importantly is  -mapall=root:wheel which ensures that all client writes appear as root, so there are no permission hassles on the client end.

UPDATE: on using this method to share a system directory on another project the share failed, so it may not be possible to use this option in all cases.


At the client end create a mount point and mount:

And for good measure add into /etc/fstab

Export a mongo collection as csv

Started to create a script to do this, then realised mongoexport can do this out of the box!

Browse and delete records in mongodb