As part of our collaborative efforts in building mobile applications, we needed to devise a way to maximize the opportunities of working together without being inhibited by our distance. We first tried Google hangout. With google hangout one can share any window to the participating members, however the participating members cannot interact with the window themselves. The collaboration we were seeking was both visual and hands on by all participants. In order to share the code, we started to utilize the shared repository to check in & push, etc. so the others can pull and have access to the code. This however was very cumbersome during a session and didn't provide the same experience as working physically together where one can hand over the laptop to the other for a brief moment as would be the case a typical extreme programming scenario.
We then decided to try other alternatives. OSX borrows from the VNC technology and bakes this into the OS in a feature called Screen Sharing. Traditionally VNC clients have allowed interaction, but have been somewhat sluggish while refreshing the screen on updates. Surprisingly, OSX has a built in client hidden deep in it's file system which not only works similar to VNC, however it is many times faster and feels almost like working locally. It also adjusts the resolution, say bringing a 21" iMac screen to a MacBook screen, elegantly where the local resolution feels somewhat native rather than jammed cramped as I've seen on other clients, however you may still need to do some manual font adjustments if the resolutions differ by too much.
Once we have this working (setup explained below) this solves the collaboration aspects of working on a single computer while participants are in remote locations. The next step was to solve the person to person experience, e.g. physically seeing face to face and talking. For example, showing the other a page of a book or an example of an app on the phone and of course conversing. For this we decided to use FaceTime on our iPads placed to the side of our MacBooks. The final result is demonstrated on this 60 second video:
To enable screen sharing, simply go to System Preferences and choose the Sharing option.
The description to your right usually provides you your internal NAT IP address. In my case it's 192.168.1.146. This is important because you may need to modify the settings on your router to allow for the screen sharing traffic to pass through your router and have it directed to your designated computer which has screen sharing on. On my particular router, I have a port forwarding section where I simply specify the incoming port and which machine/port the traffic needs to go to.
This prepares the host so clients can connect to it. Anyone on the outside who wishes to connect to your machine now needs to use the VNC client to do so. The VNC client is hidden in the OSX file system and even spotlight doesn't find it by name so you have go there step by step. Starting from your OSX main drive, drill down to the following folder: System->Library->Core Services
and find and launch the application called "Screen Sharing" which looks like this:
Once this application is launched, the client is presented with a simple dialog to enter the host ip address as shown below. Here, the client would enter the public IP address of the person hosting the session.
The easiest way to identify the public ip address of the host is simply to visit a web site called www.WhatIsMyIPAddress.com and it will be listed in large type for the host to send to the clients.