I live on the west coast (Seattle), work for a company headquartered on the east coast, and a significant part of my development staff is in Shanghai – pretty much on the opposite side of the globe from their US east coast compatriots. Because I need to periodically drag them all together, I spend a lot of very early mornings in a coffee shop. My favorite haunt is El Diablo Coffee which opens at 5:30am; suffice to say they know me well (and all the staff here at completely awesome).
They’ve been pretty cool with my dragging out a laptop and phone, taking up a corner table for a couple of hours. I try to keep things light and mobile so the ongoing experiment at hand is “how much can I do on an iPad”.
Email is pretty easy, although inevitably email from Exchange kind of sucks. There’s basic integration with calendaring – enough to know what’s coming up anyway, so I count that as pretty good. When I get stuck with something I can’t resolve locally, I use the VMWare Horizon client to access a remote Windows desktop, which makes for an acceptable fallback.
My teams are focused on programming, so interacting with code is often what I’m trying to do – and is definitely the hardest to pull off. So far there’s no real way to get my laptop equivalent. I can’t check out the code from github, edit it, run the unit tests, and make pull requests. I have found a way to get somewhat closer.
Enter the world of cloud based development environments and local editing tools. I’ve found two paths so far: Cloud9 IDE and Panic Inc’s Triumvirate of Coda, Transmit, and Prompt.
The downside is the platform is focused for use on a desktop style browser. There’s no real support for a touch interface, and like most IDE’s it’s an incredible dense user interface. You can get to all the functions with the browser on an iPad (both Safari and Chrome), but its awkward and some functionality isn’t easily available.
Probably the biggest win with their service isn’t using it from an iPad, but using it as a shared workspace. Hands down the coolest feature they offer is the ability for two (or more) people to work in the same “workspace” and at the same time. You can see another person typing and working when using a shared workspace. Aside from Google docs or spinning up your own instance of Etherpad, you’re not going to find that level of online collaboration in an editing tool, let alone one focused on programming. Their editor supports a wide range of languages – python, ruby, php, node.js, etc, and because it’s hosted in a remote container – that you get a command line to – you can tweak it as you like.
I started poking at this service months ago when a co-worker pointed it out to me. Only recently have I started to use it more seriously: editing some open source code, running the code and unit tests, even doing a debug cycle. Time will tell if it’s sufficient for what I’m trying to do, and more so when I’m working from a laptop than my iPad.
The Panic Triumvirate
Coda, Prompt, and Transmit make up an amazing powerhouse of tools. Prompt and Transmit providing more point solutions on the iPad, and Coda bringing them together and adding some of it’s own features on top.
Prompt I found before the iPad existed – looking for an “IOS SSH client”. To my mind it is the best remote “SSH”/terminal client for IOS. From an iPad or even iPhone, you can use it to access remote hosts and get excellent terminal emulation. It’s functionally the same as opening up a terminal window on your laptop and using the ssh command to access a remote host. I have it on my iPhone, although I use it more often from my iPad with an attached keyboard. Panic enabled a lot of UI magic to make commands easier with an iPhone easier, but the on-screen keyboard setup just isn’t suited to any serious long text entry.
Transmit is the IOS version of an app that I’ve been using on the Mac for ages. It’s a client for transfering files with excellent support for a number of remote services: SFTP, FTP, WebDav, even AWS S3. The integration is with IOS “sharing” is the real win of this app. When you have it installed and set up you can use it to “share” from many apps on your iPad to a remote location: files, photos, etc. Since IOS doesn’t have a “finder” like interface, it’s the way I’ve been using to get files edited on the iPad to somewhere else.
The current pattern that is working for me uses a remote “cloud” instance with Coda accessing it. Setting up the remote cloud instance is done through a browser interface, and I access it with Prompt (or the terminal within Coda) to install what I need for development: language tools, git, and often cloning down the source I’m working on. When I’m editing files, I use Coda to access the remote instance and edit the files remotely – it takes care of loading it into the editor and when I save, it saves back to the cloud instance. I get syntax highlighting, a nicely responsive local editor, and HTML and Markdown previews. If I know I’m going to be offline for a while, I can sync down the local files for editing and push them up later.
If I were working on HTML/sites I’d have everything I need completely locally – for the server side development, there’s the running of the code where the terminal access to the cloud instance comes in. Edit in coda, save back to the remote instance, switch to the terminal and run the compile/linting/unit tests, whatever the set may be. I’ve used it with Node.js, Python/Django, and Go pretty much all in the same fashion. I get better performance on my laptop with an editor like Atom and a terminal window, but for a lightweight & remote solution – Coda is my solution of choice.
I recently expanded my iPad experiments to writing documentation – in markdown or reStructuredText markup, and using graphics apps to make diagrams to match. I’m still learning how to make that process work – the hardest thing I’ve found so far is knowing the “size” of my images. Coda has lovely markdown support (reStructredText is its own special flower, and while I’d love support in Coda I’m not surprised it’s lacking). With Transmit I can make diagrams locally (currently working on learning how to really use Concepts) and then transfer the images to the remote instance. The workflow is a little combersome compared to a laptop where you’ve got windows side by side, but it’s working.
To be clear, you don’t need Prompt or Transmit to use Panic – I just use Prompt and Transmit separately. I found them first, and see a lot of value in having them as separate applications. Panic also offers (free) a service for syncing your settings between all three apps: Panic Sync – which saves a tremendous amount of time and effort for setup, not only between the apps, but also between devices.
What I hope Coda will add ( yes, I’ve requested it as a feature) is support for “github” or “bitbucket” as remote service endpoints. Almost all the code collaboration I do uses github these days. I know it is an abominably complex offering – dealing with source control as well as remote services. Today I do all those interactions on the command line – using the terminal to access a remote instance. Making of branches and commits, pushing those up to github, and then switching to a browser to make a pull request. I would love even a simple mode where I can view a github repository as a remote filesystem, make a local edit (or edits), even add a file (or image), and then submit that as a pull request all from within Coda.
The experiments will continue!